mirror of
https://github.com/boostorg/smart_ptr.git
synced 2025-07-31 13:17:23 +02:00
Move boost/memory_order.hpp to Boost.Atomic
This commit is contained in:
@@ -1,53 +0,0 @@
|
|||||||
#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED
|
|
||||||
#define BOOST_MEMORY_ORDER_HPP_INCLUDED
|
|
||||||
|
|
||||||
// MS compatible compilers support #pragma once
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
|
||||||
# pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// boost/memory_order.hpp
|
|
||||||
//
|
|
||||||
// Defines enum boost::memory_order per the C++0x working draft
|
|
||||||
//
|
|
||||||
// Copyright (c) 2008, 2009 Peter Dimov
|
|
||||||
//
|
|
||||||
// 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)
|
|
||||||
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
//
|
|
||||||
// Enum values are chosen so that code that needs to insert
|
|
||||||
// a trailing fence for acquire semantics can use a single
|
|
||||||
// test such as:
|
|
||||||
//
|
|
||||||
// if( mo & memory_order_acquire ) { ...fence... }
|
|
||||||
//
|
|
||||||
// For leading fences one can use:
|
|
||||||
//
|
|
||||||
// if( mo & memory_order_release ) { ...fence... }
|
|
||||||
//
|
|
||||||
// Architectures such as Alpha that need a fence on consume
|
|
||||||
// can use:
|
|
||||||
//
|
|
||||||
// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... }
|
|
||||||
//
|
|
||||||
|
|
||||||
enum memory_order
|
|
||||||
{
|
|
||||||
memory_order_relaxed = 0,
|
|
||||||
memory_order_acquire = 1,
|
|
||||||
memory_order_release = 2,
|
|
||||||
memory_order_acq_rel = 3, // acquire | release
|
|
||||||
memory_order_seq_cst = 7, // acq_rel | 4
|
|
||||||
memory_order_consume = 8
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace boost
|
|
||||||
|
|
||||||
#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED
|
|
@@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
|
#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
|
||||||
#include <boost/smart_ptr/detail/spinlock_pool.hpp>
|
#include <boost/smart_ptr/detail/spinlock_pool.hpp>
|
||||||
#include <boost/memory_order.hpp>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <algorithm> // for std::swap
|
#include <algorithm> // for std::swap
|
||||||
@@ -951,7 +950,7 @@ template<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p )
|
|||||||
return *p;
|
return *p;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, memory_order /*mo*/ )
|
template<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, /*memory_order mo*/ int )
|
||||||
{
|
{
|
||||||
return atomic_load( p );
|
return atomic_load( p );
|
||||||
}
|
}
|
||||||
@@ -962,7 +961,7 @@ template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )
|
|||||||
p->swap( r );
|
p->swap( r );
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )
|
template<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
|
||||||
{
|
{
|
||||||
atomic_store( p, r ); // std::move( r )
|
atomic_store( p, r ); // std::move( r )
|
||||||
}
|
}
|
||||||
@@ -978,7 +977,7 @@ template<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T
|
|||||||
return r; // return std::move( r )
|
return r; // return std::move( r )
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )
|
template<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
|
||||||
{
|
{
|
||||||
return atomic_exchange( p, r ); // std::move( r )
|
return atomic_exchange( p, r ); // std::move( r )
|
||||||
}
|
}
|
||||||
@@ -1008,7 +1007,7 @@ template<class T> bool atomic_compare_exchange( shared_ptr<T> * p, shared_ptr<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, memory_order /*success*/, memory_order /*failure*/ )
|
template<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, /*memory_order success*/ int, /*memory_order failure*/ int )
|
||||||
{
|
{
|
||||||
return atomic_compare_exchange( p, v, w ); // std::move( w )
|
return atomic_compare_exchange( p, v, w ); // std::move( w )
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user