#pragma once #ifndef TATOMICVAR_H #define TATOMICVAR_H #undef DVAPI #undef DVVAR #ifdef TNZCORE_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif #include class DVAPI TAtomicVar { public: using value_type = long; public: TAtomicVar() : m_var(0) {} public: value_type operator++() { return ++m_var; } value_type operator--() { return --m_var; } value_type operator+=(value_type value) { return m_var += value; } bool operator<=(value_type rhs) { return m_var <= rhs; }; operator value_type() const { return m_var; }; #if !defined(LINUX) || defined(LINUX) && (__GNUC__ == 3) && (__GNUC_MINOR__ > 1) private: // to avoid well known bug in gcc3 ... fixed in later versions.. #endif TAtomicVar &operator=(const TAtomicVar &) = delete; // not implemented TAtomicVar(const TAtomicVar &v) = delete; // not implemented private: std::atomic m_var; }; #endif