#ifndef _THREADS_H_ #define _THREADS_H_ #ifdef MULTITHREADED #include template class ThreadSingleton { pthread_key_t mt_key; public: ThreadSingleton() { pthread_key_create(&mt_key,&destructor); } static void destructor(void* o) { if (o) delete (T*)o; } T* set(T* new_o) { T* o=(T*)pthread_getspecific(mt_key); pthread_setspecific(mt_key,new_o); return o; } T* get() { T* o=(T*)pthread_getspecific(mt_key); if (!o) { o=new T(); pthread_setspecific(mt_key,o); } return o; } T& getref() {return *get();} }; #else template class ThreadSingleton { T object; public: T* get() {return &object;} T& getref() {return object;} }; #endif #endif