#ifndef BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
#define BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
-#if _MSC_VER >= 1020
-#pragma once
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
#endif
//
// boost/detail/atomic_count_win32.hpp
//
-// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2001-2005 Peter Dimov
//
-// Permission to copy, use, modify, sell and distribute this software
-// is granted provided this copyright notice appears in all copies.
-// This software is provided "as is" without express or implied
-// warranty, and with no claim as to its suitability for any purpose.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
//
-#include <boost/detail/winapi.hpp>
+#include <boost/detail/interlocked.hpp>
namespace boost
{
{
public:
- explicit atomic_count(long v): value_(v)
+ explicit atomic_count( long v ): value_( v )
{
}
long operator++()
{
- return winapi::InterlockedIncrement(&value_);
+ return BOOST_INTERLOCKED_INCREMENT( &value_ );
}
long operator--()
{
- return winapi::InterlockedDecrement(&value_);
+ return BOOST_INTERLOCKED_DECREMENT( &value_ );
}
operator long() const
{
- return value_;
+ return static_cast<long const volatile &>( value_ );
}
private:
- atomic_count(atomic_count const &);
- atomic_count & operator=(atomic_count const &);
+ atomic_count( atomic_count const & );
+ atomic_count & operator=( atomic_count const & );
- volatile long value_;
+ long value_;
};
} // namespace detail