atomic_count_spin.hpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED
  2. #define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED
  3. //
  4. // boost/detail/atomic_count_spin.hpp
  5. //
  6. // Copyright (c) 2013 Peter Dimov
  7. //
  8. // Distributed under the Boost Software License, Version 1.0.
  9. // See accompanying file LICENSE_1_0.txt or copy at
  10. // http://www.boost.org/LICENSE_1_0.txt
  11. //
  12. #include <boost/smart_ptr/detail/spinlock_pool.hpp>
  13. namespace boost
  14. {
  15. namespace detail
  16. {
  17. class atomic_count
  18. {
  19. private:
  20. public:
  21. explicit atomic_count( long v ): value_( v )
  22. {
  23. }
  24. long operator++()
  25. {
  26. spinlock_pool<0>::scoped_lock lock( &value_ );
  27. return ++value_;
  28. }
  29. long operator--()
  30. {
  31. spinlock_pool<0>::scoped_lock lock( &value_ );
  32. return --value_;
  33. }
  34. operator long() const
  35. {
  36. spinlock_pool<0>::scoped_lock lock( &value_ );
  37. return value_;
  38. }
  39. private:
  40. atomic_count(atomic_count const &);
  41. atomic_count & operator=(atomic_count const &);
  42. long value_;
  43. };
  44. } // namespace detail
  45. } // namespace boost
  46. #endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SPIN_HPP_INCLUDED