/*
* OS native thread abstraction.
*
- * Mimics C++11 / boost threads.
+ * Mimics C++11 threads.
*/
#ifndef _OS_THREAD_HPP_
};
- /**
- * Same interface as boost::thread_specific_ptr.
- */
template <typename T>
class thread_specific_ptr
{
DWORD dwTlsIndex;
#else
pthread_key_t key;
-
- static void destructor(void *ptr) {
- delete static_cast<T *>(ptr);
- }
#endif
public:
#ifdef _WIN32
dwTlsIndex = TlsAlloc();
#else
- pthread_key_create(&key, &destructor);
+ pthread_key_create(&key, NULL);
#endif
}
#endif
}
- T* get(void) const {
+ inline T *
+ get(void) const {
void *ptr;
#ifdef _WIN32
ptr = TlsGetValue(dwTlsIndex);
return static_cast<T*>(ptr);
}
- T* operator -> (void) const
+ inline
+ operator T * (void) const
{
return get();
}
- T& operator * (void) const
+ inline T *
+ operator -> (void) const
{
- return *get();
+ return get();
}
- void reset(T* new_value=0) {
- T * old_value = get();
+ inline T *
+ operator = (T * new_value)
+ {
set(new_value);
- if (old_value) {
- delete old_value;
- }
+ return new_value;
}
- T* release (void) {
- T * old_value = get();
- set(0);
- return old_value;
- }
-
-private:
- void set(T* new_value) {
+ inline void
+ set(T* new_value) {
#ifdef _WIN32
TlsSetValue(dwTlsIndex, new_value);
#else