diff --git a/include/chaiscript/chaiscript_threading.hpp b/include/chaiscript/chaiscript_threading.hpp new file mode 100644 index 0000000..e00d82e --- /dev/null +++ b/include/chaiscript/chaiscript_threading.hpp @@ -0,0 +1,68 @@ +#ifndef __chaiscript_threading_hpp__ +#define __chaiscript_threading_hpp__ + +#ifndef CHAISCRIPT_NO_THREADS +#include +#else +#warning "ChaiScript is compiling without thread safety." +#endif + +namespace chaiscript +{ + namespace threading + { + +#ifndef CHAISCRIPT_NO_THREADS + + template + class Thread_Storage + { + public: + inline T *operator->() const + { + if (!m_thread_storage.get()) + { + m_thread_storage.reset(new T()); + } + + return m_thread_storage.get(); + } + + inline T &operator*() const + { + return *(this->operator->()); + } + + private: + mutable boost::thread_specific_ptr m_thread_storage; + }; + +#else + + template + class Thread_Storage + { + public: + inline T *operator->() const + { + return &obj; + } + + inline T &operator*() const + { + return obj; + } + + private: + mutable T obj; + }; + +#endif + + } +} + + + +#endif +