MyAtomic.hpp
1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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;
}