diff options
Diffstat (limited to 'src/util/tls.h.in')
-rw-r--r-- | src/util/tls.h.in | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/util/tls.h.in b/src/util/tls.h.in index fc0b6932b..bb69e7c82 100644 --- a/src/util/tls.h.in +++ b/src/util/tls.h.in @@ -143,6 +143,56 @@ public: } };/* class ThreadLocal<T> */ +template <class T> +class ThreadLocal<T*> : public ThreadLocalImpl<T*, sizeof(T*) <= sizeof(void*)> { + typedef ThreadLocalImpl<T*, sizeof(T*) <= sizeof(void*)> super; + +public: + ThreadLocal() : super() {} + ThreadLocal(T* t) : super(t) {} + ThreadLocal(const ThreadLocal<T*>& tl) : super(tl) {} + + ThreadLocal<T*>& operator=(T* t) { + return static_cast< ThreadLocal<T*>& >(super::operator=(t)); + } + ThreadLocal<T*>& operator=(const ThreadLocal<T*>& tl) { + return static_cast< ThreadLocal<T*>& >(super::operator=(tl)); + } + // special operators for pointers + T& operator*() { + return *static_cast<T*>(*this); + } + const T& operator*() const { + return *static_cast<const T*>(*this); + } + T* operator->() { + return static_cast<T*>(*this); + } + const T* operator->() const { + return static_cast<const T*>(*this); + } + T* operator++() { + T* p = *this; + *this = ++p; + return p; + } + T* operator++(int) { + T* p = *this; + *this = p + 1; + return p; + } + T* operator--() { + T* p = *this; + *this = --p; + return p; + } + T* operator--(int) { + T* p = *this; + *this = p - 1; + return p; + } +};/* class ThreadLocal<T*> */ + }/* CVC4 namespace */ #endif /* @CVC4_TLS_SUPPORTED@ */ |