libcommonc++  0.7
ThreadLocal.h++
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------------
2  commonc++ - A C++ Common Class Library
3  Copyright (C) 2005-2014 Mark A Lindner
4 
5  This file is part of commonc++.
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Library General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Library General Public License for more details.
16 
17  You should have received a copy of the GNU Library General Public
18  License along with this library; if not, write to the Free
19  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  ---------------------------------------------------------------------------
21 */
22 
23 #ifndef __ccxx_ThreadLocal_hxx
24 #define __ccxx_ThreadLocal_hxx
25 
26 #include <commonc++/Common.h++>
28 #include <commonc++/System.h++>
30 
31 #ifdef CCXX_OS_WINDOWS
32 #include <commonc++/Windows.h++>
33 #endif
34 
35 #ifdef CCXX_OS_POSIX
36 #include <pthread.h>
37 #endif
38 
39 namespace ccxx {
40 
51 template <typename T> class ThreadLocal
52 {
53  public:
54 
60  ThreadLocal();
61 
69  virtual ~ThreadLocal();
70 
78  T& operator*();
79 
87  T* operator->();
88 
94  void setValue(T* value);
95 
101  T* getValue();
102 
108  static int getSlotCount();
109 
110  protected:
111 
118  virtual T* initialValue();
119 
120  private:
121 
122 #ifdef CCXX_OS_WINDOWS
123  int _key;
124 #else
125  pthread_key_t _key;
126 #endif
127 
128  static void keyDestructor(void* arg);
129 
130  CCXX_COPY_DECLS(ThreadLocal);
131 };
132 
133 #include <commonc++/ThreadLocalImpl.h++>
134 
135 } // namespace ccxx
136 
137 #endif // __ccxx_ThreadLocal_hxx
T * getValue()
Get the value of the thread-local object for the calling thread.
T * operator->()
Pointer operator.
virtual ~ThreadLocal()
Destructor.
void setValue(T *value)
Set the value of the thread-local object for the calling thread.
ThreadLocal()
Construct a new ThreadLocal object.
static int getSlotCount()
Get the maximum number of thread-local storage slots available on this platform.
virtual T * initialValue()
Provide the intial value of the thread-local object for the calling thread.
Thread-local storage smart pointer.
Definition: ThreadLocal.h++:51
Definition: AllocationMap.c++:25
T & operator*()
Pointer-dereference operator.