activemq-cpp-3.9.5
ThreadLocal.h
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef _DECAF_LANG_THREADLOCAL_H_
19#define _DECAF_LANG_THREADLOCAL_H_
20
21#include <decaf/util/Config.h>
22
24
25namespace decaf {
26namespace lang {
27
42 template <typename E>
44 private:
45
46 ThreadLocal(const ThreadLocal&);
47 ThreadLocal& operator= (const ThreadLocal&);
48
49 public:
50
54 ThreadLocal() : ThreadLocalImpl() {}
55
56 virtual ~ThreadLocal() {
57 try {
58 removeAll();
59 } catch(...) {}
60 }
61
69 E& get() {
70 void* bytes = getRawValue();
71 if (bytes == NULL) {
72 E* value = new E();
73 *value = initialValue();
74 setRawValue((void*)value);
75 bytes = value;
76 }
77 return *((E*)bytes);
78 }
79
88 void set(const E& value) {
89 setRawValue((void*)(new E(value)));
90 }
91
99 void remove() {
100 this->setRawValue(NULL);
101 }
102
103 protected:
104
120 virtual E initialValue() const {
121 return E();
122 }
123
124 protected:
125
126 virtual void doDelete(void* value) {
127 if (value != 0) {
128 delete static_cast<E*>(value);
129 }
130 }
131
132 };
133
134}}
135
136#endif /* _DECAF_LANG_THREADLOCAL_H_ */
void removeAll()
Removes from all threads any allocated data stored for this ThreadLocal instance.
void setRawValue(void *value)
Sets the raw void* value for the current thread.
void * getRawValue() const
Returns the current threads assigned value, but retains ownership to this value unless the remove met...
ThreadLocal()
Creates a new instance of a ThreadLocal.
Definition ThreadLocal.h:54
void remove()
Removes the current thread's value for this thread-local variable.
Definition ThreadLocal.h:99
E & get()
Returns the value in the current thread's copy of this thread-local variable.
Definition ThreadLocal.h:69
void set(const E &value)
Sets the current thread's copy of this thread-local variable to the specified value.
Definition ThreadLocal.h:88
virtual ~ThreadLocal()
Definition ThreadLocal.h:56
virtual E initialValue() const
Returns the current thread's "initial value" for this thread-local variable.
Definition ThreadLocal.h:120
virtual void doDelete(void *value)
Called to destroy the value held by the current thread or by the library on shutdown if there are sti...
Definition ThreadLocal.h:126
#define NULL
Definition Config.h:33
Definition ThreadingTypes.h:31
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.
Definition AprPool.h:25