46 template <
typename Type>
58 for (
auto* o = first.
get(); o !=
nullptr;)
78 operator Type*()
const noexcept {
return &
get(); }
95 Type&
get()
const noexcept
98 ObjectHolder* o =
nullptr;
100 for (o = first.
get(); o !=
nullptr; o = o->next)
101 if (o->threadId.get() == threadId)
104 for (o = first.
get(); o !=
nullptr; o = o->next)
105 if (o->threadId.compareAndSetBool (threadId,
nullptr))
111 for (o =
new ObjectHolder (threadId, first.
get());
113 o->next = first.
get());
125 for (
auto* o = first.
get(); o !=
nullptr; o = o->next)
126 if (o->threadId.compareAndSetBool (
nullptr, threadId))
134 ObjectHolder (
Thread::ThreadID idToUse, ObjectHolder* n) : threadId (idToUse), next (n), object() {}
140 JUCE_DECLARE_NON_COPYABLE (ObjectHolder)
void releaseCurrentThreadStorage()
static ThreadID JUCE_CALLTYPE getCurrentThreadId()
ThreadLocalValue & operator=(const Type &newValue)
Type get() const noexcept
Type * operator->() const noexcept
bool compareAndSetBool(Type newValue, Type valueToCompare) noexcept
Type & operator*() const noexcept