Boost logo

Boost-Commit :

From: matt_calabrese_at_[hidden]
Date: 2007-06-27 23:25:54


Author: matt_calabrese
Date: 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
New Revision: 7294
URL: http://svn.boost.org/trac/boost/changeset/7294

Log:
Added acq_rel semantics.

Added:
   sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_wait_free.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acq_rel_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_windows
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_vc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_windows
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default
      - copied, changed from r7120, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_gcc_x86
      - copied, changed from r7124, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_windows
      - copied, changed from r7120, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_includer/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_includer/forwarder_includer.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_read_vc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_vc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_write_vc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_acquire_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/impl_includer.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fully_ordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fully_ordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acq_rel_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_unordered_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_unordered.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_acquire.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_unordered.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/store_load_helper.hpp
      - copied, changed from r7131, /sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp
Removed:
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_default.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp
Text files modified:
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp | 30 ++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp | 26 ++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp | 3
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp | 54 -----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp | 32 +--
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_gcc_x86 | 5
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_default | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_windows | 29 ---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows | 25 --
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp | 66 +------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp | 37 +---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp | 10
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_gcc_x86 | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_windows | 77 ++-----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows | 66 ++++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows | 66 ++++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_default.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default.hpp | 1
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp | 108 ++++++++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_unary_impl.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp | 26 --
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/compiler_fence_support.hpp | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/fence_support.hpp | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp | 357 ++++++++++++++++++++++++++++++++++++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load.hpp | 43 ----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load_fwd.hpp | 18 -
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/detail/lshift_assign_default.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_acquire_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_release_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/detail/rshift_assign_default.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp | 30 ++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp | 26 ++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_default.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type/interlocked_integer_type.qbk | 36 ++--
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2 | 13 +
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp | 36 ++-
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_release.cpp | 8
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/store_load_helper.hpp | 36 ++--
   78 files changed, 862 insertions(+), 582 deletions(-)

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,202 @@
+/*=============================================================================
+ 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_CONFIG_INTERLOCKED_HAS_HPP
+#define BOOST_ACT_CONFIG_INTERLOCKED_HAS_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acq_rel() \
+BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acq_rel )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acquire ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acq_rel() \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, release ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acq_rel() \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_unordered() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, unordered ) \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS( semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_, semantics )()
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_DUMMY( name, semantics ) \
+BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS( semantics )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acq_rel( name ) \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, acq_rel ) \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acquire( name ) \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, acquire ) \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acq_rel( name ) \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_release( name ) \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, release ) \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acq_rel( name ) \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_unordered( name ) \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, unordered ) \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_unordered() \
+ , BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acquire( name ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_release( name ) \
+ ) \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE( name, semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_, semantics )( name ) \
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_full() \
+BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( fence, full )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_read() \
+BOOST_PP_BITOR \
+( BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_full() \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( fence, read ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_write() \
+BOOST_PP_BITOR \
+( BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_full() \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( fence, write ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_FENCE( name, semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_, semantics )()
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_NONCOMPILER_FENCE( name, semantics ) \
+BOOST_PP_IF \
+( BOOST_ACT_INTERLOCKED_DETAIL_IS_NAME( name, fence ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_FENCE \
+, BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE \
+) \
+( name, semantics )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_full() \
+BOOST_PP_BITOR \
+( BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_full() \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( compiler_fence, full ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_read() \
+BOOST_PP_BITOR \
+( BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_full() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_read() \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( compiler_fence, read ) \
+)
+#define BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_write() \
+BOOST_PP_BITOR \
+( BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_full \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_FENCE_write() \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( compiler_fence, write ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE( name, semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE_, semantics )()
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_NONLOAD_STORE( name, semantics ) \
+BOOST_PP_IF \
+( BOOST_ACT_INTERLOCKED_DETAIL_IS_NAME( name, compiler_fence ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_COMPILER_FENCE \
+, BOOST_ACT_CONFIG_DETAIL_HAS_NONCOMPILER_FENCE \
+) \
+( name, semantics )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_release() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_RELEASE \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, release ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_unordered() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_UNORDERED \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_STORE_release() \
+ , BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, unordered ) \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE( name, semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_STORE_, semantics )()
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_NONLOAD( name, semantics ) \
+BOOST_PP_IF \
+( BOOST_ACT_INTERLOCKED_DETAIL_IS_NAME( name, store ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_STORE \
+, BOOST_ACT_CONFIG_DETAIL_HAS_NONLOAD_STORE \
+) \
+( name, semantics )
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acquire() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE \
+, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, acquire ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_unordered() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_UNORDERED \
+, BOOST_PP_BITOR \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acquire() \
+ , BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, unordered ) \
+ ) \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD( name, semantics ) \
+BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_, semantics )()
+
+#define BOOST_ACT_CONFIG_INTERLOCKED_HAS( name, semantics ) \
+BOOST_PP_IF \
+( BOOST_ACT_INTERLOCKED_DETAIL_IS_NAME( name, load ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_LOAD \
+, BOOST_ACT_CONFIG_DETAIL_HAS_NONLOAD \
+) \
+( name, semantics )
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_wait_free.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_wait_free.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,12 @@
+/*=============================================================================
+ 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_CONFIG_INTERLOCKED_HAS_WAIT_FREE_HPP
+#define BOOST_ACT_CONFIG_INTERLOCKED_HAS_WAIT_FREE_HPP
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,5 +12,7 @@
 #include <boost/act/interlocked/add_assign/add_assign.hpp>
 #include <boost/act/interlocked/add_assign/add_assign_acquire.hpp>
 #include <boost/act/interlocked/add_assign/add_assign_release.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_acq_rel.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_unordered.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,11 +9,33 @@
 #ifndef BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_HPP
 #define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_HPP
 
-#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+#include <boost/act/config/interlocked/has.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( add_assign, full_fence, additive )
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( add_assign, acq_rel )
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_acq_rel.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ detail::are_valid_additive_params< TargetType, SourceType const >
+, remove_cv< TargetType >
+>
+::type
+add_assign( TargetType& destination, SourceType const& new_value )
+{
+ return interlocked::add_assign_acq_rel( destination, new_value );
+
+}
+
+} } }
+
+#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_ADD_ASSIGN_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_ACQ_REL_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, acq_rel, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acq_rel_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_ADD_ASSIGN_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_ACQ_REL_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, acq_rel, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,11 +9,29 @@
 #ifndef BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_FWD_HPP
 
-#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+#include <boost/act/config/interlocked/has.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( add_assign, full_fence, additive )
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( add_assign, acq_rel )
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ detail::are_valid_additive_params< TargetType, SourceType const >
+, remove_cv< TargetType >
+>
+::type
+add_assign( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_ADD_ASSIGN_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_UNORDERED_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, unordered, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_ADD_ASSIGN_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_UNORDERED_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, unordered, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acq_rel_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acq_rel_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_DETAIL_ADD_ASSIGN_ACQ_REL_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_ACQ_REL_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( add_assign, acq_rel, + )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif

Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,19 +0,0 @@
-/*=============================================================================
- 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_ADD_ASSIGN_DETAIL_ADD_ASSIGN_DEFAULT_HPP
-#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_DEFAULT_HPP
-
-#include <boost/act/interlocked/detail/binary_default.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( add_assign, full_fence, + )
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
-
-#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_DETAIL_ADD_ASSIGN_UNORDERED_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_UNORDERED_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( add_assign, unordered, + )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,6 +12,7 @@
 #include <boost/act/interlocked/add_assign/add_assign_fwd.hpp>
 #include <boost/act/interlocked/add_assign/add_assign_acquire_fwd.hpp>
 #include <boost/act/interlocked/add_assign/add_assign_release_fwd.hpp>
-#include <boost/act/interlocked/add_assign/add_assign_result_fwd.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_acq_rel_fwd.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_unordered_fwd.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -10,6 +10,8 @@
 #define BOOST_ACT_INTERLOCKED_ASSIGN_HPP
 
 #include <boost/act/interlocked/assign/assign.hpp>
+#include <boost/act/interlocked/assign/assign_acquire.hpp>
 #include <boost/act/interlocked/assign/assign_release.hpp>
+#include <boost/act/interlocked/assign/assign_unordered.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,71 +9,33 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acq_rel )
+
 #include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/remove_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
+#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
 
 #include <boost/act/interlocked/detail/cas_support.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-
-#include <boost/act/interlocked/detail/impl_meta.hpp>
-
-#include <boost/act/interlocked/detail/impl.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
-( assign, full_fence )
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
 template< typename TargetType, typename SourceType >
 typename lazy_enable_if
 <
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
-, remove_cv< TargetType >
->
-::type
-assign( TargetType& destination, SourceType const& new_value )
-{
- return detail::impl_meta< detail::assign_impl, TargetType >
- ::execute( destination, new_value );
-}
-
-template< typename TargetType, typename SourceType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
- , detail::is_interlocked_bool< TargetType >
- >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
 , remove_cv< TargetType >
>
 ::type
 assign( TargetType& destination, SourceType const& new_value )
 {
- typedef typename remove_cv< TargetType >::type result_type;
+ return interlocked::assign_acq_rel( destination, new_value );
 
- return result_type
- (
- interlocked::assign
- ( interlocked_bool_internal_value( destination )
- , static_cast< bool >( new_value )
- )
- != 0
- );
 }
 
 } } }
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,87 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQ_REL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign, acq_rel )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acq_rel( TargetType& destination, SourceType const& new_value )
+{
+ return detail::impl_meta< detail::assign_acq_rel_impl, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acq_rel( TargetType& destination, SourceType const& new_value )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_acq_rel
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,57 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQ_REL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acq_rel( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acq_rel( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,87 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQUIRE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acquire )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acquire( TargetType& destination, SourceType const& new_value )
+{
+ return detail::impl_meta< detail::assign_acquire_impl, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acquire( TargetType& destination, SourceType const& new_value )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_acquire
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,57 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQUIRE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acquire )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acquire( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_acquire( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,39 +9,23 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acq_rel )
+
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/act/interlocked/detail/cas_support.hpp>
-#include <boost/act/interlocked/assign/assign_result_fwd.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
 
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
 template< typename TargetType, typename SourceType >
 typename lazy_enable_if
 <
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
-, assign_result< TargetType >
->
-::type
-assign( TargetType& destination, SourceType const& new_value );
-
-template< typename TargetType, typename SourceType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
- , detail::is_interlocked_bool< TargetType >
- >
-, assign_result< TargetType >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+, remove_cv< TargetType >
>
 ::type
 assign( TargetType& destination, SourceType const& new_value );
@@ -49,3 +33,5 @@
 } } }
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_RELEASE_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_RELEASE_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, release )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
@@ -36,7 +40,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
>
 , remove_cv< TargetType >
@@ -54,7 +58,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
   , detail::is_interlocked_bool< TargetType >
>
 , remove_cv< TargetType >
@@ -79,3 +83,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_RELEASE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_RELEASE_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, release )
+
 #include <boost/utility/enable_if.hpp>
 
 #include <boost/act/interlocked/detail/cas_support.hpp>
@@ -25,7 +29,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
>
 , remove_cv< TargetType >
@@ -38,7 +42,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const >
+ detail::are_valid_store_style_params< TargetType, SourceType const >
   , detail::is_interlocked_bool< TargetType >
>
 , remove_cv< TargetType >
@@ -49,3 +53,5 @@
 } } }
 
 #endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,87 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_UNORDERED_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, unordered )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign, unordered )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_unordered( TargetType& destination, SourceType const& new_value )
+{
+ return detail::impl_meta< detail::assign_unordered_impl, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_unordered( TargetType& destination, SourceType const& new_value )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_unordered
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,57 @@
+/*=============================================================================
+ 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_ASSIGN_ASSIGN_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_UNORDERED_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, unordered )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_unordered( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_unordered( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_gcc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,36 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_ACQ_REL_GCC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQ_REL_GCC_X86_HPP
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_acq_rel_impl
+{
+ template< typename Type >
+ static typename remove_cv< Type >::type
+ execute( Type& left, typename remove_cv< Type >::type right )
+ {
+ __asm__ __volatile__
+ (
+ "xchg %0, (%1)":
+ "+r"( right ):
+ "r"( &left ):
+ "memory", "cc"
+ );
+
+ return right;
+ }
+};
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_windows
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,76 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_ACQ_REL_WINDOWS_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQ_REL_WINDOWS_HPP
+
+#include <boost/config.hpp>
+
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <windows.h> // ToDo: Remove (forward declare functions)
+
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_acq_rel_impl
+{
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 4 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ BOOST_INTERLOCKED_EXCHANGE
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ );
+ }
+
+#if WINVER >= 0x0600
+
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 8 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ InterlockedExchange64
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ )
+ );
+ }
+
+#endif
+
+};
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,30 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_ACQUIRE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQUIRE_DEFAULT_HPP
+
+#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_acquire_default_impl
+{
+ template< typename LeftType, typename RightType >
+ static typename remove_cv< LeftType >::type
+ execute( LeftType& left, RightType& right )
+ {
+ return interlocked::assign_acq_rel( left, right );
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_gcc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,38 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_ACQUIRE_GCC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQUIRE_GCC_X86_HPP
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_acquire_impl
+{
+ template< typename Type >
+ static typename remove_cv< Type >::type
+ execute( Type& left, typename remove_cv< Type >::type right )
+ {
+ // Note: SSE2 is assumed otherwise the file wouldn't be included
+ __asm__ __volatile__
+ (
+ "xchg %0, (%1)\n\t"
+ "lfence":
+ "+r"( right ):
+ "r"( &left ):
+ "memory", "cc"
+ );
+
+ return right;
+ }
+};
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_gcc_x86
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_gcc_x86 (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -19,9 +19,12 @@
   static typename remove_cv< Type >::type
   execute( Type& left, typename remove_cv< Type >::type right )
   {
+ // Note: SSE2 is assumed otherwise the file wouldn't be included
     __asm__ __volatile__
     (
- "xchg %0, (%1)":
+ "sfence\n\t"
+ "xchg %0, (%1)\n\t"
+ "lfence":
       "+r"( right ):
       "r"( &left ):
       "memory", "cc"

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_RELEASE_DEFAULT_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_RELEASE_DEFAULT_HPP
 
-#include <boost/act/interlocked/assign/assign.hpp>
+#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
@@ -20,7 +20,7 @@
   static typename remove_cv< LeftType >::type
   execute( LeftType& left, RightType& right )
   {
- return interlocked::assign( left, right );
+ return interlocked::assign_acq_rel( left, right );
   }
 };
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_gcc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,38 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_RELEASE_GCC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_RELEASE_GCC_X86_HPP
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_release_impl
+{
+ template< typename Type >
+ static typename remove_cv< Type >::type
+ execute( Type& left, typename remove_cv< Type >::type right )
+ {
+ // Note: SSE is assumed otherwise the file wouldn't be included
+ __asm__ __volatile__
+ (
+ "sfence\n\t"
+ "xchg %0, (%1)":
+ "+r"( right ):
+ "r"( &left ):
+ "memory", "cc"
+ );
+
+ return right;
+ }
+};
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_windows
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_windows (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_release_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,22 +11,13 @@
 
 #include <boost/config.hpp>
 
-#ifndef BOOST_WINDOWS
-#error Windows interlocked assign release included on non-Windows OS.
-#else
-
 #include <windows.h>
 
-#if WINVER < 0x0600
-#error Windows interlocked assign release included on pre-vista Windows OS.
-#else
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-template< typename ResultType, typename UnqualifiedType >
 struct assign_release_impl
 {
   template< typename LeftType, typename RightType >
@@ -70,28 +61,8 @@
              )
            );
   }
-
- template< typename LeftType, typename RightType >
- static typename remove_cv< LeftType* >::type
- execute( LeftType*& left, RightType right )
- {
- typedef typename remove_cv< LeftType* >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- InterlockedExchangePointer
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- )
- );
- }
 };
 
 } } } }
 
 #endif
-
-#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 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_ASSIGN_DETAIL_ASSIGN_UNORDERED_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, acquire )
+
+#include <boost/act/interlocked/assign/assign_acquire.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign_acquire
+
+#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, release )
+
+#include <boost/act/interlocked/assign/assign_release.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign_release
+
+#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, acq_rel )
+
+#include <boost/act/interlocked/assign/assign.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign
+
+#else
+
+#error If you read this, assign_unordered_default was improperly included.
+
+#endif
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_unordered_default_impl
+{
+ template< typename LeftType, typename RightType >
+ static typename remove_cv< LeftType >::type
+ execute( LeftType& left, RightType& right )
+ {
+ return interlocked::BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL
+ ( left, right );
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_gcc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,36 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_UNORDERED_GCC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_GCC_X86_HPP
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_unordered_impl
+{
+ template< typename Type >
+ static typename remove_cv< Type >::type
+ execute( Type& left, typename remove_cv< Type >::type right )
+ {
+ __asm__ __volatile__
+ (
+ "xchg %0, (%1)":
+ "+r"( right ):
+ "r"( &left ):
+ "memory", "cc"
+ );
+
+ return right;
+ }
+};
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_vc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_vc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,37 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_UNORDERED_VC_x86_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_VC_x86_HPP
+
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_unordered_impl
+{
+ template< typename Type >
+ static execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typename remove_volatile< Type >::type result;
+
+ __asm
+ {
+ mov eax, right;
+ mov ecx, left;
+ xchg eax, ecx;
+ mov result, eax
+ }
+
+ return result;
+ }
+};
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_windows
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,95 @@
+/*=============================================================================
+ 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_ASSIGN_DETAIL_ASSIGN_UNORDERED_WINDOWS_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_WINDOWS_HPP
+
+#include <boost/config.hpp>
+
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <windows.h> // ToDo: Remove (forward declare functions)
+
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_unordered_impl
+{
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 4 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ unqualified_type result;
+
+__asm
+{
+ mov eax, right;
+ mov ecx, left;
+ xchg eax, ecx;
+ mov result, eax
+}
+/*
+0041ECFE mov eax,dword ptr [right]
+0041ED01 mov ecx,dword ptr [left]
+0041ED04 xchg eax,dword ptr [ecx]
+0041ED06 mov dword ptr [result],eax
+*/
+/*
+ unqualified_type result = static_cast< unqualified_type >
+ (
+ BOOST_INTERLOCKED_EXCHANGE
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ );
+
+*/
+ return result;
+ }
+
+#if WINVER >= 0x0600
+
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 8 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ InterlockedExchange64
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ )
+ );
+ }
+
+#endif
+
+};
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,10 +11,6 @@
 
 #include <boost/config.hpp>
 
-#ifndef BOOST_WINDOWS
-#error Windows interlocked assign included on non-windows OS.
-#else
-
 #include <boost/detail/interlocked.hpp>
 
 #include <boost/utility/enable_if.hpp>
@@ -48,25 +44,6 @@
            );
   }
 
- template< typename Type >
- static typename remove_cv< Type* >::type
- execute( Type*& left, typename remove_cv< Type >::type right )
- {
- typedef typename remove_cv< Type* >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- BOOST_INTERLOCKED_EXCHANGE_POINTER
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- )
- );
-
- }
-
 #if WINVER >= 0x0600
 
   template< typename Type >
@@ -97,5 +74,3 @@
 } } } }
 
 #endif
-
-#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -10,6 +10,8 @@
 #define BOOST_ACT_INTERLOCKED_ASSIGN_FWD_HPP
 
 #include <boost/act/interlocked/assign/assign_fwd.hpp>
+#include <boost/act/interlocked/assign/assign_acquire_fwd.hpp>
 #include <boost/act/interlocked/assign/assign_release_fwd.hpp>
+#include <boost/act/interlocked/assign/assign_unordered_fwd.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,5 +12,7 @@
 #include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
 #include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
 #include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,37 +9,24 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, acq_rel )
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
 #include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/remove_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 #include <boost/act/interlocked/detail/cas_support.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-
-#include <boost/act/interlocked/detail/impl_meta.hpp>
-
-#include <boost/act/interlocked/detail/impl.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
-( assign_if_was, full_fence )
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
 template< typename TargetType, typename SourceType, typename ConditionType >
 typename lazy_enable_if
 <
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const
- , ConditionType const
- >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
 , remove_cv< TargetType >
>
 ::type
@@ -47,42 +34,13 @@
              , ConditionType const& expected_value
              )
 {
- return detail::impl_meta< detail::assign_if_was_impl, TargetType >
- ::execute( destination, new_value, expected_value );
-}
-
-template< typename TargetType, typename SourceType, typename ConditionType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const
- , ConditionType const
- >
- , detail::is_interlocked_bool< TargetType >
- >
-, remove_cv< TargetType >
->
-::type
-assign_if_was( TargetType& destination, SourceType const& new_value
- , ConditionType const& expected_value
- )
-{
- typedef typename remove_cv< TargetType >::type result_type;
-
- return result_type
- (
- interlocked::assign_if_was
- ( interlocked_bool_internal_value( destination )
- , static_cast< bool >( new_value )
- , static_cast< bool >( expected_value )
- )
- != 0
- );
+ return interlocked::assign_if_was_acq_rel( destination, new_value
+ , expected_value
+ );
 }
 
 } } }
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,95 @@
+/*=============================================================================
+ 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_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQ_REL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, acq_rel )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_acq_rel( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ return detail::impl_meta< detail::assign_if_was_acq_rel_impl, TargetType >
+ ::execute( destination, new_value, expected_value );
+}
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_acq_rel( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_if_was_acq_rel
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ , static_cast< bool >( expected_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,65 @@
+/*=============================================================================
+ 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_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQ_REL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_acq_rel( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_acq_rel( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+} } }
+
+#endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQUIRE_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQUIRE_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, acquire )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
@@ -36,7 +40,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
@@ -57,7 +61,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , detail::is_interlocked_bool< TargetType >
@@ -87,3 +91,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQUIRE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_ACQUIRE_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, acquire )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
@@ -25,7 +29,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
@@ -42,7 +46,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , detail::is_interlocked_bool< TargetType >
@@ -57,3 +61,5 @@
 } } }
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,44 +9,23 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign, acq_rel )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 #include <boost/act/interlocked/detail/cas_support.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
 
 namespace boost { namespace act { namespace interlocked {
 
 template< typename TargetType, typename SourceType, typename ConditionType >
 typename lazy_enable_if
 <
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const
- , ConditionType const
- >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
-, remove_cv< TargetType >
->
-::type
-assign_if_was( TargetType& destination, SourceType const& new_value
- , ConditionType const& expected_value
- );
-
-template< typename TargetType, typename SourceType, typename ConditionType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType, SourceType const
- , ConditionType const
- >
- , detail::is_interlocked_bool< TargetType >
- >
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
 , remove_cv< TargetType >
>
 ::type
@@ -57,3 +36,5 @@
 } } }
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_RELEASE_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_RELEASE_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, release )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
@@ -36,7 +40,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
@@ -57,7 +61,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , detail::is_interlocked_bool< TargetType >
@@ -87,3 +91,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_RELEASE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_RELEASE_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, release )
+
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
@@ -25,7 +29,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
@@ -42,7 +46,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType, SourceType const
+ detail::are_valid_store_style_params< TargetType, SourceType const
                                          , ConditionType const
>
   , detail::is_interlocked_bool< TargetType >
@@ -57,3 +61,5 @@
 } } }
 
 #endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,95 @@
+/*=============================================================================
+ 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_ASSIGN_IF_WAS_ASSIGN_IF_WAS_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_UNORDERED_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, unordered )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, unordered )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_unordered( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ return detail::impl_meta< detail::assign_if_was_unordered_impl, TargetType >
+ ::execute( destination, new_value, expected_value );
+}
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_unordered( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_if_was_unordered
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ , static_cast< bool >( expected_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,65 @@
+/*=============================================================================
+ 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_ASSIGN_IF_WAS_ASSIGN_IF_WAS_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_UNORDERED_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( assign_if_was, unordered )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_unordered( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+template< typename TargetType, typename SourceType, typename ConditionType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was_unordered( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+} } }
+
+#endif
+
+#endif

Copied: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default (from r7120, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default)
==============================================================================
--- /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -6,8 +6,8 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_DEFAULT_IMPL_HPP
-#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_DEFAULT_IMPL_HPP
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_ACQ_REL_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_ACQ_REL_DEF_IMPL_HPP
 
 #include <boost/mpl/assert.hpp>
 #include <boost/mpl/always.hpp>
@@ -18,7 +18,7 @@
 
 // ToDo: Make better stub impl
 
-struct assign_if_was_default_impl
+struct assign_if_was_acq_rel_default_impl
 {
   template< typename LeftType, typename RightType, typename ConditionType >
   static void execute( LeftType&, RightType&, ConditionType& )

Copied: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_gcc_x86 (from r7124, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86)
==============================================================================
--- /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86 (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -13,7 +13,7 @@
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-struct assign_if_was_impl
+struct assign_if_was_acq_rel_impl
 {
   template< typename Type >
   static typename remove_cv< Type >::type

Copied: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_windows (from r7120, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows)
==============================================================================
--- /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -6,14 +6,8 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_WINDOWS_HPP
-#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_WINDOWS_HPP
-
-#include <boost/config.hpp>
-
-#ifndef BOOST_WINDOWS
-#error Windows interlocked assign if was included on non-windows OS.
-#else
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_ACQ_REL_WIN_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_ACQ_REL_WIN_HPP
 
 #include <boost/detail/interlocked.hpp>
 
@@ -25,63 +19,46 @@
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-struct assign_if_was_impl
+struct assign_if_was_acq_rel_impl
 {
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 4 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 4 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
- return static_cast< unqualified_type >
- (
- BOOST_INTERLOCKED_COMPARE_EXCHANGE
- ( reinterpret_cast< LONG volatile* >( &left )
- , reinterpret_cast< LONG const& >( right )
- , reinterpret_cast< LONG const& >( old )
- )
- );
+ LONG const result = BOOST_INTERLOCKED_COMPARE_EXCHANGE
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ , reinterpret_cast< LONG const& >( old )
+ );
+
+ return reinterpret_cast< unqualified_type const& >( result );
   }
+
+#ifdef _M_IA64
 
- template< typename LeftType, typename RightType, typename OldType >
- static typename remove_cv< LeftType* >::type
- execute( LeftType*& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType* >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- , const_cast< void* >( old )
- )
- );
-
- }
-
-#if WINVER >= 0x0600
-
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 8 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 8 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
     return static_cast< unqualified_type >
            (
@@ -100,5 +77,3 @@
 } } } }
 
 #endif
-
-#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_ACQDEF_IMPL_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_ACQDEF_IMPL_HPP
 
-#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
@@ -18,9 +18,9 @@
 {
   template< typename LeftType, typename RightType, typename OldType >
   static typename boost::remove_cv< LeftType >::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( LeftType& left, RightType& right, OldType& old )
   {
- return interlocked::assign_if_was( left, right, old );
+ return interlocked::assign_if_was_acq_rel( left, right, old );
   }
 };
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -26,20 +26,21 @@
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-template< typename ResultType, typename UnqualifiedType >
 struct assign_if_was_acquire_impl
 {
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 4 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 4 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
     return static_cast< unqualified_type >
            (
@@ -50,17 +51,42 @@
            );
   }
 
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
+ static typename remove_cv< Type* >::type
+ execute( Type*& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
+ {
+ typedef typename remove_cv< Type* >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ InterlockedCompareExchangePointerAcquire
+ ( const_cast< void* volatile* >
+ (
+ reinterpret_cast< void const volatile* volatile* >( &left )
+ )
+ , const_cast< void* >( right )
+ , const_cast< void* >( old )
+ )
+ );
+ }
+
+#ifdef _M_IA64
+
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 8 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 8 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
     return static_cast< unqualified_type >
            (
@@ -72,24 +98,8 @@
            );
   }
 
- template< typename LeftType, typename RightType, typename OldType >
- static typename remove_cv< LeftType* >::type
- execute( LeftType*& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType* >::type unqualified_type;
+#endif
 
- return static_cast< unqualified_type >
- (
- InterlockedCompareExchangePointerAcquire
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- , const_cast< void* >( old )
- )
- );
- }
 };
 
 } } } }

Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,37 +0,0 @@
-/*=============================================================================
- 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_ASSIGN_DETAIL_ASSIGN_IF_WAS_DEFAULT_IMPL_HPP
-#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_DEFAULT_IMPL_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-// ToDo: Make better stub impl
-
-struct assign_if_was_default_impl
-{
- template< typename LeftType, typename RightType, typename ConditionType >
- static void execute( LeftType&, RightType&, ConditionType& )
- {
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , NO_DEFAULT_INTERLOCKED_ASSIGN_IF_WAS_IMPLEMENTATION
- , ()
- );
- }
-};
-
-} } } }
-
-#endif

Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_gcc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,41 +0,0 @@
-/*=============================================================================
- 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_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_GCC_X86_HPP
-#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_GCC_X86_HPP
-
-#include <boost/type_traits/remove_cv.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-struct assign_if_was_impl
-{
- template< typename Type >
- static typename remove_cv< Type >::type
- execute( Type& left
- , typename remove_cv< Type >::type right
- , typename remove_cv< Type >::type old
- )
- {
- // ToDo: Verify semantics
- __asm__ __volatile__
- (
- "lock\n\t"
- "cmpxchgl %1, %2":
- "=a" (old):
- "q" (right), "m" (left), "0" (old):
- "memory", "cc"
- );
-
- return old;
- }
-};
-
-} } } }
-
-#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_RELDEF_IMPL_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_RELDEF_IMPL_HPP
 
-#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
@@ -18,9 +18,9 @@
 {
   template< typename LeftType, typename RightType, typename OldType >
   static typename boost::remove_cv< LeftType >::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( LeftType& left, RightType& right, OldType& old )
   {
- return interlocked::assign_if_was( left, right, old );
+ return interlocked::assign_if_was_acq_rel( left, right, old );
   }
 };
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -26,20 +26,21 @@
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-template< typename ResultType, typename UnqualifiedType >
 struct assign_if_was_release_impl
 {
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 4 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 4 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
     return static_cast< unqualified_type >
            (
@@ -50,17 +51,42 @@
            );
   }
 
- template< typename LeftType, typename RightType, typename OldType >
+ template< typename Type >
+ static typename remove_cv< Type* >::type
+ execute( Type*& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
+ {
+ typedef typename remove_cv< Type* >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ InterlockedCompareExchangePointerRelease
+ ( const_cast< void* volatile* >
+ (
+ reinterpret_cast< void const volatile* volatile* >( &left )
+ )
+ , const_cast< void* >( right )
+ , const_cast< void* >( old )
+ )
+ );
+ }
+
+#ifdef _M_IA64
+
+ template< typename Type >
   static
   typename lazy_enable_if_c
   <
- ( sizeof( LeftType ) == 8 )
- , remove_cv< LeftType >
+ ( sizeof( Type ) == 8 )
+ , remove_cv< Type >
>
   ::type
- execute( LeftType& left, RightType right, OldType old )
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
   {
- typedef typename remove_cv< LeftType >::type unqualified_type;
+ typedef typename remove_cv< Type >::type unqualified_type;
 
     return static_cast< unqualified_type >
            (
@@ -72,24 +98,8 @@
            );
   }
 
- template< typename LeftType, typename RightType, typename OldType >
- static typename remove_cv< LeftType* >::type
- execute( LeftType*& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType* >::type unqualified_type;
+#endif
 
- return static_cast< unqualified_type >
- (
- InterlockedCompareExchangePointerRelease
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- , const_cast< void* >( old )
- )
- );
- }
 };
 
 } } } }

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 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_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_UN_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_UN_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acquire )
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL assign_if_was_acquire
+
+#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, release )
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL assign_if_was_release
+
+#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acq_rel )
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
+
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL assign_if_was_acq_rel
+
+#else
+
+#error assign_if_was_unordered_default was improperly included.
+
+#endif
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_if_was_unordered_default_impl
+{
+ template< typename LeftType, typename RightType, typename OldType >
+ static typename remove_cv< LeftType >::type
+ execute( LeftType& left, RightType& right, OldType& old )
+ {
+ return interlocked::BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL
+ ( left, right, old );
+ }
+};
+
+
+} } } }
+
+#endif

Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_windows 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,104 +0,0 @@
-/*=============================================================================
- 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_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_WINDOWS_HPP
-#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_WINDOWS_HPP
-
-#include <boost/config.hpp>
-
-#ifndef BOOST_WINDOWS
-#error Windows interlocked assign if was included on non-windows OS.
-#else
-
-#include <boost/detail/interlocked.hpp>
-
-#include <boost/utility/enable_if.hpp>
-
-#include <windows.h> // ToDo: Remove (forward declare functions)
-
-#include <boost/type_traits/remove_cv.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-struct assign_if_was_impl
-{
- template< typename LeftType, typename RightType, typename OldType >
- static
- typename lazy_enable_if_c
- <
- ( sizeof( LeftType ) == 4 )
- , remove_cv< LeftType >
- >
- ::type
- execute( LeftType& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- BOOST_INTERLOCKED_COMPARE_EXCHANGE
- ( reinterpret_cast< LONG volatile* >( &left )
- , reinterpret_cast< LONG const& >( right )
- , reinterpret_cast< LONG const& >( old )
- )
- );
- }
-
- template< typename LeftType, typename RightType, typename OldType >
- static typename remove_cv< LeftType* >::type
- execute( LeftType*& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType* >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER
- ( const_cast< void* volatile* >
- (
- reinterpret_cast< void const volatile* volatile* >( &left )
- )
- , const_cast< void* >( right )
- , const_cast< void* >( old )
- )
- );
-
- }
-
-#if WINVER >= 0x0600
-
- template< typename LeftType, typename RightType, typename OldType >
- static
- typename lazy_enable_if_c
- <
- ( sizeof( LeftType ) == 8 )
- , remove_cv< LeftType >
- >
- ::type
- execute( LeftType& left, RightType right, OldType old )
- {
- typedef typename remove_cv< LeftType >::type unqualified_type;
-
- return static_cast< unqualified_type >
- (
- InterlockedCompareExchange64
- ( reinterpret_cast< LONGLONG volatile* >( &left )
- , reinterpret_cast< LONGLONG const& >( right )
- , reinterpret_cast< LONGLONG const& >( old )
- )
- );
- }
-
-#endif
-
-};
-
-} } } }
-
-#endif
-
-#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,5 +12,7 @@
 #include <boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp>
 #include <boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp>
 #include <boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( bitand_assign, full_fence, not_additive )
+( bitand_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( bitand_assign, full_fence, not_additive )
+( bitand_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( bitand_assign, full_fence, & )
+( bitand_assign, acq_rel, & )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( bitor_assign, full_fence, not_additive )
+( bitor_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( bitor_assign, full_fence, not_additive )
+( bitor_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( bitor_assign, full_fence, | )
+( bitor_assign, acq_rel, | )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,7 +11,7 @@
 
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( decrement, full_fence )
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( decrement, acq_rel )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,7 +11,7 @@
 
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( decrement, full_fence )
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( decrement, acq_rel )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -10,7 +10,6 @@
 #ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_IS_READY_FOR_CLEANUP
 //#error Improper incusion of interlocked implementation header. Contact Boost.
 #else
-#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_IS_FULL_FENCE
 #undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_OP
 #undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_FULL_NAME
 #undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_SEMANTICS

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,6 +11,7 @@
 
 #include <boost/act/interlocked/detail/implementation_info/operation_support.hpp>
 
+// ToDo: Change to use appropriate default macro definitions when undefined
 #ifdef BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
 
 #include <climits>
@@ -30,6 +31,7 @@
 #include <boost/preprocessor/seq/seq.hpp>
 #include <boost/preprocessor/seq/fold_left.hpp>
 #include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
 #include <boost/act/interlocked/detail/full_name.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS 5
@@ -45,7 +47,7 @@
                      , 1, BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
                      )
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_CAS_RETURN \
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
   BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
                      , 2, BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
                      )
@@ -54,7 +56,7 @@
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ARITHMETIC_RETURN \
   old_value
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_STORE_INFO \
   BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
                      , 3, BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
                      )
@@ -69,8 +71,10 @@
 #else
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
-( ( assign, ( full_fence ) ) ) \
-( ( assign_if_was, ( full_fence ) ) )
+( ( assign, ( acq_rel ) ) ) \
+( ( assign_if_was, ( acq_rel ) ) ) \
+( ( load, ( acquire ) ) ) \
+( ( store, ( release ) ) )
 
 #endif
 
@@ -80,22 +84,31 @@
 #define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_assign_if_was 3
 #define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_bitand_assign 4
 #define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_bitor_assign 5
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_compl_assign 6
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_decrement 7
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_divide_assign 8
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_increment 9
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_mod_assign 10
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_multiply_assign 11
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_negate_assign 12
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_not_assign 13
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_load 14
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_subtract_assign 15
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_xor_assign 16
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_0 0
-#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_acquire 1
-#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_release 2
-#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_full_fence 3
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_compiler_fence 6
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_compl_assign 7
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_decrement 8
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_divide_assign 9
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_fence 10
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_increment 11
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_lshift_assign 12
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_mod_assign 13
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_modify 14
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_multiply_assign 15
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_negate_assign 16
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_not_assign 17
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_load 18
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_rshift_assign 19
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_store 20
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_subtract_assign 21
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_xor_assign 22
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_0 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_unordered 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_acquire 2
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_read 2
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_release 3
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_write 3
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_acq_rel 4
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_COMPARE( data, elem ) \
 BOOST_PP_EQUAL \
@@ -162,19 +175,56 @@
       , BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_, semantics ) \
       ) \
     , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
- ((0,(acquire)(release)(full_fence))) \
+ ((0,(unordered)(acquire)(release)(acq_rel))) \
     ) \
   ) \
 , 2 \
 )
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_custom_load 0
-#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_load 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_custom_load 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_custom_store 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_load_unordered 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_store_unordered 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_load_acquire 2
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_store_release 2
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_UNORDERED \
+BOOST_PP_EQUAL \
+( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_load_unordered \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE \
+BOOST_PP_EQUAL \
+( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_load_acquire \
+)
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD \
-BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
- , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
- )
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_UNORDERED \
+BOOST_PP_EQUAL \
+( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_store_unordered \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_RELEASE \
+BOOST_PP_EQUAL \
+( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_LOAD_INFO \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_store_release \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IS_NAME( name, desired_name ) \
+BOOST_PP_EQUAL \
+( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_, name ) \
+, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_, desired_name ) \
+)
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
@@ -223,7 +273,7 @@
 template< typename LeftOperand, typename RightOperand = LeftOperand const
         , typename ComparisonType = LeftOperand const
>
-struct are_valid_assign_style_params
+struct are_valid_store_style_params
   : mpl::or_< are_valid_arithmetic_params< LeftOperand, RightOperand
                                          , ComparisonType
>
@@ -267,7 +317,7 @@
 template< typename LeftOperand, typename RightOperand = LeftOperand
         , typename ComparisonType = LeftOperand
>
-struct are_valid_assign_style_params
+struct are_valid_store_style_params
   : mpl::false_
 {
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_unary_impl.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_unary_impl.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_unary_impl.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -16,7 +16,7 @@
 #define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_SEMANTICS \
 BOOST_PP_TUPLE_ELEM( 3, 1, BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO )
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_AFFIX_full_fence() 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_AFFIX_acq_rel() 0
 #define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_AFFIX_acquire() 1
 #define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_AFFIX_release() 2
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_includer/forwarder_includer.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_includer/forwarder_includer.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,11 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/preprocessor/stringize.hpp>
+
+#include BOOST_PP_STRINGIZE( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INNER_NAME )

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -10,26 +10,14 @@
 #define BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME_HPP
 
 #include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/control/if.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_full_fence 0
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_acquire 1
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_release 2
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_raw 3
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_dummy 0
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME( name, semantics ) \
-BOOST_PP_IF( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_ \
- , semantics \
- ) \
- , BOOST_PP_CAT \
- ( \
- name \
- , BOOST_PP_CAT( _ \
- , semantics \
- ) \
- ) \
- , name \
- )
+BOOST_PP_CAT \
+( \
+ name \
+, BOOST_PP_CAT( _ \
+ , semantics \
+ ) \
+)
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1 @@
+#include <boost/act/interlocked/load/detail/impl_includer.hpp>

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1 @@
+#include <boost/act/interlocked/store/detail/impl_includer.hpp>

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/compiler_fence_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/compiler_fence_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/compiler_fence_support.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -17,14 +17,14 @@
 
     // Note: Same name as vista windows on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_COMPILER_FENCE_SUPPORT \
- ( vista, ( full_fence )( load_fence )( store_fence ) )
+ ( vista, ( acq_rel )( load_fence )( store_fence ) )
 
   #endif // End WINVER checks
 
 #elif defined( __GNUC__ ) // if gcc
 
   #define BOOST_ACT_INTERLOCKED_DETAIL_COMPILER_FENCE_SUPPORT \
- ( gcc, ( full_fence ) )
+ ( gcc, ( acq_rel ) )
 
 #endif
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/fence_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/fence_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/fence_support.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -17,7 +17,7 @@
 
     // Note: Same name as vista windows on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- ( vista, ( full_fence )( load_fence )( store_fence ) )
+ ( vista, ( acq_rel )( load_fence )( store_fence ) )
 
   #else
 
@@ -32,7 +32,7 @@
 #elif defined( _OPENMP ) // Else, resort to OpenMP (full fence only, via flush)
 
   #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- ( openmp, ( full_fence ) )
+ ( openmp, ( acq_rel ) )
 
 #endif
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,29 +9,70 @@
 #ifndef BOOST_ACT_INTERLOCKED_DETAIL_IMPLEMENTATION_INFO_OPERATION_SUPPORT_HPP
 #define BOOST_ACT_INTERLOCKED_DETAIL_IMPLEMENTATION_INFO_OPERATION_SUPPORT_HPP
 
-// Note: BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT has the form
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+// This file is used to determine which implementations are to be used when
+// compiling interlocked operations. For instance, if you are planning on adding
+// support for x86-64 with gcc compilers, you would implement branching in this
+// file which detects such systems, provides a unique "name", and specifies
+// exactly which functionality is supported. For this particular example, stubs
+// are currently in-place for x86-64 with gcc detection, so if you would, please
+// provide such an implementation for it so that I don't have to :p
+// Instructions on how this is to be accomplished are detailed in the comments
+// below.
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// Conditional compilation in Boost.Act is based primarily on the macro
+// BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
+//
+// Each target system defines this macro in a way which provides details on
+// exactly which functionality is supported to the internals of the library and
+// which also allows users to query via the preprocessor if a given operation
+// is supported and precicely what its semantics are. Therefore, adding support
+// for a new system implies preprocessor branching in this file which results in
+// an accurate definition of this macro. If no definition of this macro is
+// present, then no support for interlocked operations is assumed. A description
+// of the format you must use for the macro is detailed below, and examples are
+// presented shortly after in comments.
 //
-// ( name, valid_bit_count_for_cas, cas_return, load_info
-// , custom_implementations
-// )
+// BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT has the form
 //
-// Where valid_bit_count_for_cas is a Boost.Preprocessor sequence of object
-// sizes in bits which may be used with the underlying cas operation
+// ( name, valid_bit_counts, load_info, store_info, custom_implementations )
 //
-// Where cas_return is either:
-// old_value, meaning the old value is returned from assign_if_was_impl
+// Where valid_bit_counts is a Boost.Preprocessor sequence of object sizes in
+// bits which may be used with interlocked operations
+//
+// Where load_info is one of:
+// volatile_load_acquire, meaning interlocked::load_acquire is automatically
+// implemented to access the passed object with added volatile qualification
 // -or-
-// success_value, meaning it returns true if the operation was successful
+// custom_load_acquire, meaning interlocked::load_acquire does not have a
+// default implementation and must be provided by the implementor
+// -or-
+// volatile_load_unordered, meaning interlocked::load_unordered is
+// automatically implemented to access the passed object with added volatile
+// qualification
 //
-// Where load_info is either:
-// volatile_load, meaning interlocked::load is automatically
+// Where store_info is either:
+// volatile_store_release, meaning interlocked::store_release is automatically
 // implemented to access the passed object with added volatile qualification
 // -or-
-// custom_load, meaning interlocked::load does not have a default
-// implementation and must be provided by the implementor
+// custom_store_release, meaning interlocked::store_release does not have a
+// default implementation and must be provided by the implementor
+// -or-
+// volatile_store_unordered, meaning interlocked::store_unordered is
+// automatically implemented to access the passed object with added volatile
+// qualification
 //
 // Where custom_implementations is a preprocessor sequence of tuples of the form
-// ( function_name, semantice_sequence )
+// ( function_name, semantic_sequence )
 // Where function_name is the name of a function with a custom implmentation
 //
 // Where semantic_sequence is a sequence whose elements are each one of:
@@ -39,52 +80,298 @@
 // -or-
 // release, meanining there is an one for release semantics
 // -or-
-// full_fence, meanining there is one for full barrier semantics
+// acq_rel, meanining there is one for full barrier semantics
+// -or-
+// unordered, meanining there is no specific ordering required
+//
 //
+// Because of the heavy branching and use of macros that occur in practice, it
+// may be unclear from the actual implementation the exact syntax, so here is a
+// quick example.
+
+/*
+#define BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
+ ( some_64_bit_system,(32)(64) \
+ , volatile_load_acquire \
+ , custom_store_release \
+ , (( load, ( unordered ) )) \
+ (( store, ( release )( unordered ) )) \
+ (( assign, ( acq_rel )( acquire )( release )( unordered ) ))\
+ (( assign_if_was,( acq_rel ) )) \
+ (( add_assign, ( acq_rel ) )) \
+ )
+*/
+
+// In this example, some_64_bit_system is specified as the name for this
+// implementation. When the internals of the library are defining interlocked
+// operations for which a custom implementation has been specified as existing
+// by this macro definition, it looks for the implementation in a file in the
+// corresponding operation's directory's detail subdirectory. The name of the
+// file that it looks for is the name of the operation, including semantics,
+// concatenated with the name specified by the macro (with no extension). In
+// this example, the internals of the library would look for the implementation
+// of load_unordered in
+// <boost/act/interlocked/load/detail/load_unordered_some_64_bit_system>
+//
+// For details on how to provide this implementation, please use one of the
+// non-default-affixed files in assign as an example.
+//
+// The (32)(64) in the example specifies that both 32 and 64-bit types may
+// support interlocked operations; volatile_load_acquire means that an
+// implementation for load_acquire will be generated automatically which just
+// casts a reference to the object to volatile and then accesses the result;
+// custom_store_release means that no default implementation will be generated
+// for store_release (and therefore it must be implemented manually if it is to
+// be supported ); the final parameter specifies for which operations a custom
+// implementation is provided. Note that the operations in the last parameter
+// may appear in any order along with the semantic information in any order.
+//
+// Boost.Act.Interlocked also attempts to automatically define functionality
+// whenever possible based on other operations and fences. If a acq_rel
+// implementation is specified but no other forms are specified, the acquire,
+// release, and unordered forms are automatically generated based on the
+// acq_rel implementation. If an unordered, acquire, or release form is
+// specified, and memory fence instruction support is specified in the the
+// fence_support header, the acq_rel, acquire, and/or release forms of any
+// function will be automatically generated wherever possible. If no store
+// support is specified, yet assign support is specified, then store
+// implementations are generated based on assign implementations wherever
+// possible. Finally, if assign_if_was implementations are available, yet
+// compound assign or increment/decrement operations are not provided, their
+// implementations are automatically generated based on corresponding
+// assign_if_was calls. If you may implement such operations without
+// assign_if_was emulation, you are encouraged to do so as it will likely
+// provide better performance. There are often several choices the
+// implementation may make when providing default implementations, and so it is
+// likely that all of the above default-implementation generation will be able
+// to be toggled in the future.
+
+/*
+ The following are useful macros to use later on after detection.
+*/
+#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_RW_ORDERING_SUPPORT \
+ ( acq_rel )( acquire )( release )( unordered )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_LOAD_ORDERING_SUPPORT \
+ ( acq_rel )( acquire )( unordered )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_STORE_ORDERING_SUPPORT \
+ ( acq_rel )( release )( unordered )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_X86_RW_ORDERING_SUPPORT \
+ ( acq_rel )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_X86_LOAD_ORDERING_SUPPORT \
+ ( acquire )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_X86_STORE_ORDERING_SUPPORT \
+ ( release )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_NO_FENCE_SUPPORT \
+ ( none )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_NO_FENCE_SUPPORT
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT \
+ ( write )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT \
+ ( full )( read )( write )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_FENCE_SUPPORT \
+ ( full )( read )( write )
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/* */
+/* DETECTION CODE BEGINS HERE */
+/* */
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
 
 #include <boost/config.hpp>
 
-#ifdef BOOST_WINDOWS
+// To anyone adding support to this file, I have already layed out some stub
+// branching for systems not yet supported. Please look through the code below
+// to see if stubs for your system are already in place without implementation.
+// Currently, errors are output during compilation when these stubs are reached,
+// however, this is only temporary to bring implementors to the line of code
+// where they should be specifying implementation support.
+
+// Note: For windows, x86 is currently assumed, however, in the future, if
+// projects such as Wine support non-x86 systems, this may have to change, or
+// branches for such libraries must be put in place...
+#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ )
+
+ #if defined(WIN64)||defined(_WIN64)||defined(__WIN64__)||defined(_M_IA64)
+ #define BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_SIZES (32)(64)
+ #else
+ #define BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_SIZES (32)
+ #endif
+
+ #ifdef BOOST_MSVC // Is MSVC
+
+ #if _MSC_VER >= 1400 // Is VC8 or higher
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_LOAD_STYLE volatile_load_acquire
+ #define BOOST_ACT_INTERLOCKED_DETAIL_STORE_STYLE volatile_store_release
+
+ #else
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_LOAD_STYLE volatile_load_unordered
+ #define BOOST_ACT_INTERLOCKED_DETAIL_STORE_STYLE volatile_store_unordered
+
+ #endif
+
+ #ifdef _M_IA64
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_RMW_ORDERING_SUPPORT
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_LOAD_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_LOAD_ORDERING_SUPPORT
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_STORE_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_STORE_ORDERING_SUPPORT
+
+ #elif defined( _M_IX86_FP ) // SSE support detection possible
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_RW_ORDERING_SUPPORT
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_LOAD_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_LOAD_ORDERING_SUPPORT
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_STORE_ORDERING_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_STORE_ORDERING_SUPPORT
+
+ #if _M_IX86_FP >= 2 // SSE2 generation is enabled
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT
+
+ #elif _M_IX86_FP >= 1 // Else, if SSE generation is enabled
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT
+
+ #else // Else, SSE generation not enabled
 
- // ToDo: Only use volatile_load if VC 8.0 or higher
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT
+
+ #endif // End detailed SSE support checks
+
+ #else // Else, SSE generation not enabled
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT
+
+ #endif // End architecture detection
+
+ #else // Else: Not MSVC
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_LOAD_STYLE volatile_load_unordered
+ #define BOOST_ACT_INTERLOCKED_DETAIL_STORE_STYLE volatile_store_unordered
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_NO_FENCE_SUPPORT
+
+ #endif // End Compiler detection
 
   #if WINVER < 0x0600 // Windows prior to vista
 
     // Note: Same name as vista windows on purpose
+ // ToDo: Add assembly implementation when possible even though named
+ // versions are not available (including 64-bit support).
     #define BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
- ( windows,(32),old_value,volatile_load \
- , ( ( assign, ( full_fence ) ) ) \
- ( ( assign_if_was, ( full_fence ) ) ) \
- )
+ ( windows, (32), BOOST_ACT_INTERLOCKED_DETAIL_LOAD_STYLE \
+ , BOOST_ACT_INTERLOCKED_DETAIL_STORE_STYLE \
+ , (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ (( assign_if_was, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ )
 
   #else // Windows Vista and higher
 
     // Note: Same name as pre-vista windows on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
- ( windows,(32)(64),old_value,volatile_load \
- , ( ( assign, ( full_fence )( acquire ) ) ) \
- ( ( assign_if_was, ( full_fence )( acquire )( release ) ) ) \
- )
+ ( windows, BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_SIZES \
+ , BOOST_ACT_INTERLOCKED_DETAIL_LOAD_STYLE \
+ , BOOST_ACT_INTERLOCKED_DETAIL_STORE_STYLE \
+ , (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ (( assign_if_was, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ )
 
   #endif // End WINVER checks
 
-#elif defined( __GNUC__ )
+#elif defined( __GNUC__ ) // GCC
+
+ #if defined( __x86_64__ ) // x86-64
+
+ #error To whoever reads this, please help support x86-64 on gcc!
+
+ #elif defined( __i386__ ) // x86
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT ( acq_rel )
+
+ #ifdef __SSE2__ // SSE2 support
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT
+
+ #elif defined( __SSE__ ) // SSE support
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT
 
- #if defined( __i386__ )
+ #else // Else: Neither SSE nor SSE2 support
+
+ #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
+ BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT
+
+ #endif // End SSE detection
 
- // Note: Same name as x64 on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
- ( gcc_x86,(32),old_value,volatile_load \
- , ( ( assign, ( full_fence ) ) ) \
- ( ( assign_if_was, ( full_fence ) ) ) \
- )
+ ( gcc_x86, (32), volatile_load_acquire, volatile_store_release \
+ , (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ (( assign_if_was, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
+ )
+
+ #elif defined( __powerpc__ ) || defined( __ppc__ )
+
+ #error To whoever reads this, please help support powerpc on gcc!
 
- #elif defined( __x86_64__ )
+ #elif defined( __sparcv8 ) || defined( __sparcv9 )
 
- #error GCC not supported for 64-bit.
+ #error To whoever reads this, please help support sparc on gcc!
+
+ #else
+
+ #error To whoever reads this, please help support gcc for... odd systems!
 
   #endif
 
-#endif // End OS checks
+#elif defined( __MWERKS__ ) // Metrowerks
+
+ #if defined( __POWERPC__ ) // powerpc
+
+ #error To whoever reads this, please help support powerpc on Metrowerks!
+
+ #else
+
+ #error To whoever reads this, please help support non-powerpc on Metrowerks!
+
+ #endif
+
+#else // Unknown system
+
+ #error To whoever reads this, please help support whatever wild and crazy system you are targetting!
+
+#endif // End system checks
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -41,7 +41,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
>
 , remove_cv< TargetType >

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -35,7 +35,7 @@
 <
   mpl::and_
   <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
   , mpl::not_< detail::is_interlocked_bool< TargetType > >
>
 , remove_cv< TargetType >

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_read_vc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_read_vc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_FENCE_DETAIL_FENCE_READ_VC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_READ_VC_X86_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+inline void fence_read_impl() { __asm lfence }
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_vc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_vc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_FENCE_DETAIL_FENCE_VC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_VC_X86_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+inline void fence_impl() { __asm mfence }
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_write_vc_x86
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/fence/detail/fence_write_vc_x86 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_FENCE_DETAIL_FENCE_WRITE_VC_X86_HPP
+#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_WRITE_VC_X86_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+inline void fence_write_impl() { __asm sfence }
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,7 +11,7 @@
 
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( increment, full_fence )
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( increment, acq_rel )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -11,7 +11,7 @@
 
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( increment, full_fence )
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( increment, acq_rel )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,45 +9,8 @@
 #ifndef BOOST_ACT_INTERLOCKED_LOAD_HPP
 #define BOOST_ACT_INTERLOCKED_LOAD_HPP
 
-#include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/remove_volatile.hpp>
-
-#include <boost/act/interlocked/detail/cas_support.hpp>
-
-#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD
-
-#include <boost/act/interlocked/load/detail/load_default.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-template< typename ResultType, typename UnqualifiedType >
-struct load_impl : load_default_impl< ResultType, UnqualifiedType > {};
-
-} } } }
-
-#else
-
-#error Custom load functionality is not yet implemented
-
-#endif
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename TargetType >
-typename lazy_enable_if
-<
- detail::are_valid_assign_style_params< TargetType >
-, remove_volatile< TargetType >
->
-::type
-load( TargetType const& target )
-{
- typedef typename remove_volatile< TargetType >::type unqualified_type;
-
- return detail::load_impl< unqualified_type, unqualified_type >
- ::execute( target );
-}
-
-} } }
+#include <boost/act/interlocked/load/load.hpp>
+#include <boost/act/interlocked/load/load_acquire.hpp>
+#include <boost/act/interlocked/load/load_unordered.hpp>
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_acquire_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_acquire_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,61 @@
+/*=============================================================================
+ 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_LOAD_DETAIL_LOAD_ACQUIRE_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_DETAIL_LOAD_ACQUIRE_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_acquire_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type
+ execute( TargetType volatile& target )
+ {
+ return target;
+ }
+};
+
+} } } }
+
+#else // Else: Custom interlocked load for this system (no default)
+
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_acquire_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type execute( TargetType& target )
+ {
+ BOOST_MPL_ASSERT_MSG
+ (
+ ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
+ , NO_DEFAULT_INTERLOCKED_LOAD_ACQUIRE_IMPLEMENTATION_FOR_THIS_SYSTEM
+ , ()
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,89 +0,0 @@
-/*=============================================================================
- 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_LOAD_DETAIL_LOAD_DEFAULT_IMPL_HPP
-#define BOOST_ACT_INTERLOCKED_LOAD_DETAIL_LOAD_DEFAULT_IMPL_HPP
-
-#include <boost/act/interlocked/detail/cas_support.hpp>
-
-#ifdef BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
-
-#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD // If: volatile impl
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-template< typename ResultType, typename UnqualifiedType >
-struct load_default_impl
-{
- template< typename TargetType >
- static ResultType execute( TargetType volatile& target )
- {
- return target;
- }
-};
-
-} } } }
-
-#else // Else: Custom interlocked load for this system (no default)
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-template< typename ResultType, typename UnqualifiedType >
-struct load_default_impl
-{
- template< typename TargetType >
- static ResultType execute( TargetType& target )
- {
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , NO_DEFAULT_INTERLOCKED_LOAD_IMPLEMENTATION_FOR_THIS_SYSTEM
- , ()
- );
- }
-};
-
-} } } }
-
-#endif
-
-#else // Else: No interlocked operations for this system
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/bool.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-template< typename ResultType, typename UnqualifiedType >
-struct load_default_impl
-{
- template< typename TargetType >
- static ResultType execute( TargetType& target )
- {
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , INTERLOCKED_OPERATIONS_NOT_DEFINED_FOR_THIS_SYSTEM
- , ()
- );
- }
-};
-
-
-} } } }
-
-#endif
-
-#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,53 @@
+/*=============================================================================
+ 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_LOAD_DETAIL_LOAD_UNORDERED_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_DETAIL_LOAD_UNORDERED_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_UNORDERED
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_unordered_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type
+ execute( TargetType volatile& target )
+ {
+ return target;
+ }
+};
+
+} } } }
+
+#else // Else: Custom interlocked load for this system (no default)
+
+#include <boost/act/interlocked/load/load_acquire.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_unordered_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type execute( TargetType& target )
+ {
+ // ToDo: Look ahead for load_acquire_support and produce error here
+ return interlocked::load_acquire( target );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,33 @@
+/*=============================================================================
+ 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_LOAD_LOAD_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+#include <boost/act/interlocked/load/load_acquire.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ detail::are_valid_store_style_params< TargetType >
+, remove_volatile< TargetType >
+>
+::type
+load( TargetType const& target )
+{
+ return interlocked::load_acquire( target );
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,48 @@
+/*=============================================================================
+ 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_LOAD_LOAD_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_ACQUIRE_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE
+
+#include <boost/act/interlocked/load/detail/load_acquire_default>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_acquire_impl : load_acquire_default_impl {};
+
+} } } }
+
+#else
+
+
+#endif
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ detail::are_valid_store_style_params< TargetType >
+, remove_volatile< TargetType >
+>
+::type
+load_acquire( TargetType const& target )
+{
+ return detail::load_acquire_impl::execute( target );
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,28 @@
+/*=============================================================================
+ 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_LOAD_LOAD_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_ACQUIRE_FWD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ detail::are_valid_store_style_params< TargetType >
+, remove_volatile< TargetType >
+>
+::type
+load_acquire( TargetType const& target );
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,28 @@
+/*=============================================================================
+ 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_LOAD_LOAD_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_FWD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ detail::are_valid_store_style_params< TargetType >
+, remove_volatile< TargetType >
+>
+::type
+load( TargetType const& target );
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,86 @@
+/*=============================================================================
+ 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_LOAD_LOAD_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_UNORDERED_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( load, unordered )
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( load, unordered )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+load_unordered( TargetType& destination )
+{
+ return detail::impl_meta< detail::load_unordered_impl, TargetType >
+ ::execute( destination );
+
+}
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+load_unordered( TargetType& destination )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::load_unordered
+ ( interlocked_bool_internal_value( destination )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,28 @@
+/*=============================================================================
+ 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_LOAD_LOAD_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_UNORDERED_FWD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ detail::are_valid_store_style_params< TargetType >
+, remove_volatile< TargetType >
+>
+::type
+load_unordered( TargetType const& target );
+
+} } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,20 +9,8 @@
 #ifndef BOOST_ACT_INTERLOCKED_LOAD_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_LOAD_FWD_HPP
 
-#include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/remove_volatile.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename TargetType >
-typename lazy_enable_if
-<
- detail::are_valid_assign_style_params< TargetType >
-, remove_volatile< TargetType >
->
-::type
-load( TargetType const& target );
-
-} } }
+#include <boost/act/interlocked/load/load_fwd.hpp>
+#include <boost/act/interlocked/load/load_acquire_fwd.hpp>
+#include <boost/act/interlocked/load/load_unordered_fwd.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/detail/lshift_assign_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/detail/lshift_assign_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/detail/lshift_assign_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( lshift_assign, full_fence, << )
+( lshift_assign, acq_rel, << )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( lshift_assign, full_fence, not_additive )
+( lshift_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/lshift_assign/lshift_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( lshift_assign, full_fence, not_additive )
+( lshift_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -19,7 +19,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -19,7 +19,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -18,7 +18,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -18,7 +18,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -19,7 +19,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

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-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -18,7 +18,7 @@
 template< typename TargetType, typename OperationType >
 typename lazy_enable_if
 <
- detail::are_valid_assign_style_params< TargetType >
+ detail::are_valid_store_style_params< TargetType >
 , remove_cv< TargetType >
>
 ::type

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/detail/rshift_assign_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/detail/rshift_assign_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/detail/rshift_assign_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( rshift_assign, full_fence, >> )
+( rshift_assign, acq_rel, >> )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( rshift_assign, full_fence, not_additive )
+( rshift_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/rshift_assign/rshift_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( rshift_assign, full_fence, not_additive )
+( rshift_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_SEMANTICS_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_HPP
+
+#include <boost/act/interlocked/semantics/acquire.hpp>
+#include <boost/act/interlocked/semantics/release.hpp>
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQ_REL_HPP
+
+#include <boost/act/interlocked/semantics/acq_rel_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acq_rel_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQ_REL_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked { struct acq_rel; } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQUIRE_HPP
+
+#include <boost/act/interlocked/semantics/acquire_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/acquire_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQUIRE_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked { struct acquire; } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQ_REL_HPP
+
+#include <boost/act/interlocked/semantics/acq_rel_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/fully_ordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_SEMANTICS_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_ACQ_REL_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked {
+
+struct acq_rel;
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_RELEASE_HPP
+
+#include <boost/act/interlocked/semantics/release_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/release_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_RELEASE_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked { struct release; } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_UNORDERED_HPP
+
+#include <boost/act/interlocked/semantics/unordered_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics/unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,14 @@
+/*=============================================================================
+ 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_SEMANTICS_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_UNORDERED_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked { struct unordered; } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/semantics_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,18 @@
+/*=============================================================================
+ 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_SEMANTICS_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SEMANTICS_FWD_HPP
+
+#include <boost/act/interlocked/semantics/acquire_fwd.hpp>
+#include <boost/act/interlocked/semantics/release_fwd.hpp>
+#include <boost/act/interlocked/semantics/acq_rel_fwd.hpp>
+#include <boost/act/interlocked/semantics/acq_rel_fwd.hpp>
+#include <boost/act/interlocked/semantics/unordered_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,16 @@
+/*=============================================================================
+ 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_STORE_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_HPP
+
+#include <boost/act/interlocked/store/store.hpp>
+#include <boost/act/interlocked/store/store_release.hpp>
+#include <boost/act/interlocked/store/store_unordered.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/impl_includer.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/impl_includer.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_LOCAL_INCLUDE()

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,60 @@
+/*=============================================================================
+ 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_STORE_DETAIL_STORE_RELEASE_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_DETAIL_STORE_RELEASE_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_RELEASE
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_release_default_impl
+{
+ template< typename TargetType >
+ static void execute( TargetType volatile& target
+ , typename remove_cv< TargetType >::type source
+ )
+ {
+ target = source;
+ }
+};
+
+} } } }
+
+#else // Else: Custom interlocked store for this system (no default)
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_release_default_impl
+{
+ template< typename TargetType, typename SourceType >
+ static void execute( TargetType&, SourceType& )
+ {
+ BOOST_MPL_ASSERT_MSG
+ (
+ ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
+ , NO_DEFAULT_INTERLOCKED_STORE_RELEASE_IMPLEMENTATION_FOR_THIS_SYSTEM
+ , ()
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,53 @@
+/*=============================================================================
+ 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_STORE_DETAIL_STORE_UNORDERED_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_DETAIL_STORE_UNORDERED_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_UNORDERED
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_unordered_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type
+ execute( TargetType volatile& target )
+ {
+ return target;
+ }
+};
+
+} } } }
+
+#else // Else: Custom interlocked store for this system (no default)
+
+#include <boost/act/interlocked/store/store_release.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_unordered_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type execute( TargetType& target )
+ {
+ // ToDo: Look ahead for store_release_support and produce error here
+ return interlocked::store_release( target );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,38 @@
+/*=============================================================================
+ 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_STORE_STORE_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, release )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/store/store_release.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+>
+::type
+store( TargetType& destination, SourceType const& new_value )
+{
+ store_release( destination, new_value );
+}
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fully_ordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fully_ordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,77 @@
+/*=============================================================================
+ 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_STORE_STORE_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_ACQ_REL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( store, acq_rel )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_acq_rel( TargetType& destination, SourceType const& new_value )
+{
+ detail::impl_meta< detail::store_acq_rel, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_acq_rel( TargetType& destination, SourceType const& new_value )
+{
+ interlocked::store_acq_rel
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,34 @@
+/*=============================================================================
+ 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_STORE_STORE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, release )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+>
+::type
+store( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,77 @@
+/*=============================================================================
+ 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_STORE_STORE_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_RELEASE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, release )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( store, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_release( TargetType& destination, SourceType const& new_value )
+{
+ detail::impl_meta< detail::store_release_impl, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_release( TargetType& destination, SourceType const& new_value )
+{
+ interlocked::store_release
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 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_STORE_STORE_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_RELEASE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, release )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_release( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_release( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,77 @@
+/*=============================================================================
+ 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_STORE_STORE_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_UNORDERED_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, unordered )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( store, unordered )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_unordered( TargetType& destination, SourceType const& new_value )
+{
+ detail::impl_meta< detail::store_unordered_impl, TargetType >
+ ::execute( destination, new_value );
+
+}
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_unordered( TargetType& destination, SourceType const& new_value )
+{
+ interlocked::store_unordered
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 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_STORE_STORE_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_UNORDERED_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, unordered )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_unordered( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_unordered( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fully_ordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fully_ordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 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_STORE_STORE_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_STORE_ACQ_REL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( store, acq_rel )
+
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+>
+::type
+store_acq_rel( TargetType& destination, SourceType const& new_value );
+
+template< typename TargetType, typename SourceType >
+typename enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+>
+::type
+store_acq_rel( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,16 @@
+/*=============================================================================
+ 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_STORE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_FWD_HPP
+
+#include <boost/act/interlocked/store/store_fwd.hpp>
+#include <boost/act/interlocked/store/store_release_fwd.hpp>
+#include <boost/act/interlocked/store/store_unordered_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acq_rel_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acq_rel_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_SUB_ASSIGN_DETAIL_SUB_ASSIGN_ACQ_REL_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_ACQ_REL_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( subtract_assign, acq_rel, - )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( subtract_assign, full_fence, - )
+( subtract_assign, acq_rel, - )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_unordered_default 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_DETAIL_SUB_ASSIGN_UN_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_DETAIL_SUB_ASSIGN_UN_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( subtract_assign, unordered, - )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,11 +9,33 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_HPP
 
-#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+#include <boost/act/config/interlocked/has.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( subtract_assign, full_fence, additive )
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acq_rel )
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acq_rel.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ detail::are_valid_additive_params< TargetType, SourceType const >
+, remove_cv< TargetType >
+>
+::type
+subtract_assign( TargetType& destination, SourceType const& new_value )
+{
+ return interlocked::subtract_assign_acq_rel( destination, new_value );
+
+}
+
+} } }
+
+#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQ_REL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acq_rel )
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, acq_rel, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acq_rel_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQ_REL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acq_rel )
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, acq_rel, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acquire )
+
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
@@ -17,3 +21,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acquire )
+
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
@@ -17,3 +21,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,11 +9,29 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_FWD_HPP
 
-#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+#include <boost/act/config/interlocked/has.hpp>
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( subtract_assign, full_fence, additive )
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, acq_rel )
 
-#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ detail::are_valid_additive_params< TargetType, SourceType const >
+, remove_cv< TargetType >
+>
+::type
+subtract_assign( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, release )
+
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
@@ -17,3 +21,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 
 #endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -9,6 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_FWD_HPP
 #define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_FWD_HPP
 
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, release )
+
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
@@ -17,3 +21,5 @@
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 
 #endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_UNORDERED_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, unordered )
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, unordered, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_unordered_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_UNORDERED_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_CONFIG_INTERLOCKED_HAS( subtract_assign, unordered )
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, unordered, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_default.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_default.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_default.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_default.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
-( xor_assign, full_fence, ^ )
+( xor_assign, acq_rel, ^ )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( xor_assign, full_fence, not_additive )
+( xor_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_fwd.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -12,7 +12,7 @@
 #include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
-( xor_assign, full_fence, not_additive )
+( xor_assign, acq_rel, not_additive )
 
 #include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
 

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type/interlocked_integer_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type/interlocked_integer_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type/interlocked_integer_type.qbk 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -24,7 +24,7 @@
 
 [table Interlocked Arithmetic Type Requirements
 [[Expression] [Return Type][Pre/Post-Condition] ]
-[[`mod_assign( iv, c1 )`][`mod_assign_result<IV>::type`]
+[[`mod_assign( iv, c1 )`][`remove_cv<IV>::type`]
                                                    [Mods `iv` by `c1` and
                                                     stores the result in `iv`
                                                     with a
@@ -34,7 +34,7 @@
                                                     performed.
                                                    ] ]
 [[`mod_assign_acquire( iv, c1 )`]
- [`mod_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Mods `iv` by `c1` and
                                                     stores the result in `iv`
                                                     with /acquire/ memory
@@ -44,7 +44,7 @@
                                                     performed.
                                                    ] ]
 [[`mod_assign_release( iv, c1 )`]
- [`mod_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Mods `iv` by `c1` and
                                                     stores the result in `iv`
                                                     with /release/ memory
@@ -53,7 +53,7 @@
                                                     before the operation is
                                                     performed.
                                                    ] ]
-[[`and_assign( iv, c1 )`][`and_assign_result<IV>::type`]
+[[`and_assign( iv, c1 )`][`remove_cv<IV>::type`]
                                                    [Ands `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with a
@@ -63,7 +63,7 @@
                                                     performed.
                                                    ] ]
 [[`and_assign_acquire( iv, c1 )`]
- [`and_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Ands `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /acquire/ memory
@@ -73,7 +73,7 @@
                                                     performed.
                                                    ] ]
 [[`and_assign_release( iv, c1 )`]
- [`and_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Ands `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /release/ memory
@@ -82,7 +82,7 @@
                                                     before the operation is
                                                     performed.
                                                    ] ]
-[[`or_assign( iv, c1 )`] [`or_assign_result<IV>::type`]
+[[`or_assign( iv, c1 )`] [`remove_cv<IV>::type`]
                                                    [Ors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with a
@@ -92,7 +92,7 @@
                                                     performed.
                                                    ] ]
 [[`or_assign_acquire( iv, c1 )`]
- [`or_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Ors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /acquire/ memory
@@ -102,7 +102,7 @@
                                                     performed.
                                                    ] ]
 [[`or_assign_release( iv, c1 )`]
- [`or_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Ors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /release/ memory
@@ -111,7 +111,7 @@
                                                     before the operation is
                                                     performed.
                                                    ] ]
-[[`xor_assign( iv, c1 )`][`xor_assign_result<IV>::type`]
+[[`xor_assign( iv, c1 )`][`remove_cv<IV>::type`]
                                                    [Xors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with a
@@ -121,7 +121,7 @@
                                                     performed.
                                                    ] ]
 [[`xor_assign_acquire( iv, c1 )`]
- [`xor_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Xors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /acquire/ memory
@@ -131,7 +131,7 @@
                                                     performed.
                                                    ] ]
 [[`xor_assign_release( iv, c1 )`]
- [`xor_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Xors `iv` with `c1` and
                                                     stores the result in `iv`
                                                     with /release/ memory
@@ -141,7 +141,7 @@
                                                     performed.
                                                    ] ]
 [[`lshift_assign( iv, s )`]
- [`lshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Left shifts `iv` by `s` and
                                                     stores the result in `iv`
                                                     with a
@@ -151,7 +151,7 @@
                                                     performed.
                                                    ] ]
 [[`lshift_assign_acquire( iv, s )`]
- [`lshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Left shifts `iv` by `s` and
                                                     stores the result in `iv`
                                                     with /acquire/ memory
@@ -161,7 +161,7 @@
                                                     performed.
                                                    ] ]
 [[`lshift_assign_release( iv, s )`]
- [`lshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Left shifts `iv` by `s` and
                                                     stores the result in `iv`
                                                     with /release/ memory
@@ -171,7 +171,7 @@
                                                     performed.
                                                    ] ]
 [[`rshift_assign( iv, s )`]
- [`rshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Right shifts `iv` by `s`
                                                     and stores the result in
                                                     `iv` with a
@@ -181,7 +181,7 @@
                                                     performed.
                                                    ] ]
 [[`rshift_assign_acquire( iv, s )`]
- [`rshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Right shifts `iv` by `s`
                                                     and stores the result in
                                                     `iv` with /acquire/ memory
@@ -191,7 +191,7 @@
                                                     performed.
                                                    ] ]
 [[`rshift_assign_release( iv, s )`]
- [`rshift_assign_result<IV>::type`]
+ [`remove_cv<IV>::type`]
                                                    [Right shifts `iv` by `s`
                                                     and stores the result in
                                                     `iv` with /release/ memory

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2 (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -14,22 +14,33 @@
     ;
 
     test-suite act/interlocked
- : [ run interlocked/load.cpp ]
+ : [ run interlocked/load/load.cpp ]
+ [ run interlocked/load/load_acquire.cpp ]
+ [ run interlocked/load/load_unordered.cpp ]
 
           [ run interlocked/assign/assign.cpp ]
+ #[ run interlocked/assign/assign_acquire.cpp ]
           [ run interlocked/assign/assign_release.cpp ]
+ #[ run interlocked/assign/assign_acq_rel.cpp ]
+ #[ run interlocked/assign/assign_unordered.cpp ]
 
           [ run interlocked/assign_if_was/assign_if_was.cpp ]
           [ run interlocked/assign_if_was/assign_if_was_acquire.cpp ]
           [ run interlocked/assign_if_was/assign_if_was_release.cpp ]
+ #[ run interlocked/assign_if_was/assign_if_was_acq_rel.cpp ]
+ #[ run interlocked/assign_if_was/assign_if_was_unordered.cpp ]
 
           [ run interlocked/add_assign/add_assign.cpp ]
           [ run interlocked/add_assign/add_assign_acquire.cpp ]
           [ run interlocked/add_assign/add_assign_release.cpp ]
+ #[ run interlocked/add_assign/add_assign_acq_rel.cpp ]
+ #[ run interlocked/add_assign/add_assign_unordered.cpp ]
 
           [ run interlocked/subtract_assign/subtract_assign.cpp ]
           [ run interlocked/subtract_assign/subtract_assign_acquire.cpp ]
           [ run interlocked/subtract_assign/subtract_assign_release.cpp ]
+ #[ run interlocked/subtract_assign/subtract_assign_acq_rel.cpp ]
+ #[ run interlocked/subtract_assign/subtract_assign_unordered.cpp ]
     ;
     
     test-suite act

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -6,27 +6,39 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#include "../assign_load_helper.hpp"
+#include "../store_load_helper.hpp"
 #include <boost/thread/barrier.hpp>
+#include <boost/act/interlocked/assign/assign.hpp>
+#include <boost/type_traits/remove_cv.hpp>
 #include "assign_helper.hpp"
 
+struct interlocked_assign_set
+{
+ template< typename VariableType, typename SourceType >
+ typename boost::remove_cv< VariableType >::type
+ operator ()( VariableType& var, SourceType new_val ) const
+ {
+ return boost::act::interlocked::assign( var, new_val );
+ }
+};
+
 int test_main( int, char *[] )
 {
- test_assign_load_no_threads( single_thread_basic_get()
- , interlocked_assign_set()
- );
-
- test_assign_load_no_threads( interlocked_load_get()
- , interlocked_assign_set()
- );
+ test_store_load_no_threads( single_thread_basic_get()
+ , interlocked_assign_set()
+ );
+
+ test_store_load_no_threads( interlocked_load_get()
+ , interlocked_assign_set()
+ );
 
   {
     boost::barrier barrier( 2 );
 
- test_assign_load_with_threads( barrier
- , interlocked_load_get()
- , interlocked_assign_set()
- );
+ test_store_load_with_threads( barrier
+ , interlocked_load_get()
+ , interlocked_assign_set()
+ );
   }
 
   brute_assign_test( interlocked_assign_set() );

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_release.cpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_release.cpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_release.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -6,7 +6,7 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#include "../assign_load_helper.hpp"
+#include "../store_load_helper.hpp"
 #include <boost/thread/barrier.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 #include "assign_helper.hpp"
@@ -26,18 +26,18 @@
 int test_main( int, char *[] )
 {
 
- test_assign_load_no_threads( single_thread_basic_get()
+ test_store_load_no_threads( single_thread_basic_get()
                                  , interlocked_assign_release_set()
                                  );
 
- test_assign_load_no_threads( interlocked_load_get()
+ test_store_load_no_threads( interlocked_load_get()
                                  , interlocked_assign_release_set()
                                  );
 
   {
     boost::barrier barrier( 2 );
 
- test_assign_load_with_threads( barrier
+ test_store_load_with_threads( barrier
                                      , interlocked_load_get()
                                      , interlocked_assign_release_set()
                                      );

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_unordered.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_unordered.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,48 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include "../store_load_helper.hpp"
+#include <boost/thread/barrier.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include "assign_helper.hpp"
+
+#include <boost/act/interlocked/assign/assign_unordered.hpp>
+
+struct interlocked_assign_unordered_set
+{
+ template< typename VariableType, typename SourceType >
+ typename boost::remove_cv< VariableType >::type
+ operator ()( VariableType& var, SourceType new_val ) const
+ {
+ return boost::act::interlocked::assign_unordered( var, new_val );
+ }
+};
+
+int test_main( int, char *[] )
+{
+ test_store_load_no_threads( single_thread_basic_get()
+ , interlocked_assign_unordered_set()
+ );
+
+ test_store_load_no_threads( interlocked_load_get()
+ , interlocked_assign_unordered_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_store_load_with_threads( barrier
+ , interlocked_load_get()
+ , interlocked_assign_unordered_set()
+ );
+ }
+
+ brute_assign_test( interlocked_assign_unordered_set() );
+
+ return 0;
+}

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -35,7 +35,7 @@
 // particularly in a multicore environment.
 
 template< typename GetType, typename SetType >
-void test_assign_load_no_threads( GetType get, SetType set )
+void test_store_load_no_threads( GetType get, SetType set )
 {
   using namespace boost::act::interlocked;
 
@@ -76,7 +76,7 @@
   }
 };
 
-struct interlocked_assign_set
+struct interlocked_store_set
 {
   template< typename VariableType, typename SourceType >
   void operator ()( VariableType& var, SourceType new_val ) const
@@ -155,7 +155,7 @@
 }
 
 template< typename GetType, typename SetType >
-void test_assign_load_with_threads( GetType get, SetType set )
+void test_store_load_with_threads( GetType get, SetType set )
 {
   using namespace boost::act::interlocked;
 

Deleted: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
+++ (empty file)
@@ -1,155 +0,0 @@
-/*=============================================================================
- 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_TEST_INTERLOCKED_ASSIGN_LOAD_HELPER_HPP
-#define BOOST_ACT_TEST_INTERLOCKED_ASSIGN_LOAD_HELPER_HPP
-
-#include <boost/test/minimal.hpp>
-#include <boost/act/interlocked/load.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/thread/barrier.hpp>
-#include <boost/act/interlocked/assign.hpp>
-#include <boost/act/interlocked/integer/types.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/foreach.hpp>
-
-#include "random_uint8.hpp"
-
-// Note: Logic of how test are performed:
-//
-// Start with a non-volatile variable.
-//
-// Create a separate thread, in new thread, set value with
-// interlocked::assign and approach barrier (thresh 2).
-//
-// In primary thread, approach barrier, then check value.
-//
-// Repeat similar tests with different threads.
-//
-// Test will potentially have both false positives and false negatives,
-// though improper results should hopefully keep to a minimum,
-// particularly in a multicore environment.
-
-template< typename GetType, typename SetType >
-void test_assign_load_no_threads( GetType get, SetType set )
-{
- ::boost::act::interlocked::uint_least8_t test_var = 0;
-
- BOOST_FOREACH( ::boost::act::interlocked::uint_least8_t val, random_uint8 )
- {
- set( test_var, val );
- BOOST_CHECK( get( test_var ) == val );
- }
-}
-
-struct single_thread_basic_set
-{
- template< typename VariableType, typename SourceType >
- void operator ()( VariableType& var, SourceType new_val ) const
- {
- var = new_val;
- }
-};
-
-struct single_thread_basic_get
-{
- template< typename VariableType >
- typename boost::remove_cv< VariableType >::type
- operator ()( VariableType& var ) const
- {
- return var;
- }
-};
-
-struct interlocked_assign_set
-{
- template< typename VariableType, typename SourceType >
- typename boost::remove_cv< VariableType >::type
- operator ()( VariableType& var, SourceType new_val ) const
- {
- return boost::act::interlocked::assign( var, new_val );
- }
-};
-
-struct interlocked_load_get
-{
- template< typename VariableType >
- typename boost::remove_cv< VariableType >::type
- operator ()( VariableType& var ) const
- {
- return boost::act::interlocked::load( var );
- }
-};
-
-template< typename VariableType, typename SourceType
- , typename BarrierType, typename SetType
- >
-class assign_thread_fun
-{
-public:
- assign_thread_fun( VariableType& var_init, SourceType new_val_init
- , BarrierType& barrier_init, SetType set_init
- )
- : var_m( var_init ), new_val_m( new_val_init )
- , barrier_m( barrier_init ), set_m( set_init ) {}
-public:
- void operator ()() const
- {
- set_m( var_m, new_val_m );
- barrier_m.wait();
- }
-private:
- VariableType& var_m,
- new_val_m;
- BarrierType& barrier_m;
- SetType set_m;
-};
-
-template< typename VariableType, typename SourceType
- , typename BarrierType, typename SetType
- >
-assign_thread_fun< VariableType, SourceType, BarrierType, SetType >
-make_assign_thread_fun( VariableType& var_init, SourceType new_val_init
- , BarrierType& barrier_init, SetType set_init
- )
-{
- return assign_thread_fun< VariableType, SourceType, BarrierType, SetType >
- ( var_init, new_val_init
- , barrier_init, set_init
- );
-}
-
-template< typename VariableType, typename SourceType
- , typename BarrierType, typename GetType, typename SetType
- >
-void assign_in_new_thread( VariableType& var, SourceType new_val
- , BarrierType& barrier, GetType get, SetType set
- )
-{
- boost::thread thread( make_assign_thread_fun( var, new_val, barrier, set ) );
- barrier.wait();
- BOOST_CHECK( get( var ) == new_val );
- thread.join();
-}
-
-template< typename BarrierType, typename GetType, typename SetType >
-void test_assign_load_with_threads( BarrierType& barrier
- , GetType get, SetType set
- )
-{
- typedef boost::act::interlocked::uint_least8_t uint_least8_t;
-
- uint_least8_t test_var = 0;
-
- BOOST_FOREACH( uint_least8_t val, random_uint8 )
- {
- assign_in_new_thread( test_var, val, barrier, get, set );
- }
-}
-
-#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,32 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include "../store_load_helper.hpp"
+#include <boost/thread/barrier.hpp>
+
+int test_main( int, char *[] )
+{
+ test_store_load_no_threads( interlocked_load_get()
+ , single_thread_basic_set()
+ );
+
+ test_store_load_no_threads( interlocked_load_get()
+ , interlocked_store_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_store_load_with_threads( barrier
+ , interlocked_load_get()
+ , interlocked_store_set()
+ );
+ }
+
+ return 0;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_acquire.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_acquire.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,32 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include "../store_load_helper.hpp"
+#include <boost/thread/barrier.hpp>
+
+int test_main( int, char *[] )
+{
+ test_store_load_no_threads( interlocked_load_get()
+ , single_thread_basic_set()
+ );
+
+ test_store_load_no_threads( interlocked_load_get()
+ , interlocked_store_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_store_load_with_threads( barrier
+ , interlocked_load_get()
+ , interlocked_store_set()
+ );
+ }
+
+ return 0;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_unordered.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/load/load_unordered.cpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -0,0 +1,32 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include "../store_load_helper.hpp"
+#include <boost/thread/barrier.hpp>
+
+int test_main( int, char *[] )
+{
+ test_store_load_no_threads( interlocked_load_get()
+ , single_thread_basic_set()
+ );
+
+ test_store_load_no_threads( interlocked_load_get()
+ , interlocked_store_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_store_load_with_threads( barrier
+ , interlocked_load_get()
+ , interlocked_store_set()
+ );
+ }
+
+ return 0;
+}

Copied: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/store_load_helper.hpp (from r7131, /sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp)
==============================================================================
--- /sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_load_helper.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/store_load_helper.hpp 2007-06-27 23:25:41 EDT (Wed, 27 Jun 2007)
@@ -6,14 +6,14 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_TEST_INTERLOCKED_ASSIGN_LOAD_HELPER_HPP
-#define BOOST_ACT_TEST_INTERLOCKED_ASSIGN_LOAD_HELPER_HPP
+#ifndef BOOST_ACT_TEST_INTERLOCKED_STORE_LOAD_HELPER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_STORE_LOAD_HELPER_HPP
 
 #include <boost/test/minimal.hpp>
 #include <boost/act/interlocked/load.hpp>
 #include <boost/thread/thread.hpp>
 #include <boost/thread/barrier.hpp>
-#include <boost/act/interlocked/assign.hpp>
+#include <boost/act/interlocked/store.hpp>
 #include <boost/act/interlocked/integer/types.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 #include <boost/foreach.hpp>
@@ -25,7 +25,7 @@
 // Start with a non-volatile variable.
 //
 // Create a separate thread, in new thread, set value with
-// interlocked::assign and approach barrier (thresh 2).
+// interlocked::store and approach barrier (thresh 2).
 //
 // In primary thread, approach barrier, then check value.
 //
@@ -36,7 +36,7 @@
 // particularly in a multicore environment.
 
 template< typename GetType, typename SetType >
-void test_assign_load_no_threads( GetType get, SetType set )
+void test_store_load_no_threads( GetType get, SetType set )
 {
   ::boost::act::interlocked::uint_least8_t test_var = 0;
 
@@ -66,13 +66,13 @@
   }
 };
 
-struct interlocked_assign_set
+struct interlocked_store_set
 {
   template< typename VariableType, typename SourceType >
- typename boost::remove_cv< VariableType >::type
+ void
   operator ()( VariableType& var, SourceType new_val ) const
   {
- return boost::act::interlocked::assign( var, new_val );
+ boost::act::interlocked::store( var, new_val );
   }
 };
 
@@ -82,17 +82,17 @@
   typename boost::remove_cv< VariableType >::type
   operator ()( VariableType& var ) const
   {
- return boost::act::interlocked::load( var );
+ return boost::act::interlocked::load_unordered( var );
   }
 };
 
 template< typename VariableType, typename SourceType
         , typename BarrierType, typename SetType
>
-class assign_thread_fun
+class store_thread_fun
 {
 public:
- assign_thread_fun( VariableType& var_init, SourceType new_val_init
+ store_thread_fun( VariableType& var_init, SourceType new_val_init
                    , BarrierType& barrier_init, SetType set_init
                    )
     : var_m( var_init ), new_val_m( new_val_init )
@@ -113,12 +113,12 @@
 template< typename VariableType, typename SourceType
         , typename BarrierType, typename SetType
>
-assign_thread_fun< VariableType, SourceType, BarrierType, SetType >
-make_assign_thread_fun( VariableType& var_init, SourceType new_val_init
+store_thread_fun< VariableType, SourceType, BarrierType, SetType >
+make_store_thread_fun( VariableType& var_init, SourceType new_val_init
                       , BarrierType& barrier_init, SetType set_init
                       )
 {
- return assign_thread_fun< VariableType, SourceType, BarrierType, SetType >
+ return store_thread_fun< VariableType, SourceType, BarrierType, SetType >
          ( var_init, new_val_init
          , barrier_init, set_init
          );
@@ -127,18 +127,18 @@
 template< typename VariableType, typename SourceType
         , typename BarrierType, typename GetType, typename SetType
>
-void assign_in_new_thread( VariableType& var, SourceType new_val
+void store_in_new_thread( VariableType& var, SourceType new_val
                          , BarrierType& barrier, GetType get, SetType set
                          )
 {
- boost::thread thread( make_assign_thread_fun( var, new_val, barrier, set ) );
+ boost::thread thread( make_store_thread_fun( var, new_val, barrier, set ) );
   barrier.wait();
   BOOST_CHECK( get( var ) == new_val );
   thread.join();
 }
 
 template< typename BarrierType, typename GetType, typename SetType >
-void test_assign_load_with_threads( BarrierType& barrier
+void test_store_load_with_threads( BarrierType& barrier
                                       , GetType get, SetType set
                                       )
 {
@@ -148,7 +148,7 @@
 
   BOOST_FOREACH( uint_least8_t val, random_uint8 )
   {
- assign_in_new_thread( test_var, val, barrier, get, set );
+ store_in_new_thread( test_var, val, barrier, get, set );
   }
 }
 


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