1#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
2#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
3
4// MS compatible compilers support #pragma once
5
6#if defined(_MSC_VER) && (_MSC_VER >= 1020)
7# pragma once
8#endif
9
10//
11// boost/detail/atomic_count.hpp - thread/SMP safe reference counter
12//
13// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
14// Copyright (c) 2013 Peter Dimov
15//
16// Distributed under the Boost Software License, Version 1.0.
17// See accompanying file LICENSE_1_0.txt or copy at
18// http://www.boost.org/LICENSE_1_0.txt
19//
20// typedef <implementation-defined> boost::detail::atomic_count;
21//
22// atomic_count a(n);
23//
24// (n is convertible to long)
25//
26// Effects: Constructs an atomic_count with an initial value of n
27//
28// a;
29//
30// Returns: (long) the current value of a
31// Memory Ordering: acquire
32//
33// ++a;
34//
35// Effects: Atomically increments the value of a
36// Returns: (long) the new value of a
37// Memory Ordering: acquire/release
38//
39// --a;
40//
41// Effects: Atomically decrements the value of a
42// Returns: (long) the new value of a
43// Memory Ordering: acquire/release
44//
45
46#include <boost/config.hpp>
47#include <boost/smart_ptr/detail/sp_has_sync.hpp>
48
49#if defined( BOOST_AC_DISABLE_THREADS )
50# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
51
52#elif defined( BOOST_AC_USE_STD_ATOMIC )
53# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>
54
55#elif defined( BOOST_AC_USE_SPINLOCK )
56# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
57
58#elif defined( BOOST_AC_USE_PTHREADS )
59# include <boost/smart_ptr/detail/atomic_count_pt.hpp>
60
61#elif defined( BOOST_SP_DISABLE_THREADS )
62# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
63
64#elif defined( BOOST_SP_USE_STD_ATOMIC )
65# include <boost/smart_ptr/detail/atomic_count_std_atomic.hpp>
66
67#elif defined( BOOST_SP_USE_SPINLOCK )
68# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
69
70#elif defined( BOOST_SP_USE_PTHREADS )
71# include <boost/smart_ptr/detail/atomic_count_pt.hpp>
72
73#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )
74# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
75
76#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined( __PATHSCALE__ )
77# include <boost/smart_ptr/detail/atomic_count_gcc_x86.hpp>
78
79#elif defined( BOOST_SP_HAS_SYNC )
80# include <boost/smart_ptr/detail/atomic_count_sync.hpp>
81
82#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
83# include <boost/smart_ptr/detail/atomic_count_win32.hpp>
84
85#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
86# include <boost/smart_ptr/detail/atomic_count_gcc.hpp>
87
88#elif !defined( BOOST_HAS_THREADS )
89# include <boost/smart_ptr/detail/atomic_count_nt.hpp>
90
91#else
92# include <boost/smart_ptr/detail/atomic_count_spin.hpp>
93
94#endif
95
96#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
97

source code of boost/boost/smart_ptr/detail/atomic_count.hpp