}
T* get() const {
- threadlocal_detail::ElementWrapper& w = StaticMeta::get(&id_);
+ threadlocal_detail::ElementWrapper& w = StaticMeta::instance().get(&id_);
return static_cast<T*>(w.ptr);
}
}
T* release() {
- threadlocal_detail::ElementWrapper& w = StaticMeta::get(&id_);
+ threadlocal_detail::ElementWrapper& w = StaticMeta::instance().get(&id_);
return static_cast<T*>(w.release());
}
void reset(T* newPtr = nullptr) {
- threadlocal_detail::ElementWrapper& w = StaticMeta::get(&id_);
+ threadlocal_detail::ElementWrapper& w = StaticMeta::instance().get(&id_);
if (w.ptr != newPtr) {
w.dispose(TLPDestructionMode::THIS_THREAD);
*/
template <class Deleter>
void reset(T* newPtr, Deleter deleter) {
- threadlocal_detail::ElementWrapper& w = StaticMeta::get(&id_);
+ threadlocal_detail::ElementWrapper& w = StaticMeta::instance().get(&id_);
if (w.ptr != newPtr) {
w.dispose(TLPDestructionMode::THIS_THREAD);
w.set(newPtr, deleter);
class Accessor {
friend class ThreadLocalPtr<T,Tag>;
- threadlocal_detail::StaticMeta<Tag>& meta_;
+ threadlocal_detail::StaticMetaBase& meta_;
std::mutex* lock_;
uint32_t id_;
boost::bidirectional_traversal_tag> { // traversal
friend class Accessor;
friend class boost::iterator_core_access;
- const Accessor* const accessor_;
+ const Accessor* accessor_;
threadlocal_detail::ThreadEntry* e_;
void increment() {
Accessor accessAllThreads() const {
static_assert(!std::is_same<Tag, void>::value,
"Must use a unique Tag to use the accessAllThreads feature");
- return Accessor(id_.getOrAllocate());
+ return Accessor(id_.getOrAllocate(StaticMeta::instance()));
}
private:
void destroy() {
- StaticMeta::destroy(&id_);
+ StaticMeta::instance().destroy(&id_);
}
// non-copyable