Chris@101
|
1 // Copyright (C) 2011-2013 Tim Blechmann
|
Chris@16
|
2 //
|
Chris@16
|
3 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
4 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
5 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6
|
Chris@16
|
7 #ifndef BOOST_LOCKFREE_DETAIL_ATOMIC_HPP
|
Chris@16
|
8 #define BOOST_LOCKFREE_DETAIL_ATOMIC_HPP
|
Chris@16
|
9
|
Chris@16
|
10 #include <boost/config.hpp>
|
Chris@16
|
11
|
Chris@101
|
12 #ifndef BOOST_LOCKFREE_FORCE_STD_ATOMIC
|
Chris@101
|
13
|
Chris@16
|
14 #define BOOST_LOCKFREE_NO_HDR_ATOMIC
|
Chris@16
|
15
|
Chris@16
|
16 // MSVC supports atomic<> from version 2012 onwards.
|
Chris@16
|
17 #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
|
Chris@16
|
18 #undef BOOST_LOCKFREE_NO_HDR_ATOMIC
|
Chris@16
|
19 #endif
|
Chris@16
|
20
|
Chris@16
|
21 // GCC supports atomic<> from version 4.8 onwards.
|
Chris@101
|
22 #if (BOOST_GCC >= 40800) && (__cplusplus >= 201103L)
|
Chris@16
|
23 #undef BOOST_LOCKFREE_NO_HDR_ATOMIC
|
Chris@16
|
24 #endif
|
Chris@16
|
25
|
Chris@101
|
26 #endif // BOOST_LOCKFREE_FORCE_STD_ATOMIC
|
Chris@101
|
27
|
Chris@16
|
28
|
Chris@16
|
29 #if defined(BOOST_LOCKFREE_NO_HDR_ATOMIC)
|
Chris@16
|
30 #include <boost/atomic.hpp>
|
Chris@16
|
31 #else
|
Chris@16
|
32 #include <atomic>
|
Chris@16
|
33 #endif
|
Chris@16
|
34
|
Chris@16
|
35 namespace boost {
|
Chris@16
|
36 namespace lockfree {
|
Chris@16
|
37 namespace detail {
|
Chris@16
|
38
|
Chris@16
|
39 #if defined(BOOST_LOCKFREE_NO_HDR_ATOMIC)
|
Chris@16
|
40 using boost::atomic;
|
Chris@16
|
41 using boost::memory_order_acquire;
|
Chris@16
|
42 using boost::memory_order_consume;
|
Chris@16
|
43 using boost::memory_order_relaxed;
|
Chris@16
|
44 using boost::memory_order_release;
|
Chris@16
|
45 #else
|
Chris@16
|
46 using std::atomic;
|
Chris@16
|
47 using std::memory_order_acquire;
|
Chris@16
|
48 using std::memory_order_consume;
|
Chris@16
|
49 using std::memory_order_relaxed;
|
Chris@16
|
50 using std::memory_order_release;
|
Chris@16
|
51 #endif
|
Chris@16
|
52
|
Chris@16
|
53 }
|
Chris@16
|
54 using detail::atomic;
|
Chris@16
|
55 using detail::memory_order_acquire;
|
Chris@16
|
56 using detail::memory_order_consume;
|
Chris@16
|
57 using detail::memory_order_relaxed;
|
Chris@16
|
58 using detail::memory_order_release;
|
Chris@16
|
59
|
Chris@16
|
60 }}
|
Chris@16
|
61
|
Chris@16
|
62 #endif /* BOOST_LOCKFREE_DETAIL_ATOMIC_HPP */
|