| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | /////////////////////////////////////////////////////////////////////////////////  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_MT_ATOMIC_DETAIL_HPP#define BOOST_MT_ATOMIC_DETAIL_HPP#include <boost/config.hpp>#ifdef BOOST_HAS_THREADS#ifndef BOOST_NO_CXX11_HDR_ATOMIC#  include <atomic>#  define BOOST_MATH_ATOMIC_NS stdnamespace boost {   namespace multiprecision {      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_integer_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_integer_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_MT_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 boostnamespace boost{ namespace multiprecision{ namespace detail{//// We need a type to use as an atomic counter://#if BOOST_ATOMIC_INT_LOCK_FREE == 2typedef 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 == 2typedef 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 == 2typedef 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 == 2typedef 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_MT_NO_ATOMIC_INT#endif}}} // namespaces#endif  // BOOST_NO_CXX11_HDR_ATOMIC#else // BOOST_HAS_THREADS#define BOOST_MT_NO_ATOMIC_INT#endif // BOOST_HAS_THREADSnamespace boost { namespace multiprecision { namespace detail {#ifdef BOOST_MT_NO_ATOMIC_INTtypedef unsigned precision_type;#elsetypedef atomic_unsigned_type precision_type;#endif} } }#endif // BOOST_MATH_ATOMIC_DETAIL_HPP
 |