tahoma2d/toonz/sources/include/tatomicvar.h

46 lines
997 B
C
Raw Normal View History

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