2016-05-17 03:04:11 +12:00
|
|
|
#pragma once
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
#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 <atomic>
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
class DVAPI TAtomicVar {
|
2016-06-23 18:19:53 +12:00
|
|
|
public:
|
|
|
|
using value_type = long;
|
|
|
|
|
2016-03-19 06:57:51 +13:00
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
TAtomicVar() : m_var(0) {}
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-23 18:19:53 +12:00
|
|
|
public:
|
|
|
|
value_type operator++() { return ++m_var; }
|
|
|
|
value_type operator--() { return --m_var; }
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-23 18:19:53 +12:00
|
|
|
value_type operator+=(value_type value) { return m_var += value; }
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-23 18:19:53 +12:00
|
|
|
bool operator<=(value_type rhs) { return m_var <= rhs; };
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-23 18:19:53 +12:00
|
|
|
operator value_type() const { return m_var; };
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
#if !defined(LINUX) || defined(LINUX) && (__GNUC__ == 3) && (__GNUC_MINOR__ > 1)
|
2016-06-15 18:43:10 +12:00
|
|
|
private: // to avoid well known bug in gcc3 ... fixed in later versions..
|
2016-03-19 06:57:51 +13:00
|
|
|
#endif
|
2016-06-23 18:19:53 +12:00
|
|
|
TAtomicVar &operator=(const TAtomicVar &) = delete; // not implemented
|
|
|
|
TAtomicVar(const TAtomicVar &v) = delete; // not implemented
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::atomic<value_type> m_var;
|
2016-03-19 06:57:51 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|