Boost logo

Boost-Commit :

From: matt_calabrese_at_[hidden]
Date: 2007-06-29 03:28:25


Author: matt_calabrese
Date: 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
New Revision: 7312
URL: http://svn.boost.org/trac/boost/changeset/7312

Log:
Default binary assign implementations now internally use interlocked::modify.

Added:
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered_fwd.hpp
Text files modified:
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_dont_include.hpp | 57 ++++++++++++++++++++++++++-------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify.hpp | 2 +
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify.hpp | 34 ++++++++++++-----------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire.hpp | 18 ++++++++----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire_fwd.hpp | 12 ++++++--
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_fwd.hpp | 14 +++++++++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release.hpp | 19 +++++++++----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release_fwd.hpp | 12 ++++++--
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify_fwd.hpp | 2 +
   9 files changed, 117 insertions(+), 53 deletions(-)

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_dont_include.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_dont_include.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -37,12 +37,39 @@
 
 // ToDo: Change to only include appropriate versions of assign_if_was
 #include <boost/act/interlocked/assign_if_was.hpp>
-#include <boost/act/interlocked/load.hpp>
+#include <boost/act/interlocked/modify.hpp>
 
 #include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
+template< typename OperandType >
+class BOOST_PP_CAT
+ (
+ BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_FULL_NAME
+ , _default_impl_fun_object
+ )
+{
+public:
+ explicit BOOST_PP_CAT
+ (
+ BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_FULL_NAME
+ , _default_impl_fun_object
+ )
+ ( OperandType operand_init )
+ : operand_m( operand_init ) {}
+public:
+ template< typename TargetType >
+ typename remove_cv< TargetType >::type
+ operator ()( TargetType const& target ) const
+ {
+ return static_cast< typename remove_cv< TargetType >::type >
+ ( target BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_OP operand_m );
+ }
+private:
+ OperandType operand_m;
+};
+
 // ToDo: Change to minimize memory barriers (don't always use full barrier form)
 struct BOOST_PP_CAT
        (
@@ -52,26 +79,18 @@
 {
   template< typename TargetType, typename OperandType >
   static typename remove_cv< TargetType >::type
- execute( TargetType& target, OperandType operand )
+ execute( TargetType& target, OperandType const& operand )
   {
- typedef typename remove_cv< TargetType >::type unqualified_type;
- unqualified_type new_value;
-
- for( unqualified_type curr_value = interlocked::load( target )
- ; ( new_value = interlocked::assign_if_was
- ( target
- , curr_value
- BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_OP
- operand
- , curr_value
- )
- )
- != curr_value
- ; curr_value = new_value
- );
+ typedef typename remove_cv< OperandType >::type stored_operand_type;
 
- // Note: new_value is the old value here
- return new_value;
+ return modify< BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_SEMANTICS >
+ ( target, BOOST_PP_CAT
+ (
+ BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_FULL_NAME
+ , _default_impl_fun_object
+ )
+ < stored_operand_type >( operand )
+ );
   }
 };
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -12,5 +12,7 @@
 #include <boost/act/interlocked/modify/modify.hpp>
 #include <boost/act/interlocked/modify/modify_acquire.hpp>
 #include <boost/act/interlocked/modify/modify_release.hpp>
+#include <boost/act/interlocked/modify/modify_acq_rel.hpp>
+#include <boost/act/interlocked/modify/modify_unordered.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -9,10 +9,13 @@
 #ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_HPP
 #define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_HPP
 
-#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/act/interlocked/semantics/default.hpp>
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -25,22 +28,21 @@
 ::type
 modify( TargetType& destination, OperationType operation )
 {
- typedef typename remove_cv< TargetType >::type unqualified_type;
- unqualified_type new_value;
-
- for( unqualified_type curr_value = interlocked::load( target )
- ; ( new_value = interlocked::assign_if_was
- ( target
- , operation( curr_value )
- , curr_value
- )
- )
- != curr_value
- ; curr_value = new_value
- );
+ return modify< acq_rel >( destination, operation );
+}
 
- // Note: new_value is the old value here
- return new_value;
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, default_ >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation )
+{
+ return modify< acq_rel >( destination, operation );
 }
 
 } } }

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to 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)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQ_REL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/acquire.hpp>
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/act/interlocked/load/load_acquire.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, acq_rel >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation )
+{
+ typedef typename remove_cv< TargetType >::type unqualified_type;
+ unqualified_type new_value;
+
+ for( unqualified_type curr_value = interlocked::load< acquire >( destination )
+ ; ( new_value = interlocked::assign_if_was< acq_rel >
+ ( destination
+ , operation( curr_value )
+ , curr_value
+ )
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ // Note: new_value is the old value here
+ return new_value;
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acq_rel_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to 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)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQ_REL_FWD_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, acq_rel >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation );
+
+} } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -12,25 +12,31 @@
 #include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/acquire.hpp>
+#include <boost/act/interlocked/load/load_acquire.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
-template< typename TargetType, typename OperationType >
+template< typename Semantics, typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_store_style_params< TargetType >
+ mpl::and_< is_same< Semantics, acquire >
+ , detail::are_valid_store_style_params< TargetType >
+ >
 , remove_cv< TargetType >
>
 ::type
-modify_acquire( TargetType& destination, OperationType operation )
+modify( TargetType& destination, OperationType operation )
 {
   typedef typename remove_cv< TargetType >::type unqualified_type;
   unqualified_type new_value;
 
- for( unqualified_type curr_value = interlocked::load( target )
- ; ( new_value = interlocked::assign_if_was_acquire
- ( target
+ for( unqualified_type curr_value = interlocked::load< acquire >( destination )
+ ; ( new_value = interlocked::assign_if_was< acquire >
+ ( destination
                         , operation( curr_value )
                         , curr_value
                         )

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -9,20 +9,26 @@
 #ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQUIRE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_ACQUIRE_FWD_HPP
 
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/acquire.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
-template< typename TargetType, typename OperationType >
+template< typename Semantics, typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_store_style_params< TargetType >
+ mpl::and_< is_same< Semantics, acquire >
+ , detail::are_valid_store_style_params< TargetType >
+ >
 , remove_cv< TargetType >
>
 ::type
-modify_acquire( TargetType& destination, OperationType operation );
+modify( TargetType& destination, OperationType operation );
 
 } } }
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -12,6 +12,9 @@
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/act/interlocked/semantics/default.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_same.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -24,6 +27,17 @@
 ::type
 modify( TargetType& destination, OperationType operation );
 
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, default_ >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation );
+
 } } }
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -12,25 +12,32 @@
 #include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+#include <boost/act/interlocked/semantics/release.hpp>
+#include <boost/act/interlocked/load/load_unordered.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
-template< typename TargetType, typename OperationType >
+template< typename Semantics, typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_store_style_params< TargetType >
+ mpl::and_< is_same< Semantics, release >
+ , detail::are_valid_store_style_params< TargetType >
+ >
 , remove_cv< TargetType >
>
 ::type
-modify_release( TargetType& destination, OperationType operation )
+modify( TargetType& destination, OperationType operation )
 {
   typedef typename remove_cv< TargetType >::type unqualified_type;
   unqualified_type new_value;
 
- for( unqualified_type curr_value = interlocked::load( target )
- ; ( new_value = interlocked::assign_if_was_release
- ( target
+ for( unqualified_type curr_value = interlocked::load< unordered >(destination)
+ ; ( new_value = interlocked::assign_if_was< release >
+ ( destination
                         , operation( curr_value )
                         , curr_value
                         )

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -9,20 +9,26 @@
 #ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_RELEASE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_RELEASE_FWD_HPP
 
+#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
 #include <boost/act/interlocked/detail/cas_support.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/release.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
-template< typename TargetType, typename OperationType >
+template< typename Semantics, typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_store_style_params< TargetType >
+ mpl::and_< is_same< Semantics, release >
+ , detail::are_valid_store_style_params< TargetType >
+ >
 , remove_cv< TargetType >
>
 ::type
-modify_release( TargetType& destination, OperationType operation );
+modify( TargetType& destination, OperationType operation );
 
 } } }
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to 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)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_UNORDERED_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+#include <boost/act/interlocked/load/load_unordered.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, unordered >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation )
+{
+ typedef typename remove_cv< TargetType >::type unqualified_type;
+ unqualified_type new_value;
+
+ for( unqualified_type curr_value = interlocked::load< unordered >(destination)
+ ; ( new_value = interlocked::assign_if_was< unordered >
+ ( destination
+ , operation( curr_value )
+ , curr_value
+ )
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ // Note: new_value is the old value here
+ return new_value;
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_unordered_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to 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)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_UNORDERED_FWD_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, unordered >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation );
+
+} } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify_fwd.hpp 2007-06-29 03:28:24 EDT (Fri, 29 Jun 2007)
@@ -12,5 +12,7 @@
 #include <boost/act/interlocked/modify/modify_fwd.hpp>
 #include <boost/act/interlocked/modify/modify_acquire_fwd.hpp>
 #include <boost/act/interlocked/modify/modify_release_fwd.hpp>
+#include <boost/act/interlocked/modify/modify_acq_rel_fwd.hpp>
+#include <boost/act/interlocked/modify/modify_unordered_fwd.hpp>
 
 #endif


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk