// file : odb/details/tls.hxx // copyright : Copyright (c) 2009-2015 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_DETAILS_TLS_HXX #define ODB_DETAILS_TLS_HXX #include #include #ifdef ODB_THREADS_NONE # define ODB_TLS_POINTER(type) type* # define ODB_TLS_OBJECT(type) type namespace odb { namespace details { template inline T& tls_get (T& x) { return x; } // If early destructions is possible, destroy the object and free // any allocated resources. // template inline void tls_free (T&) { } template inline T* tls_get (T* p) { return p; } template inline void tls_set (T*& rp, T1* p) { rp = p; } } } #elif defined(ODB_THREADS_CXX11) # define ODB_TLS_POINTER(type) thread_local type* # define ODB_TLS_OBJECT(type) thread_local type namespace odb { namespace details { template inline T& tls_get (T& x) { return x; } template inline void tls_free (T&) { } template inline T* tls_get (T* p) { return p; } template inline void tls_set (T*& rp, T1* p) { rp = p; } } } #elif defined(ODB_THREADS_POSIX) # include # ifdef ODB_THREADS_TLS_KEYWORD # define ODB_TLS_POINTER(type) __thread type* namespace odb { namespace details { template inline T* tls_get (T* p) { return p; } template inline void tls_set (T*& rp, T1* p) { rp = p; } } } # else # define ODB_TLS_POINTER(type) tls # endif # define ODB_TLS_OBJECT(type) tls #elif defined(ODB_THREADS_WIN32) # include # ifdef ODB_THREADS_TLS_DECLSPEC # define ODB_TLS_POINTER(type) __declspec(thread) type* namespace odb { namespace details { template inline T* tls_get (T* p) { return p; } template inline void tls_set (T*& rp, T1* p) { rp = p; } } } # else # define ODB_TLS_POINTER(type) tls # endif # define ODB_TLS_OBJECT(type) tls #else # error unknown threading model #endif #include #endif // ODB_DETAILS_TLS_HXX