CodeMover prototype
[dyninst.git] / external / boost / detail / atomic_count_solaris.hpp
1 #ifndef BOOST_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\r
2 #define BOOST_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\r
3 \r
4 //\r
5 //  boost/detail/atomic_count_solaris.hpp\r
6 //   based on: boost/detail/atomic_count_win32.hpp\r
7 //\r
8 //  Copyright (c) 2001-2005 Peter Dimov\r
9 //  Copyright (c) 2006 Michael van der Westhuizen\r
10 //\r
11 // Distributed under the Boost Software License, Version 1.0. (See\r
12 // accompanying file LICENSE_1_0.txt or copy at\r
13 // http://www.boost.org/LICENSE_1_0.txt)\r
14 //\r
15 \r
16 #include <atomic.h>\r
17 \r
18 namespace boost\r
19 {\r
20 \r
21 namespace detail\r
22 {\r
23 \r
24 class atomic_count\r
25 {\r
26 public:\r
27 \r
28     explicit atomic_count( uint32_t v ): value_( v )\r
29     {\r
30     }\r
31 \r
32     long operator++()\r
33     {\r
34         return atomic_inc_32_nv( &value_ );\r
35     }\r
36 \r
37     long operator--()\r
38     {\r
39         return atomic_dec_32_nv( &value_ );\r
40     }\r
41 \r
42     operator uint32_t() const\r
43     {\r
44         return static_cast<uint32_t const volatile &>( value_ );\r
45     }\r
46 \r
47 private:\r
48 \r
49     atomic_count( atomic_count const & );\r
50     atomic_count & operator=( atomic_count const & );\r
51 \r
52     uint32_t value_;\r
53 };\r
54 \r
55 } // namespace detail\r
56 \r
57 } // namespace boost\r
58 \r
59 #endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED\r