activemq-cpp-3.8.2
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 
25 namespace decaf {
26 namespace lang {
27 
42  template <typename E>
44  private:
45 
46  ThreadLocal(const ThreadLocal&);
47  ThreadLocal& operator= (const ThreadLocal&);
48 
49  public:
50 
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_ */
virtual ~ThreadLocal()
Definition: ThreadLocal.h:56
This class provides thread-local variables.
Definition: ThreadLocal.h:43
void removeAll()
Removes from all threads any allocated data stored for this ThreadLocal instance. ...
#define NULL
Definition: Config.h:33
virtual E initialValue() const
Returns the current thread&#39;s "initial value" for this thread-local variable.
Definition: ThreadLocal.h:120
ThreadLocal()
Creates a new instance of a ThreadLocal.
Definition: ThreadLocal.h:54
void * getRawValue() const
Returns the current threads assigned value, but retains ownership to this value unless the remove met...
void setRawValue(void *value)
Sets the raw void* value for the current thread.
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements...
Definition: AprPool.h:25
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