MyAtomic.hpp 1.1 KB
#include <atomic>

template <typename T> class MyAtomic;
template<typename T>
bool operator == (MyAtomic<T> & d1, T &d2);

template<typename T>
bool operator == (MyAtomic<T> & d1, MyAtomic<T> &d2);
template <typename T>
class MyAtomic
{
public:
	MyAtomic() {};
	MyAtomic(const T & d) { data.store(d); };
	MyAtomic(const MyAtomic & d) { data.store(d.data.load()); };
	MyAtomic& operator =(T d) { data.store(d); return *this; };
	MyAtomic& operator =(MyAtomic & d) { data.store(d.data.load()); return *this; };
	MyAtomic& operator +=(T d) { data.fetch_add(d); return *this; };
	MyAtomic& operator +=(MyAtomic & d) { data.fetch_add(d); return *this; };
	operator int() { return data.load(); }
	friend bool operator ==<T> (MyAtomic<T> &d1, T &d2);
	friend bool operator ==<T> (MyAtomic<T> &d1, MyAtomic<T> &d2);
private:
	std::atomic<T> data;
};
template<typename T>
bool operator == (MyAtomic<T> & d1, T &d2)
{
	if (d1.data.load() == d2)
		return true;
	else
		return false;
}

template<typename T>
bool operator == (MyAtomic<T> & d1, MyAtomic<T> & d2)
{
	if (d1.data.load() == d2.load())
		return true;
	else
		return false;
}