| /////////////////////////////////////////////////////////////////////////////// | |
| // 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 |