#ifndef THREAD_LOCAL_H
#define THREAD_LOCAL_H
#include <SupportDefs.h>
class ThreadLocalFreeHandler {
public:
ThreadLocalFreeHandler();
virtual ~ThreadLocalFreeHandler();
virtual void Free(void* data) = 0;
};
class ThreadLocal {
public:
ThreadLocal(
ThreadLocalFreeHandler* freeHandler = NULL);
~ThreadLocal();
status_t Set(void* data);
void Unset();
void* Get() const;
private:
struct ThreadLocalMap;
ThreadLocalMap* fMap;
ThreadLocalFreeHandler* fFreeHandler;
};
class ThreadLocalUnsetter {
public:
ThreadLocalUnsetter(ThreadLocal* threadLocal)
: fThreadLocal(threadLocal)
{
}
ThreadLocalUnsetter(ThreadLocal& threadLocal)
: fThreadLocal(&threadLocal)
{
}
~ThreadLocalUnsetter()
{
if (fThreadLocal)
fThreadLocal->Unset();
}
private:
ThreadLocal* fThreadLocal;
};
#endif