]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/smart_ptr/detail/atomic_count_win32.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
70edce98a85c151a5607b431af6a5a2b85f5df3a
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / smart_ptr / detail / atomic_count_win32.hpp
1 #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\r
2 #define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\r
3 \r
4 // MS compatible compilers support #pragma once\r
5 \r
6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)\r
7 # pragma once\r
8 #endif\r
9 \r
10 //\r
11 //  boost/detail/atomic_count_win32.hpp\r
12 //\r
13 //  Copyright (c) 2001-2005 Peter Dimov\r
14 //\r
15 // Distributed under the Boost Software License, Version 1.0. (See\r
16 // accompanying file LICENSE_1_0.txt or copy at\r
17 // http://www.boost.org/LICENSE_1_0.txt)\r
18 //\r
19 \r
20 #include <boost/detail/interlocked.hpp>\r
21 \r
22 namespace boost\r
23 {\r
24 \r
25 namespace detail\r
26 {\r
27 \r
28 class atomic_count\r
29 {\r
30 public:\r
31 \r
32     explicit atomic_count( long v ): value_( v )\r
33     {\r
34     }\r
35 \r
36     long operator++()\r
37     {\r
38         return BOOST_INTERLOCKED_INCREMENT( &value_ );\r
39     }\r
40 \r
41     long operator--()\r
42     {\r
43         return BOOST_INTERLOCKED_DECREMENT( &value_ );\r
44     }\r
45 \r
46     operator long() const\r
47     {\r
48         return static_cast<long const volatile &>( value_ );\r
49     }\r
50 \r
51 private:\r
52 \r
53     atomic_count( atomic_count const & );\r
54     atomic_count & operator=( atomic_count const & );\r
55 \r
56     long value_;\r
57 };\r
58 \r
59 } // namespace detail\r
60 \r
61 } // namespace boost\r
62 \r
63 #endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED\r