// file : odb/details/win32/tls.txx // author : Boris Kolpackov // copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #include // std::auto_ptr #include using namespace std; namespace odb { namespace details { // tls // template once tls::once_; template size_t tls::key_; template T& tls:: get () const { once_.call (key_init); if (void* v = _get (key_)) return *static_cast (v); auto_ptr p (new T); _set (key_, p.get ()); T& r (*p); p.release (); return r; } template void tls:: free () { once_.call (key_init); if (void* v = _get (key_)) { _set (key_, 0); delete static_cast (v); } } template void tls:: key_init () { key_ = _allocate (destructor); } template void tls:: destructor (void* v) { delete static_cast (v); } // tls // template once tls::once_; template size_t tls::key_; template T* tls:: get () const { once_.call (key_init); return static_cast (_get (key_)); } template void tls:: set (T* p) { once_.call (key_init); _set (key_, p); } template void tls:: key_init () { key_ = _allocate (0); } } }