fixing stuff
[dyninst.git] / dynutil / h / dyn_detail / boost / detail / atomic_count_sync.hpp
1 #ifndef DYN_DETAIL_BOOST_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED
2 #define DYN_DETAIL_BOOST_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED
3
4 //
5 //  boost/detail/atomic_count_sync.hpp
6 //
7 //  atomic_count for g++ 4.1+
8 //
9 //  http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html
10 //
11 //  Copyright 2007 Peter Dimov
12 //
13 //  Distributed under the Boost Software License, Version 1.0. (See
14 //  accompanying file LICENSE_1_0.txt or copy at
15 //  http://www.boost.org/LICENSE_1_0.txt)
16 //
17
18 #if defined( __ia64__ ) && defined( __INTEL_COMPILER )
19 # include <ia64intrin.h>
20 #endif
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     void operator++()
38     {
39         __sync_add_and_fetch( &value_, 1 );
40     }
41
42     long operator--()
43     {
44         return __sync_add_and_fetch( &value_, -1 );
45     }
46
47     operator long() const
48     {
49         return __sync_fetch_and_add( &value_, 0 );
50     }
51
52 private:
53
54     atomic_count(atomic_count const &);
55     atomic_count & operator=(atomic_count const &);
56
57     mutable long value_;
58 };
59
60 } // namespace detail
61
62 } // namespace boost
63
64 } // namespace dyn_detail
65 #endif // #ifndef DYN_DETAIL_BOOST_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED