log4shib
2.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
OmniThreads.hh
Go to the documentation of this file.
1
/*
2
* OmniThreads.hh
3
*
4
* Copyright 2002, LifeLine Networks BV (www.lifeline.nl). All rights reserved.
5
* Copyright 2002, Bastiaan Bakker. All rights reserved.
6
*
7
* See the COPYING file for the terms of usage and distribution.
8
*/
9
10
#ifndef _LOG4SHIB_THREADING_OMNITHREADS_HH
11
#define _LOG4SHIB_THREADING_OMNITHREADS_HH
12
13
#include <
log4shib/Portability.hh
>
14
#include <omnithread.h>
15
#include <stdio.h>
16
#include <string>
17
18
namespace
log4shib
{
19
namespace
threading
{
25
std::string
getThreadId
();
26
31
typedef
omni_mutex
Mutex
;
32
38
typedef
omni_mutex_lock
ScopedLock
;
39
48
template
<
typename
T>
class
ThreadLocalDataHolder
{
49
public
:
50
typedef
T
data_type
;
51
52
inline
ThreadLocalDataHolder
() :
53
_key(omni_thread::allocate_key()) {};
54
55
inline
~ThreadLocalDataHolder
() {};
56
62
inline
T*
get
()
const
{
63
Holder* holder =
dynamic_cast<
Holder*
>
(
64
::omni_thread::self()->get_value(_key));
65
return
(holder) ? holder->data : NULL;
66
};
67
74
inline
T*
operator->
()
const
{
return
get
(); };
75
81
inline
T&
operator*
()
const
{
return
*
get
(); };
82
89
inline
T*
release
() {
90
T* result = NULL;
91
Holder* holder =
dynamic_cast<
Holder*
>
(
92
::omni_thread::self()->get_value(_key));
93
94
if
(holder) {
95
result = holder->data;
96
holder->data = NULL;
97
}
98
99
return
result;
100
};
101
108
inline
void
reset
(T* p = NULL) {
109
Holder* holder =
dynamic_cast<
Holder*
>
(
110
::omni_thread::self()->get_value(_key));
111
if
(holder) {
112
if
(holder->data)
113
delete
holder->data;
114
115
holder->data = p;
116
}
else
{
117
holder =
new
Holder(p);
118
::omni_thread::self()->set_value(_key, holder);
119
}
120
};
121
122
private
:
123
class
Holder :
public
omni_thread::value_t {
124
public
:
125
Holder(
data_type
* data) : data(data) {};
126
virtual
~Holder() {
if
(data)
delete
(data); };
127
data_type
* data;
128
private
:
129
Holder(
const
Holder& other);
130
Holder& operator=(
const
Holder& other);
131
};
132
133
omni_thread::key_t _key;
134
};
135
}
136
}
137
#endif
Portability.hh
log4shib::threading::Mutex
Definition
PThreads.hh:29
log4shib::threading::ScopedLock
definition of ScopedLock;
Definition
PThreads.hh:58
log4shib::threading::ThreadLocalDataHolder
This class holds Thread local data of type T, i.e.
Definition
BoostThreads.hh:32
log4shib::threading::ThreadLocalDataHolder::operator->
T * operator->() const
Obtains the Object held for the current thread.
Definition
OmniThreads.hh:74
log4shib::threading::ThreadLocalDataHolder::operator*
T & operator*() const
Obtains the Object held for the current thread.
Definition
OmniThreads.hh:81
log4shib::threading::ThreadLocalDataHolder::~ThreadLocalDataHolder
~ThreadLocalDataHolder()
Definition
OmniThreads.hh:55
log4shib::threading::ThreadLocalDataHolder::reset
void reset(T *p=NULL)
Sets a new Object to be held for the current thread.
Definition
OmniThreads.hh:108
log4shib::threading::ThreadLocalDataHolder::get
T * get() const
Obtains the Object held for the current thread.
Definition
OmniThreads.hh:62
log4shib::threading::ThreadLocalDataHolder::data_type
T data_type
Definition
DummyThreads.hh:34
log4shib::threading::ThreadLocalDataHolder::release
T * release()
Releases the Object held for the current thread.
Definition
OmniThreads.hh:89
log4shib::threading::ThreadLocalDataHolder::ThreadLocalDataHolder
ThreadLocalDataHolder()
Definition
OmniThreads.hh:52
log4shib::threading
Definition
BoostThreads.hh:21
log4shib::threading::getThreadId
static std::string getThreadId()
Return an identifier for the current thread.
Definition
BoostThreads.hh:22
log4shib
The top level namespace for all 'Log for C++' types and classes.
Definition
AbortAppender.hh:16
include
log4shib
threading
OmniThreads.hh
Generated by
1.17.0