| /////////////////////////////////////////////////////////////////////////////// |
| // 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/math/tools/config.hpp> |
| #include <boost/math/tools/cxx03_warn.hpp> |
| |
| #ifdef BOOST_MATH_HAS_THREADS |
| #include <atomic> |
| |
| namespace boost { |
| namespace math { |
| namespace detail { |
| #if (ATOMIC_INT_LOCK_FREE == 2) && !defined(BOOST_MATH_NO_ATOMIC_INT) |
| 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) && !defined(BOOST_MATH_NO_ATOMIC_INT) |
| 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) && !defined(BOOST_MATH_NO_ATOMIC_INT) |
| 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) && !defined(BOOST_MATH_NO_ATOMIC_INT) |
| 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; |
| #elif !defined(BOOST_MATH_NO_ATOMIC_INT) |
| # define BOOST_MATH_NO_ATOMIC_INT |
| #endif |
| } // Namespace detail |
| } // Namespace math |
| } // Namespace boost |
| |
| #else |
| # define BOOST_MATH_NO_ATOMIC_INT |
| #endif // BOOST_MATH_HAS_THREADS |
| |
| #endif // BOOST_MATH_ATOMIC_DETAIL_HPP |