diff options
Diffstat (limited to 'src/3rdParty/efsw/Atomic.hpp')
-rwxr-xr-x | src/3rdParty/efsw/Atomic.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/3rdParty/efsw/Atomic.hpp b/src/3rdParty/efsw/Atomic.hpp new file mode 100755 index 0000000..4008dfc --- /dev/null +++ b/src/3rdParty/efsw/Atomic.hpp | |||
@@ -0,0 +1,51 @@ | |||
1 | #ifndef EFSW_ATOMIC_BOOL_HPP | ||
2 | #define EFSW_ATOMIC_BOOL_HPP | ||
3 | |||
4 | #include <efsw/base.hpp> | ||
5 | |||
6 | #ifdef EFSW_USE_CXX11 | ||
7 | #include <atomic> | ||
8 | #endif | ||
9 | |||
10 | namespace efsw { | ||
11 | |||
12 | template <typename T> class Atomic { | ||
13 | public: | ||
14 | explicit Atomic( T set = false ) : set_( set ) {} | ||
15 | |||
16 | Atomic& operator=( T set ) { | ||
17 | #ifdef EFSW_USE_CXX11 | ||
18 | set_.store( set, std::memory_order_release ); | ||
19 | #else | ||
20 | set_ = set; | ||
21 | #endif | ||
22 | return *this; | ||
23 | } | ||
24 | |||
25 | explicit operator T() const { | ||
26 | #ifdef EFSW_USE_CXX11 | ||
27 | return set_.load( std::memory_order_acquire ); | ||
28 | #else | ||
29 | return set_; | ||
30 | #endif | ||
31 | } | ||
32 | |||
33 | T load() const { | ||
34 | #ifdef EFSW_USE_CXX11 | ||
35 | return set_.load( std::memory_order_acquire ); | ||
36 | #else | ||
37 | return set_; | ||
38 | #endif | ||
39 | } | ||
40 | |||
41 | private: | ||
42 | #ifdef EFSW_USE_CXX11 | ||
43 | std::atomic<T> set_; | ||
44 | #else | ||
45 | volatile T set_; | ||
46 | #endif | ||
47 | }; | ||
48 | |||
49 | } // namespace efsw | ||
50 | |||
51 | #endif | ||