diff options
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/math/tools/atomic.hpp')
-rw-r--r-- | src/third_party/boost-1.69.0/boost/math/tools/atomic.hpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/math/tools/atomic.hpp b/src/third_party/boost-1.69.0/boost/math/tools/atomic.hpp new file mode 100644 index 00000000000..29a48b824c7 --- /dev/null +++ b/src/third_party/boost-1.69.0/boost/math/tools/atomic.hpp @@ -0,0 +1,93 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright 2017 John Maddock +// 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_MATH_ATOMIC_DETAIL_HPP +#define BOOST_MATH_ATOMIC_DETAIL_HPP + +#include <boost/config.hpp> + +#ifdef BOOST_HAS_THREADS + +#ifndef BOOST_NO_CXX11_HDR_ATOMIC +# include <atomic> +# define BOOST_MATH_ATOMIC_NS std +namespace boost { + namespace math { + namespace detail { +#if ATOMIC_INT_LOCK_FREE == 2 + typedef std::atomic<int> atomic_counter_type; + typedef std::atomic<unsigned> atomic_unsigned_type; + typedef int atomic_integer_type; + typedef unsigned atomic_unsigned_integer_type; +#elif ATOMIC_SHORT_LOCK_FREE == 2 + typedef std::atomic<short> atomic_counter_type; + typedef std::atomic<unsigned short> atomic_unsigned_type; + typedef short atomic_integer_type; + typedef unsigned short atomic_unsigned_type; +#elif ATOMIC_LONG_LOCK_FREE == 2 + typedef std::atomic<long> atomic_unsigned_integer_type; + typedef std::atomic<unsigned long> atomic_unsigned_type; + typedef unsigned long atomic_unsigned_type; + typedef long atomic_integer_type; +#elif ATOMIC_LLONG_LOCK_FREE == 2 + typedef std::atomic<long long> atomic_unsigned_integer_type; + typedef std::atomic<unsigned long long> atomic_unsigned_type; + typedef long long atomic_integer_type; + typedef unsigned long long atomic_unsigned_integer_type; +#else +# define BOOST_MATH_NO_ATOMIC_INT +#endif + } + }} +#else // BOOST_NO_CXX11_HDR_ATOMIC +// +// We need Boost.Atomic, but on any platform that supports auto-linking we do +// not need to link against a separate library: +// +#define BOOST_ATOMIC_NO_LIB +#include <boost/atomic.hpp> +# define BOOST_MATH_ATOMIC_NS boost + +namespace boost{ namespace math{ namespace detail{ + +// +// We need a type to use as an atomic counter: +// +#if BOOST_ATOMIC_INT_LOCK_FREE == 2 +typedef boost::atomic<int> atomic_counter_type; +typedef boost::atomic<unsigned> atomic_unsigned_type; +typedef int atomic_integer_type; +typedef unsigned atomic_unsigned_integer_type; +#elif BOOST_ATOMIC_SHORT_LOCK_FREE == 2 +typedef boost::atomic<short> atomic_counter_type; +typedef boost::atomic<unsigned short> atomic_unsigned_type; +typedef short atomic_integer_type; +typedef unsigned short atomic_unsigned_integer_type; +#elif BOOST_ATOMIC_LONG_LOCK_FREE == 2 +typedef boost::atomic<long> atomic_counter_type; +typedef boost::atomic<unsigned long> atomic_unsigned_type; +typedef long atomic_integer_type; +typedef unsigned long atomic_unsigned_integer_type; +#elif BOOST_ATOMIC_LLONG_LOCK_FREE == 2 +typedef boost::atomic<long long> atomic_counter_type; +typedef boost::atomic<unsigned long long> atomic_unsigned_type; +typedef long long atomic_integer_type; +typedef unsigned long long atomic_unsigned_integer_type; +#else +# define BOOST_MATH_NO_ATOMIC_INT +#endif + +}}} // namespaces + +#endif // BOOST_NO_CXX11_HDR_ATOMIC + +#else // BOOST_HAS_THREADS + +# define BOOST_MATH_NO_ATOMIC_INT + +#endif // BOOST_HAS_THREADS + +#endif // BOOST_MATH_ATOMIC_DETAIL_HPP |