fixing stuff
[dyninst.git] / dynutil / h / dyn_detail / boost / detail / atomic_count_win32.hpp
1 #ifndef DYN_DETAIL_BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
2 #define DYN_DETAIL_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 <dyn_detail/boost/detail/interlocked.hpp>
21
22 namespace dyn_detail
23 {
24   
25 namespace boost
26 {
27
28 namespace detail
29 {
30
31 class atomic_count
32 {
33 public:
34
35     explicit atomic_count( long v ): value_( v )
36     {
37     }
38
39     long operator++()
40     {
41         return DYN_DETAIL_BOOST_INTERLOCKED_INCREMENT( &value_ );
42     }
43
44     long operator--()
45     {
46         return DYN_DETAIL_BOOST_INTERLOCKED_DECREMENT( &value_ );
47     }
48
49     operator long() const
50     {
51         return static_cast<long const volatile &>( value_ );
52     }
53
54 private:
55
56     atomic_count( atomic_count const & );
57     atomic_count & operator=( atomic_count const & );
58
59     long value_;
60 };
61
62 } // namespace detail
63
64 } // namespace boost
65
66 } // namespace dyn_detail
67 #endif // #ifndef DYN_DETAIL_BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED