diff options
Diffstat (limited to 'boost/memory_order.hpp')
-rw-r--r-- | boost/memory_order.hpp | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/boost/memory_order.hpp b/boost/memory_order.hpp index fbe9034429..1f7d202731 100644 --- a/boost/memory_order.hpp +++ b/boost/memory_order.hpp @@ -1,22 +1,22 @@ -#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED -#define BOOST_MEMORY_ORDER_HPP_INCLUDED - -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - // boost/memory_order.hpp // // Defines enum boost::memory_order per the C++0x working draft // // Copyright (c) 2008, 2009 Peter Dimov +// Copyright (c) 2018 Andrey Semashev // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED +#define BOOST_MEMORY_ORDER_HPP_INCLUDED + +#include <boost/config.hpp> + +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif namespace boost { @@ -42,6 +42,35 @@ namespace boost // efficiently in compare_exchange methods. // +#if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) + +enum class memory_order : unsigned int +{ + relaxed = 0, + consume = 1, + acquire = 2, + release = 4, + acq_rel = 6, // acquire | release + seq_cst = 14 // acq_rel | 8 +}; + +#if !defined(BOOST_NO_CXX17_INLINE_VARIABLES) +#define BOOST_MEMORY_ORDER_INLINE_VARIABLE inline +#else +#define BOOST_MEMORY_ORDER_INLINE_VARIABLE +#endif + +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_relaxed = memory_order::relaxed; +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_consume = memory_order::consume; +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_acquire = memory_order::acquire; +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_release = memory_order::release; +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_acq_rel = memory_order::acq_rel; +BOOST_MEMORY_ORDER_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST memory_order memory_order_seq_cst = memory_order::seq_cst; + +#undef BOOST_MEMORY_ORDER_INLINE_VARIABLE + +#else // !defined(BOOST_NO_CXX11_SCOPED_ENUMS) + enum memory_order { memory_order_relaxed = 0, @@ -52,6 +81,8 @@ enum memory_order memory_order_seq_cst = 14 // acq_rel | 8 }; +#endif // !defined(BOOST_NO_CXX11_SCOPED_ENUMS) + } // namespace boost #endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED |