aboutsummaryrefslogtreecommitdiff
path: root/src/3rdParty/efsw/Atomic.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdParty/efsw/Atomic.hpp')
-rwxr-xr-xsrc/3rdParty/efsw/Atomic.hpp51
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
10namespace efsw {
11
12template <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