Merge c:/dyninst/pc_bluegene/dyninst into dyn_pc_integration
[dyninst.git] / external / boost / detail / atomic_count_win32.hpp
1 #ifndef BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
2 #define BOOST_DETAIL_ATOMIC_COUNT_WIN32_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_win32.hpp
12 //
13 //  Copyright (c) 2001-2005 Peter Dimov
14 //
15 // Distributed under the Boost Software License, Version 1.0. (See
16 // accompanying file LICENSE_1_0.txt or copy at
17 // http://www.boost.org/LICENSE_1_0.txt)
18 //
19
20 #include <boost/detail/interlocked.hpp>
21
22 namespace boost
23 {
24
25 namespace detail
26 {
27
28 class atomic_count
29 {
30 public:
31
32     explicit atomic_count( long v ): value_( v )
33     {
34     }
35
36     long operator++()
37     {
38         return BOOST_INTERLOCKED_INCREMENT( &value_ );
39     }
40
41     long operator--()
42     {
43         return BOOST_INTERLOCKED_DECREMENT( &value_ );
44     }
45
46     operator long() const
47     {
48         return static_cast<long const volatile &>( value_ );
49     }
50
51 private:
52
53     atomic_count( atomic_count const & );
54     atomic_count & operator=( atomic_count const & );
55
56     long value_;
57 };
58
59 } // namespace detail
60
61 } // namespace boost
62
63 #endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED