Boost logo

Boost-Commit :

From: matt_calabrese_at_[hidden]
Date: 2007-06-15 20:00:01


Author: matt_calabrese
Date: 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
New Revision: 7069
URL: http://svn.boost.org/trac/boost/changeset/7069

Log:

Added:
   sandbox/SOC/2006/concurrency/trunk/boost/act/detail/next.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/detail/prior.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp
   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_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acquire_fwd.hpp
   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_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_windows.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/binary_bitwise_operation_checker.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign.hpp
   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_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_acquire_fwd.hpp
   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_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_acquire_default.hpp
   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_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign.hpp
   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_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_acquire_default.hpp
   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_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_impl.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_result_impl.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/custom_impl.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_impl.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_begin_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_end_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_begin_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_end_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_begin_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_end_dont_include.hpp
   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_fwd_dont_include.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_release_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acquire_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_release_default.hpp
   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_acquire.hpp
   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_fwd.hpp
   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_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_acquire_default.hpp
   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_operation.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_release_default.hpp
   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_acquire.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_release.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_result.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign_fwd.hpp
   sandbox/SOC/2006/concurrency/trunk/boost/utility/
   sandbox/SOC/2006/concurrency/trunk/boost/utility/binary.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/doc/Jamfile.v2
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/binary.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_acquire.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_helper.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_release.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_acquire.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_helper.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_acquire.cpp
   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_release.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_retrieve_helper.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/bitand_assign/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/bitand_assign/bitand_assign.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/integral_additive_helper.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/operation_result_checker.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/random_uint8.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/retrieve.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_acquire.cpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_helper.hpp
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_release.cpp
Properties modified:
   sandbox/SOC/2006/concurrency/trunk/libs/act/doc/ (props changed)
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/ (props changed)
Text files modified:
   sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_interlocked_operations.hpp | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/consumer_policy/concurrent_consumer_policy/detail/concurrent_scoped_consumer_impl.hpp | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp | 12 +
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp | 30 ++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp | 12 +
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp | 31 ++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp | 31 ++---
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp | 107 +---------------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire.hpp | 140 +----------------------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release.hpp | 139 +---------------------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result.hpp | 16 +++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result_fwd.hpp | 19 +++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_operation.hpp | 40 ++++++++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp | 192 ++++++++++++++++++++++++++++++++++++++-
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support_data.hpp | 41 +++++++-
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_unary_impl.hpp | 4
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/interlocked_operand_validators.hpp | 41 +++-----
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder.hpp | 157 ++------------------------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd.hpp | 99 ++------------------
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_operation.hpp | 11 +-
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire.hpp | 7 +
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_result.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/selection.hpp | 6
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/types.hpp | 11 ++
   sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp | 2
   sandbox/SOC/2006/concurrency/trunk/boost/act/queue_policy/bounded_queue_policy/safe_single_push_pop_queue.hpp | 8
   sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type.qbk | 4
   sandbox/SOC/2006/concurrency/trunk/libs/act/test/consumer_policy_tester.hpp | 4
   32 files changed, 450 insertions(+), 744 deletions(-)

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_interlocked_operations.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_interlocked_operations.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_interlocked_operations.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,9 +9,9 @@
 #ifndef BOOST_ACT_CONFIG_INTERLOCKED_HAS_INTERLOCKED_HPP
 #define BOOST_ACT_CONFIG_INTERLOCKED_HAS_INTERLOCKED_HPP
 
-#include <boost/config.hpp>
+#include <boost/act/interlocked/detail/cas_support_data.hpp>
 
-#ifdef BOOST_WINDOWS
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA
 #define BOOST_ACT_HAS_INTERLOCKED_OPERATIONS
 #endif
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/consumer_policy/concurrent_consumer_policy/detail/concurrent_scoped_consumer_impl.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/consumer_policy/concurrent_consumer_policy/detail/concurrent_scoped_consumer_impl.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/consumer_policy/concurrent_consumer_policy/detail/concurrent_scoped_consumer_impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -10,7 +10,7 @@
 #define BOOST_ACT_CONSUMER_POLICY_SCOPED_CONCURRENT_CONSUMER_DETAIL_SCOPED_C_HPP
 
 #include <boost/act/interlocked/assign/assign_acquire.hpp>
-#include <boost/act/interlocked/safe_get.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
 
 #include <boost/thread/thread.hpp>
 
@@ -72,7 +72,7 @@
     for(;;)
     {
       bool const is_triggered_to_close
- = interlocked::safe_get( body_m.is_triggered_to_close_m );
+ = interlocked::retrieve( body_m.is_triggered_to_close_m );
 
       size_type queue_size = body_m.queue_m.size();
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/detail/next.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/detail/next.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ 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_DETAIL_NEXT_HPP
+#define BOOST_ACT_DETAIL_NEXT_HPP
+
+namespace boost { namespace act { namespace detail {
+
+template< typename Type >
+Type next( Type source )
+{
+ ++source;
+
+ return source;
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/detail/prior.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/detail/prior.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ 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_DETAIL_PRIOR_HPP
+#define BOOST_ACT_DETAIL_PRIOR_HPP
+
+namespace boost { namespace act { namespace detail {
+
+template< typename Type >
+Type prior( Type source )
+{
+ --source;
+
+ return source;
+}
+
+} } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -13,6 +13,6 @@
 #include <boost/act/interlocked/assign_if_was.hpp>
 #include <boost/act/interlocked/decrement.hpp>
 #include <boost/act/interlocked/increment.hpp>
-#include <boost/act/interlocked/safe_get.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_HPP
+
+#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_result.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, full_barrier, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_ACQUIRE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, acquire, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_acquire_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_ACQUIRE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, acquire, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, full_barrier, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_release.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_release.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_RELEASE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, release, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_release_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_RELEASE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, release, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_ADD_ASSIGN_ADD_ASSIGN_RESULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_RESULT_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO add_assign
+
+#include <boost/act/interlocked/detail/binary_result_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_result_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_RESULT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_RESULT_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType = TargetType >
+struct add_assign_result;
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_ACQUIRE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_ACQUIRE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( add_assign, acquire, + )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( add_assign, full_barrier, + )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_OPERATION_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_OPERATION_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO \
+( add_assign, +, inverse(-) )
+
+#include <boost/act/interlocked/detail/binary_operation.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_RELEASE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_RELEASE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( add_assign, release, + )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_FWD_HPP
+
+#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>
+
+#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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,8 +9,6 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_HPP
 
-#include <boost/act/interlocked/assign/detail/assign_impl.hpp>
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 
@@ -21,8 +19,12 @@
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/not.hpp>
 
-#include <boost/act/interlocked/detail/impl_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.hpp>
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign, full_barrier )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -76,4 +78,6 @@
 
 } } }
 
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,9 +9,6 @@
 #ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQUIRE_HPP
 #define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_ACQUIRE_HPP
 
-#include <boost/act/interlocked/assign/detail/assign_acquire_impl.hpp>
-#include <boost/act/interlocked/assign/detail/assign_acquire_default_impl.hpp>
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 
@@ -23,8 +20,12 @@
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/not.hpp>
 
-#include <boost/act/interlocked/detail/impl_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.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 {
 
@@ -43,20 +44,10 @@
 {
   typedef typename remove_volatile< TargetType >::type type;
   type const source = static_cast< type >( new_value );
- typedef typename assign_result< TargetType >::type result_type;
 
- typedef detail::assign_acquire_impl
- < result_type
- , type
- >
- impl_type;
-
- return mpl::if_< detail::has_nested_type< impl_type >
- , impl_type
- , detail::assign_acquire_default_impl< result_type, type >
- >
- ::type
- ::execute( destination, source );
+ return detail::assign_acquire_impl
+ < typename assign_result< TargetType >::type, type >
+ ::execute( destination, source );
 
 }
 
@@ -74,7 +65,6 @@
 assign_acquire( TargetType& destination, SourceType const& new_value )
 {
   typedef typename assign_result< TargetType >::type result_type;
-
   typedef typename TargetType::internal_type internal_type;
 
   return result_type
@@ -90,4 +80,6 @@
 
 } } }
 
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ 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.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_acquire_default_impl
+{
+ template< typename LeftType, typename RightType >
+ static ResultType execute( LeftType& left, RightType& right )
+ {
+ return interlocked::assign( left, right );
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_windows.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acquire_windows.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,103 @@
+/*=============================================================================
+ 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_VISTA_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQUIRE_VISTA_HPP
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_WINDOWS
+#error Windows interlocked assign acquire included on non-Windows OS.
+#else
+
+#include <windows.h>
+
+#if WINVER < 0x0600
+#error Windows interlocked assign acquire included on pre-vista Windows OS.
+#else
+
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_acquire_impl
+{
+ template< typename LeftType, typename RightType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 4 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedExchangeAcquire
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ )
+ , right
+ );
+ }
+
+ template< typename LeftType, typename RightType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 8 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedExchange64Acquire
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ )
+ )
+ , right
+ );
+ }
+
+ template< typename LeftType, typename RightType >
+ static
+ ResultType
+ execute( LeftType*& left, RightType*& right )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedExchangePointerAcquire
+ ( const_cast< void* volatile* >
+ (
+ reinterpret_cast< void const volatile* volatile* >( &left )
+ )
+ , const_cast< void* >( right )
+ )
+ )
+ , right
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_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 {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_default_impl
+{
+ template< typename LeftType, typename RightType >
+ static ResultType execute( LeftType& left, RightType& right )
+ {
+ BOOST_MPL_ASSERT_MSG
+ (
+ ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
+ , NO_DEFAULT_INTERLOCKED_ASSIGN_IMPLEMENTATION
+ , ()
+ );
+ }
+};
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_windows.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -26,8 +26,6 @@
 template< typename ResultType, typename UnqualifiedType >
 struct assign_impl
 {
- typedef void type;
-
   template< typename LeftType, typename RightType >
   static
   typename enable_if_c

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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,8 +9,6 @@
 #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/interlocked/assign_if_was/detail/assign_if_was_impl.hpp>
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 
@@ -21,8 +19,12 @@
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/not.hpp>
 
-#include <boost/act/interlocked/detail/impl_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.hpp>
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, full_barrier )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -91,4 +93,6 @@
 
 } } }
 
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
 #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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,9 +9,6 @@
 #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/interlocked/assign_if_was/detail/assign_if_was_acquire_impl.hpp>
-#include <boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default_impl.hpp>
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 
@@ -23,8 +20,12 @@
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/not.hpp>
 
-#include <boost/act/interlocked/detail/impl_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.hpp>
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -52,19 +53,11 @@
 
   typedef typename assign_if_was_result< TargetType >::type result_type;
 
- typedef detail::assign_if_was_acquire_impl
- < result_type
- , type
- >
- impl_type;
-
- return mpl::if_< detail::has_nested_type< impl_type >
- , impl_type
- , detail::assign_if_was_acquire_default_impl
- < result_type, type >
- >
- ::type
- ::execute( destination, source, old_value );
+ return detail::assign_if_was_acquire_impl
+ < typename assign_if_was_result< TargetType >::type
+ , type
+ >
+ ::execute( destination, source, old_value );
 }
 
 template< typename TargetType, typename SourceType, typename ConditionType >
@@ -103,4 +96,6 @@
 
 } } }
 
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
 #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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,9 +9,6 @@
 #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/interlocked/assign_if_was/detail/assign_if_was_release_impl.hpp>
-#include <boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default_impl.hpp>
-
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits/remove_volatile.hpp>
 
@@ -23,8 +20,12 @@
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/not.hpp>
 
-#include <boost/act/interlocked/detail/impl_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.hpp>
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
 
 namespace boost { namespace act { namespace interlocked {
 
@@ -52,19 +53,11 @@
 
   typedef typename assign_if_was_result< TargetType >::type result_type;
 
- typedef detail::assign_if_was_release_impl
- < result_type
- , type
- >
- impl_type;
-
- return mpl::if_< detail::has_nested_type< impl_type >
- , impl_type
- , detail::assign_if_was_release_default_impl
- < result_type, type >
- >
- ::type
- ::execute( destination, source, old_value );
+ return detail::assign_if_was_release_impl
+ < typename assign_if_was_result< TargetType >::type
+ , type
+ >
+ ::execute( destination, source, old_value );
 }
 
 template< typename TargetType, typename SourceType, typename ConditionType >
@@ -103,4 +96,6 @@
 
 } } }
 
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ 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_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>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_if_was_acquire_default_impl
+{
+ template< typename LeftType, typename RightType, typename OldType >
+ static ResultType execute( LeftType& left, RightType& right
+ , OldType& old
+ )
+ {
+ return interlocked::assign_if_was( left, right, old );
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acquire_windows.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,110 @@
+/*=============================================================================
+ 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_ACQ_VISTA_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_ACQ_VISTA_HPP
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_WINDOWS
+#error Windows interlocked assign acquire included on non-Windows OS.
+#else
+
+#include <windows.h>
+
+#if WINVER < 0x0600
+#error Windows interlocked assign acquire included on pre-vista Windows OS.
+#else
+
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_if_was_acquire_impl
+{
+ typedef void type;
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 4 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right, OldType& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchangeAcquire
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ )
+ , right
+ , old
+ );
+ }
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 8 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right, OldType& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchange64Acquire
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ , reinterpret_cast< LONGLONG const& >( old )
+ )
+ )
+ , right
+ , old
+ );
+ }
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ ResultType
+ execute( LeftType*& left, RightType*& right, OldType*& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchangePointerAcquire
+ ( const_cast< void* volatile* >
+ (
+ reinterpret_cast< void const volatile* volatile* >( &left )
+ )
+ , const_cast< void* >( right )
+ , const_cast< void* >( old )
+ )
+ )
+ , right
+ , old
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_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 {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_if_was_default_impl
+{
+ template< typename LeftType, typename RightType, typename ConditionType >
+ static ResultType 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

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ 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_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>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_if_was_release_default_impl
+{
+ template< typename LeftType, typename RightType, typename OldType >
+ static ResultType execute( LeftType& left, RightType& right
+ , OldType& old
+ )
+ {
+ return interlocked::assign_if_was( left, right, old );
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_release_windows.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,110 @@
+/*=============================================================================
+ 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_REL_VISTA_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_REL_VISTA_HPP
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_WINDOWS
+#error Windows interlocked assign acquire included on non-Windows OS.
+#else
+
+#include <windows.h>
+
+#if WINVER < 0x0600
+#error Windows interlocked assign acquire included on pre-vista Windows OS.
+#else
+
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct assign_if_was_release_impl
+{
+ typedef void type;
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 4 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right, OldType& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchangeRelease
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ )
+ , right
+ , old
+ );
+ }
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ typename enable_if_c
+ <
+ ( sizeof( LeftType ) == 8 )
+ , ResultType
+ >
+ ::type
+ execute( LeftType& left, RightType& right, OldType& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchange64Release
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ , reinterpret_cast< LONGLONG const& >( old )
+ )
+ )
+ , right
+ , old
+ );
+ }
+
+ template< typename LeftType, typename RightType, typename OldType >
+ static
+ ResultType
+ execute( LeftType*& left, RightType*& right, OldType*& old )
+ {
+ return ResultType
+ (
+ static_cast< UnqualifiedType >
+ (
+ InterlockedCompareExchangePointerRelease
+ ( const_cast< void* volatile* >
+ (
+ reinterpret_cast< void const volatile* volatile* >( &left )
+ )
+ , const_cast< void* >( right )
+ , const_cast< void* >( old )
+ )
+ )
+ , right
+ , old
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/binary_bitwise_operation_checker.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/binary_bitwise_operation_checker.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,81 @@
+/*=============================================================================
+ 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_BINARY_BITWISE_OPERATION_CHECKER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_BINARY_BITWISE_OPERATION_CHECKER_HPP
+
+/*
+Note: The template in this file only checks for proper result functionality.
+ It is not a multithreaded test for checking the application of interlocked
+ operations in a multithreaded environment.
+*/
+
+#include <boost/test/minimal.hpp>
+#include <boost/foreach.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+
+#include "../random_uint8.hpp"
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/utility/binary.hpp>
+
+uint8_fast_t const binary_values[32] =
+{
+ BOOST_BINARY_U( 11010010 ), BOOST_BINARY_U( 00110110 )
+, BOOST_BINARY_U( 11111111 ), BOOST_BINARY_U( 11010011 )
+, BOOST_BINARY_U( 00000000 ), BOOST_BINARY_U( 10110100 )
+, BOOST_BINARY_U( 01011110 ), BOOST_BINARY_U( 01011100 )
+, BOOST_BINARY_U( 10110111 ), BOOST_BINARY_U( 00110111 )
+, BOOST_BINARY_U( 00111010 ), BOOST_BINARY_U( 10110011 )
+, BOOST_BINARY_U( 01101001 ), BOOST_BINARY_U( 01111010 )
+, BOOST_BINARY_U( 11010110 ), BOOST_BINARY_U( 11110010 )
+, BOOST_BINARY_U( 01011101 ), BOOST_BINARY_U( 11011011 )
+, BOOST_BINARY_U( 01011111 ), BOOST_BINARY_U( 00011111 )
+, BOOST_BINARY_U( 11010001 ), BOOST_BINARY_U( 10110100 )
+, BOOST_BINARY_U( 01011100 ), BOOST_BINARY_U( 01011100 )
+, BOOST_BINARY_U( 01101011 ), BOOST_BINARY_U( 01011101 )
+, BOOST_BINARY_U( 11101011 ), BOOST_BINARY_U( 01101111 )
+, BOOST_BINARY_U( 11110001 ), BOOST_BINARY_U( 10110100 )
+, BOOST_BINARY_U( 10100010 ), BOOST_BINARY_U( 01110110 )
+};
+
+#undef BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP
+
+template< typename ValueType, typename ResultType >
+void check_operation_results( ValueType old_value, ValueType expected_value
+ , ResultType result
+ )
+{
+ ValueType const result_old_value = result.old_value(),
+ result_new_value = result.new_value();
+
+ BOOST_CHECK( result_old_value == old_value );
+ BOOST_CHECK( result_new_value == expected_value );
+}
+
+
+template< typename SingleThreadOperationType, typename OperationType >
+void brute_operation_result_checker( SingleThreadOperationType single_thread_op
+ , OperationType operation
+ )
+{
+ typedef boost::act::interlocked::uint_least8_t uint_least8_t;
+
+ uint_least8_t test_var = 0;
+
+ BOOST_FOREACH( uint_least8_t val, random_uint8 )
+ {
+ uint_least8_t const copy = test_var;
+
+ check_operation_results( copy, single_thread_op( copy, val )
+ , operation( test_var, val )
+ );
+ }
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_BITAND_ASSIGN_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_HPP
+
+#include <boost/act/interlocked/bitand_assign/bitand_assign.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_acquire.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_release.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_result.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( bitand_assign, full_barrier, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_ACQUIRE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( bitand_assign, acquire, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_acquire_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_ACQUIRE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( bitand_assign, acquire, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( bitand_assign, full_barrier, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_release.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_release.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_RELEASE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( bitand_assign, release, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_release_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_RELEASE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( bitand_assign, release, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_RESULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_RESULT_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO bitand_assign
+
+#include <boost/act/interlocked/detail/binary_result_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_result_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_BITAND_ASSIGN_BITAND_ASSIGN_RESULT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_RESULT_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType = TargetType >
+struct bitand_assign_result;
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_ACQUIRE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_ACQUIRE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( bitand_assign, acquire, & )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( bitand_assign, full_barrier, & )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_BITANDTRACT_ASSIGN_DETAIL_BITANDTRACT_ASSIGN_OPERATION_HPP
+#define BOOST_ACT_INTERLOCKED_BITANDTRACT_ASSIGN_DETAIL_BITANDTRACT_ASSIGN_OPERATION_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO \
+( bitand_assign, &, no_inverse(BOOST_PP_NIL) )
+
+#include <boost/act/interlocked/detail/binary_operation.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_RELEASE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_RELEASE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( bitand_assign, release, & )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_BITAND_ASSIGN_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_release_fwd.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/bitor_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign/detail/bitor_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitor_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/compl_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign/detail/compl_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compl_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -6,110 +6,13 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DEC_HPP
-#define BOOST_ACT_INTERLOCKED_DECREMENT_DEC_HPP
+#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_HPP
 
-#include <boost/config.hpp>
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#ifndef BOOST_WINDOWS
-#error Interlocked operations not supported
-#else
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( decrement, full_barrier )
 
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-
-#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
-
-#include <boost/act/detail/is_pointer_to_void.hpp>
-
-#include <boost/detail/interlocked.hpp>
-
-#include <boost/utility/enable_if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-#include <windows.h> // ToDo: Remove (forward declare functions)
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , mpl::bool_< ( sizeof( Type ) == 4 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement( Type volatile& destination )
-{
- return BOOST_INTERLOCKED_DECREMENT
- ( &reinterpret_cast< LONG volatile& >( destination ) );
-}
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_pointer< Type >
- , mpl::not_< act::detail::is_pointer_to_void< Type > >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement( Type volatile& destination )
-{
- Type expected_old_value = destination,
- old_value;
-
- do
- {
- old_value = assign_if_was( destination
- , expected_old_value - 1
- , expected_old_value
- )
-
- if( old_value == expected_old_value )
- break;
- else
- expected_old_value = old_value;
- }
- while( true );
-
- return old_value;
-}
-
-#if WINVER >= 0x0600
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , mpl::bool_< ( sizeof( Type ) == 8 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement( Type volatile& destination )
-{
- return InterlockedDecrement64
- ( &reinterpret_cast< LONGLONG volatile& >( destination ) );
-}
-
-#endif
-
-} } }
-
-#endif
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -6,143 +6,13 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DEC_ACQUIRE_HPP
-#define BOOST_ACT_INTERLOCKED_DECREMENT_DEC_ACQUIRE_HPP
+#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_ACQUIRE_HPP
 
-#include <boost/config.hpp>
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#ifdef BOOST_WINDOWS
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( decrement, acquire )
 
-// ToDo: Change to a leaner include file
-#include <windows.h>
-
-// ToDo: Cast on interlocked bool
-
-#if WINVER >= 0x0600
-
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
-
-#include <boost/act/detail/is_pointer_to_void.hpp>
-
-#include <boost/detail/interlocked.hpp>
-
-#include <boost/utility/enable_if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , bool_< ( sizeof( Type ) == 4 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_acquire( Type volatile& destination )
-{
- return static_cast< Type >
- (
- InterlockedDecrementAcquire
- ( &reinterpret_cast< LONG volatile& >( destination ) )
- );
-}
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , bool_< ( sizeof( Type ) == 8 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_acquire( Type volatile& destination )
-{
- return static_cast< Type >
- (
- InterlockedDecrement64Acquire
- ( &reinterpret_cast< LONGLONG volatile& >( destination ) )
- );
-}
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_pointer< Type >
- , mpl::not_< detail::is_pointer_to_void< Type > >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_acquire( Type volatile& destination )
-{
- Type expected_value;
-
- do
- {
- expected_value = destination;
- }
- while( assign_if_was_acqire( destination
- , expected_value - 1
- , expected_value
- )
- != expected_value
- );
-
- return expected_value;
-}
-
-} } }
-
-#else
-
-#include <boost/act/interlocked/decrement/decrement.hpp>
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
-#include <boost/utility/enable_if.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_
- <
- has_interlocked_operations< Type >
- , mpl::not_< is_same< Type, bool > >
- , mpl::not_< detail::is_interlocked_bool< Type > >
- , mpl::not_< detail::is_pointer_to_void< Type > >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_acquire( Type volatile& destination )
-{
- return decrement( destination );
-}
-
-} } }
-
-#endif
-
-#endif
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_acquire_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DECREMENT_DECREMENT_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_ACQUIRE_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( decrement, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DECREMENT_DECREMENT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( decrement, full_barrier )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -6,143 +6,14 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DEC_RELEASE_HPP
-#define BOOST_ACT_INTERLOCKED_DECREMENT_DEC_RELEASE_HPP
+#ifndef BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_RELEASE_HPP
 
-#include <boost/config.hpp>
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
-#ifdef BOOST_WINDOWS
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( decrement, release )
 
-// ToDo: Change to a leaner include file
-#include <windows.h>
-
-// ToDo: Cast on interlocked bool
-
-#if WINVER >= 0x0600
-
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
-#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
-
-#include <boost/act/detail/is_pointer_to_void.hpp>
-
-#include <boost/detail/interlocked.hpp>
-
-#include <boost/utility/enable_if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , bool_< ( sizeof( Type ) == 4 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_release( Type volatile& destination )
-{
- return static_cast< Type >
- (
- InterlockedDecrementRelease
- ( &reinterpret_cast< LONG volatile& >( destination ) )
- );
-}
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_integral< Type >
- , mpl::not_< is_same< Type, bool > >
- , bool_< ( sizeof( Type ) == 8 ) >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_release( Type volatile& destination )
-{
- return static_cast< Type >
- (
- InterlockedDecrement64Release
- ( &reinterpret_cast< LONGLONG volatile& >( destination ) )
- );
-}
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_< has_interlocked_operations< Type >
- , is_pointer< Type >
- , mpl::not_< detail::is_pointer_to_void< Type > >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_release( Type volatile& destination )
-{
- Type expected_value;
-
- do
- {
- expected_value = destination;
- }
- while( assign_if_was_acqire( destination
- , expected_value - 1
- , expected_value
- )
- != expected_value
- );
-
- return expected_value;
-}
-
-} } }
-
-#else
-
-#include <boost/act/interlocked/decrement/decrement.hpp>
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
-#include <boost/utility/enable_if.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename Type >
-typename enable_if
-<
- mpl::and_
- <
- has_interlocked_operations< Type >
- , mpl::not_< is_same< Type, bool > >
- , mpl::not_< detail::is_interlocked_bool< Type > >
- , mpl::not_< act::detail::is_pointer_to_void< Type > >
- , mpl::not_< is_const< Type > >
- >
-, Type
->
-::type
-decrement_release( Type volatile& destination )
-{
- return decrement( destination );
-}
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
 
-} } }
-
-#endif
-
-#endif
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_release_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_DECREMENT_DECREMENT_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_RELEASE_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( decrement, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DECREMENT_DECREMENT_RESULT_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_RESULT_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO decrement
+
+#include <boost/act/interlocked/detail/unary_result_impl.hpp>
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_result_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DECREMENT_DECREMENT_RESULT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DECREMENT_RESULT_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+struct decrement_result;
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_DECREMENT_DETAIL_DECREMENT_ACQUIRE_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DETAIL_DECREMENT_ACQUIRE_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct decrement_acquire_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was_acquire( target
+ , act::detail::prior( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_DECREMENT_DETAIL_DECREMENT_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DETAIL_DECREMENT_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct decrement_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was( target
+ , act::detail::prior( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_operation.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_operation.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ 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_DECREMENT_DETAIL_DECREMENT_OPERATION_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DETAIL_DECREMENT_OPERATION_HPP
+
+#include <boost/act/detail/next.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct decrement_operation
+{
+ struct new_from_old
+ {
+ template< typename ValueType >
+ static ValueType execute( ValueType& value )
+ {
+ return act::detail::prior( value );
+ }
+ };
+
+ struct old_from_new
+ {
+ template< typename ValueType >
+ static ValueType execute( ValueType& value )
+ {
+ return act::detail::next( value );
+ }
+ };
+};
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/detail/decrement_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_DECREMENT_DETAIL_DECREMENT_RELEASE_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_DETAIL_DECREMENT_RELEASE_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct decrement_release_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was_release( target
+ , act::detail::prior( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DECREMENT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DECREMENT_FWD_HPP
+
+#include <boost/act/interlocked/decrement/decrement_fwd.hpp>
+#include <boost/act/interlocked/decrement/decrement_acquire_fwd.hpp>
+#include <boost/act/interlocked/decrement/decrement_release_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_default_impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,145 @@
+/*=============================================================================
+ 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_DETAIL_DEFAULT_IMPL_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME \
+BOOST_PP_TUPLE_ELEM( 3, 0 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+ )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER \
+BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_ \
+ , BOOST_PP_TUPLE_ELEM \
+ ( 3, 1 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+ ) \
+ ) \
+== BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_full_barrier
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp>
+#include <boost/act/interlocked/retrieve_fwd.hpp>
+
+#else
+
+#define BOOST_ACT_INTERLOCKED_CURR_FWD_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME \
+ ) \
+ , BOOST_PP_CAT( / \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME \
+ ) \
+ ) \
+, _fwd.hpp> \
+)
+
+#include BOOST_ACT_INTERLOCKED_CURR_FWD_HEADER()
+
+#undef BOOST_ACT_INTERLOCKED_CURR_FWD_HEADER
+
+#endif
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct BOOST_PP_CAT
+ (
+ BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME
+ ( BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME
+ , BOOST_PP_TUPLE_ELEM( 3, 1
+ , BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+ )
+ )
+ , _default_impl
+ )
+{
+ template< typename TargetType, typename OperandType >
+ static ResultType execute( TargetType& target, OperandType& operand )
+ {
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER
+
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was
+ ( target
+ , curr_value
+ BOOST_PP_TUPLE_ELEM
+ ( 3, 2
+ , BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+ )
+ operand
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return ResultType( new_value, operand );
+
+#else
+
+ return BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME( target, operand );
+
+#endif
+
+ }
+};
+
+} } } }
+
+#if BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+
+#else
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CURR_SEMANTIC_ID_IS_FULL_BARRIER
+
+#define BOOST_ACT_INTERLOCKED_CURR_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME \
+ ) \
+ , BOOST_PP_CAT( / \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CURR_SHORT_NAME \
+ ) \
+ ) \
+, .hpp> \
+)
+
+#include BOOST_ACT_INTERLOCKED_CURR_HEADER()
+
+#undef BOOST_ACT_INTERLOCKED_CURR_HEADER
+
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_READY_FOR_CLEANUP
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_ADDITIVE
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_READY_FOR_CLEANUP
+#endif
+#endif
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_AFFIX_not_additive 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_AFFIX_additive 1
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER() \
+<boost/act/interlocked/detail/binary_forwarder_dont_include.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,99 @@
+/*=============================================================================
+ 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_DETAIL_BINARY_FORWARDER_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/type_traits/remove_volatile.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_ADDITIVE \
+BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_AFFIX_ \
+ , BOOST_PP_TUPLE_ELEM \
+ ( 3, 2 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+ ) \
+ )
+
+#include <boost/act/interlocked/detail/forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO \
+( BOOST_PP_TUPLE_ELEM( 3, 0 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+ ) \
+, BOOST_PP_TUPLE_ELEM( 3, 1 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::
+#if BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_ADDITIVE
+ are_valid_additive_params
+#else
+ are_valid_arithmetic_params
+#endif
+ < TargetType, OperandType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+>
+::type
+BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME( TargetType& target
+ , OperandType const& operand
+ )
+{
+ typedef typename remove_volatile< TargetType >::type type;
+ typedef typename BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+ ::type result_type;
+
+ return detail::BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME
+ , _impl
+ )
+ < result_type
+ , type
+ >
+ ::execute( target, operand );
+}
+
+} } }
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_IS_READY_FOR_CLEANUP
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_END()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_ADDITIVE
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+#endif
+#endif
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_AFFIX_not_additive 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_AFFIX_additive 1
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD() \
+<boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DETAIL_BINARY_FORWARDER_FWD_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+
+#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>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_ADDITIVE \
+BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_AFFIX_ \
+ , BOOST_PP_TUPLE_ELEM \
+ ( 3, 2 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+ ) \
+ )
+
+#include <boost/act/interlocked/detail/forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO \
+( BOOST_PP_TUPLE_ELEM( 3, 0 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+ ) \
+, BOOST_PP_TUPLE_ELEM( 3, 1 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::
+#if BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_ADDITIVE
+ are_valid_additive_params
+#else
+ are_valid_arithmetic_params
+#endif
+ < TargetType, OperandType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+>
+::type
+BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_FULL_NAME( TargetType& target
+ , OperandType const& operand
+ );
+
+} } }
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_END()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,102 @@
+/*=============================================================================
+ 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_DETAIL_BINARY_OPERATION_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_AFFIX_inverse(dummy) 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_AFFIX_no_inverse(dummy) 0
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_OPERATOR_inverse( op ) op
+
+#endif
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_NAME \
+BOOST_PP_TUPLE_ELEM( 3, 0, BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP \
+BOOST_PP_TUPLE_ELEM( 3, 1, BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_HAS_INVERSE \
+BOOST_PP_CAT \
+( BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_AFFIX_ \
+, BOOST_PP_TUPLE_ELEM( 3, 2 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO \
+ ) \
+)
+
+#if !BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_HAS_INVERSE
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+
+#endif
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_NAME
+ , _operation
+ )
+{
+ struct new_from_old
+ {
+ template< typename ValueType, typename OperandType >
+ static ValueType execute( ValueType& value, OperandType& operand )
+ {
+ return value BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP operand;
+ }
+ };
+
+ struct old_from_new
+ {
+ template< typename ValueType, typename OperandType >
+ static ValueType execute( ValueType& value, OperandType& operand )
+ {
+ #if BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_HAS_INVERSE
+ return value BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_OPERATOR_
+ , BOOST_PP_TUPLE_ELEM
+ ( 3, 2
+ , BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO
+ )
+ )
+ operand;
+ #else
+ BOOST_MPL_ASSERT_MSG( ( mpl::apply< mpl::always< mpl::true_ >
+ , ValueType
+ >
+ ::type::value
+ )
+ , NO_INVERSE_FOR_OPERATION
+ , ()
+ );
+
+ return ValueType();
+ #endif
+ }
+ };
+};
+
+} } } }
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_HAS_INVERSE
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OP_NAME
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_result_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_result_impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,80 @@
+/*=============================================================================
+ 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_DETAIL_RESULT_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA
+
+#include <boost/act/interlocked/detail/interlocked_result.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO \
+ ) \
+, BOOST_PP_CAT( /detail/ \
+ , BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO \
+ , _operation.hpp> \
+ ) \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER()
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FWD_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO \
+ ) \
+, BOOST_PP_CAT( / \
+ , BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO \
+ , _result_fwd.hpp> \
+ ) \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FWD_HEADER()
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FWD_HEADER
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType >
+struct BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO, _result )
+{
+ typedef detail::binary_interlocked_result
+ < detail::BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO
+ , _operation
+ )
+ , detail::BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ARITHMETIC_RETURN
+ , typename remove_volatile< TargetType >::type
+ , OperandType
+ >
+ type;
+};
+
+} } }
+
+#else
+
+#include <boost/act/interlocked/detail/unsupported_result.hpp>
+
+#endif
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO
+
+#endif

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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -19,15 +19,174 @@
 #include <boost/preprocessor/seq/for_each.hpp>
 #include <boost/mpl/or.hpp>
 #include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/seq/filter.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/comparison/not_equal.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS 5
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NAME \
+ BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
+ , 0, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
+ )
+
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ \
- BOOST_PP_TUPLE_ELEM( 3, 0, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA )
+ BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
+ , 1, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
+ )
 
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_CAS_RETURN \
- BOOST_PP_TUPLE_ELEM( 3, 1, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA )
+ BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
+ , 2, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
+ )
 
+// ToDo: Remove this eventually
 #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ARITHMETIC_RETURN \
- BOOST_PP_TUPLE_ELEM( 3, 2, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA )
+ old_value
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_RETRIEVE_INFO \
+ BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
+ , 3, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
+ )
+
+#ifndef BOOST_ACT_INTERLOCKED_FORCE_DEFAULTS
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
+ BOOST_PP_TUPLE_ELEM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NUM_PARAMS \
+ , 4, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
+ )
+
+#else
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
+( ( assign, ( full_barrier ) ) ) \
+( ( assign_if_was, ( full_barrier ) ) )
+
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_0 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_add_assign 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_assign 2
+#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_retrieve 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_barrier 3
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_COMPARE( data, elem ) \
+BOOST_PP_EQUAL \
+( \
+ BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_, elem ) \
+, data \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_APPEND_IF_SAME( s, state, value ) \
+BOOST_PP_IF \
+( \
+ BOOST_ACT_INTERLOCKED_DETAIL_COMPARE( BOOST_PP_SEQ_ELEM( 0, state ), value ) \
+, state (value) \
+, state \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEQ_CONTAINS( s, seq, value ) \
+BOOST_PP_NOT_EQUAL \
+( \
+ BOOST_PP_SEQ_SIZE \
+ ( \
+ BOOST_PP_CAT( BOOST_PP_SEQ_FOLD_LEFT_, s ) \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_APPEND_IF_SAME \
+ , (value) \
+ , seq \
+ ) \
+ ) \
+, 1 \
+)
+
+// ToDo: Change to lazily evaluate 2nd and argument
+#define BOOST_ACT_INTERLOCKED_DETAIL_IS_SAME_IMPL_OR_TERM( s, data, elem ) \
+BOOST_PP_BITAND \
+( \
+ BOOST_PP_BITOR \
+ ( \
+ BOOST_PP_EQUAL \
+ ( \
+ BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_ \
+ , BOOST_PP_TUPLE_ELEM( 2, 0, elem ) \
+ ) \
+ , BOOST_PP_TUPLE_ELEM( 2, 0, data ) \
+ ) \
+ , BOOST_PP_EQUAL \
+ ( \
+ BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_ \
+ , BOOST_PP_TUPLE_ELEM( 2, 0, elem ) \
+ ) \
+ , 0 \
+ ) \
+ ) \
+, BOOST_ACT_INTERLOCKED_DETAIL_SEQ_CONTAINS \
+ ( s, BOOST_PP_TUPLE_ELEM( 2, 1, elem ) \
+ , BOOST_PP_TUPLE_ELEM( 2, 1, data ) \
+ ) \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, semantics ) \
+BOOST_PP_EQUAL \
+( BOOST_PP_SEQ_SIZE \
+ ( BOOST_PP_SEQ_FILTER \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_IS_SAME_IMPL_OR_TERM \
+ , ( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_, name ) \
+ , BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_, semantics ) \
+ ) \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
+ ((0,(acquire)(release)(full_barrier))) \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_custom_retrieve 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_volatile_retrieve 1
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_RETRIEVE \
+BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_RETRIEVE_INFO \
+ )
+/*
+#define BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER() \
+BOOST_PP_IF \
+( \
+ BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL \
+ ( BOOST_PP_TUPLE_ELEM( 2, 0, BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO ) \
+ , BOOST_PP_TUPLE_ELEM( 2, 1, BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO ) \
+ ) \
+, <boost/act/interlocked/detail/custom_impl.hpp> \
+, <boost/act/interlocked/detail/default_impl.hpp> \
+)
+*/
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
@@ -35,7 +194,12 @@
 are_valid_arithmeticn_params< ( elem / CHAR_BIT ) \
                             , LeftOperand, RightOperand, ComparisonType \
>,
+#define BOOST_ACT_INTERLOCKED_DETAIL_ADDITIVE_PARAMS_BASE_MACRO(r,data,elem) \
+are_valid_additiven_params< ( elem / CHAR_BIT ) \
+ , LeftOperand, RightOperand \
+ >,
 
+// ToDo: remove_volatile for RightOperand and ComparisonType
 template< typename LeftOperand, typename RightOperand = LeftOperand const
         , typename ComparisonType = LeftOperand const
>
@@ -52,6 +216,22 @@
 {
 };
 
+// ToDo: remove_volatile for RightOperand
+template< typename LeftOperand, typename RightOperand = LeftOperand const >
+struct are_valid_additive_params
+ : mpl::or_
+ <
+ BOOST_PP_SEQ_FOR_EACH
+ ( BOOST_ACT_INTERLOCKED_DETAIL_ADDITIVE_PARAMS_BASE_MACRO
+ , ~
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ
+ )
+ mpl::true_
+ >
+{
+};
+
+// ToDo: remove_volatile for RightOperand and ComparisonType
 template< typename LeftOperand, typename RightOperand = LeftOperand const
         , typename ComparisonType = LeftOperand const
>
@@ -67,7 +247,7 @@
>
> {};
 
-
+#undef BOOST_ACT_INTERLOCKED_DETAIL_ADDITIVE_PARAMS_BASE_MACRO
 #undef BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO
 
 } } } }
@@ -82,7 +262,7 @@
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
-template< typename LeftOperand, typename RightOperand
+template< typename LeftOperand, typename RightOperand = LeftOperand
         , typename ComparisonType = LeftOperand
>
 struct are_valid_arithmetic_params
@@ -96,7 +276,7 @@
   );
 };
 
-template< typename LeftOperand, typename RightOperand
+template< typename LeftOperand, typename RightOperand = LeftOperand
         , typename ComparisonType = LeftOperand
>
 struct are_valid_assign_style_params

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support_data.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support_data.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support_data.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -11,17 +11,36 @@
 
 // Note: BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT has the form
 //
-// ( pp_seq_of_valid_bit_amounts_for_cas, cas_return, arithmetic_return )
+// ( name, valid_bit_count_for_cas, cas_return, retrieve_info
+// , custom_implementations
+// )
+//
+// 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
 //
 // Where cas_return is either:
 // old_value, meaning the old value is returned from assign_if_was_impl
 // -or-
 // success_value, meaning it returns true if the operation was successful
 //
-// Where arithmetic_return is either:
-// old_value, meaning the old value is returned from arithmetic impls
+// Where retrieve_info is either:
+// volatile_retrieve, meaning interlocked::retrieve is automatically
+// implemented to access the passed object with added volatile qualification
+// -or-
+// custom_retrieve, meaning interlocked::retrieve does not have a default
+// implementation and must be provided by the implementor
+//
+// Where custom_implementations is a preprocessor sequence of tuples of the form
+// ( function_name, semantice_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:
+// acquire, meanining there is an implementation for acquire semantics
 // -or-
-// new_value, meaning the new value is returned from arithmetic impls
+// release, meanining there is an one for release semantics
+// -or-
+// full_barrier, meanining there is one for full barrier semantics
+//
 
 #include <boost/config.hpp>
 
@@ -29,15 +48,25 @@
 
   #include <windows.h>
 
+ // ToDo: Only use volatile_retrieve if VC 8.0 or higher
+
   #if WINVER < 0x0600 // Windows prior to vista
 
+ // Note: Same name as vista windows on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
- ( (32),old_value,new_value )
+ ( windows,(32),old_value,volatile_retrieve \
+ , ( ( assign, ( full_barrier ) ) ) \
+ ( ( assign_if_was, ( full_barrier ) ) ) \
+ )
 
   #else // Windows Vista and higher
 
+ // Note: Same name as pre-vista windows on purpose
     #define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_DATA \
- ( (32)(64),old_value,new_value )
+ ( windows,(32)(64),old_value,volatile_retrieve \
+ , ( ( assign, ( full_barrier )( acquire ) ) ) \
+ ( ( assign_if_was, ( full_barrier )( acquire )( release ) ) ) \
+ )
 
   #endif // End WINVER checks
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/custom_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/custom_impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,66 @@
+/*=============================================================================
+ 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_DETAIL_CUSTOM_IMPL_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( <boost/act/interlocked/ \
+ , BOOST_PP_TUPLE_ELEM( 2, 0 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO \
+ ) \
+ ) \
+ , /detail/ \
+ ) \
+, BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
+ ( BOOST_PP_TUPLE_ELEM( 2, 0 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO \
+ ) \
+ , BOOST_PP_TUPLE_ELEM( 2, 1 \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO \
+ ) \
+ ) \
+ , _ \
+ ) \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NAME \
+ ) \
+ , .hpp> \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW()
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_HEADER_RAW
+#endif
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO
+#endif
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/default_impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ 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_DETAIL_CUSTOM_IMPL_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_HEADER_RAW
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_HEADER_RAW
+#endif
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_HEADER_RAW()
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_HEADER_RAW
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_HEADER_RAW
+#endif
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_CUSTOM_IMPL_INFO
+#endif
+
+#endif

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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -36,7 +36,7 @@
 
 // ToDo: Fix to account for acquire/release
 #include <boost/act/interlocked/assign_if_was/assign.hpp>
-#include <boost/act/interlocked/safe_get.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
@@ -46,7 +46,7 @@
   template< typename TargetType >
   static ResultType execute( TargetType& target )
   {
- for( UnqualifiedType curr_value = safe_get( target ),
+ for( UnqualifiedType curr_value = retrieve( target ),
                          new_value = curr_value
        ; curr_value = assign_if_was( target, ++new_value, curr_value )
        ; new_value = curr_value

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_IS_READY_FOR_CLEANUP
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_RESULT_HEADER
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_HEADER_OPENER
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SEMANTICS
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_IS_READY_FOR_CLEANUP
+#endif
+#endif
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_BEGIN() \
+<boost/act/interlocked/detail/forwarder_begin_dont_include.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_END() \
+<boost/act/interlocked/detail/forwarder_end_dont_include.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_begin_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_begin_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+/*
+
+Note: If you are getting an error in this file, please post to the mailing list
+
+*/
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME \
+BOOST_PP_TUPLE_ELEM( 2, 0, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SEMANTICS \
+BOOST_PP_TUPLE_ELEM( 2, 1, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME \
+BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
+( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME \
+, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SEMANTICS \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_HEADER_OPENER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME \
+ ) \
+, / \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_RESULT_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_HEADER_OPENER() \
+, BOOST_PP_CAT \
+ ( \
+ BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME \
+ , _result.hpp> \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_OP_RESULT_HEADER()
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_end_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_end_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_DETAIL_FORWARDER_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_IS_READY_FOR_CLEANUP
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_RESULT_HEADER
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_HEADER_OPENER
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SEMANTICS
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_FULL_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+#endif
+#endif
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_BEGIN() \
+<boost/act/interlocked/detail/forwarder_fwd_begin_dont_include.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_END() \
+<boost/act/interlocked/detail/forwarder_fwd_end_dont_include.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_begin_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_begin_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,51 @@
+/*=============================================================================
+ 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_DETAIL_FORWARDER_FWD_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME \
+BOOST_PP_TUPLE_ELEM( 2, 0, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SEMANTICS \
+BOOST_PP_TUPLE_ELEM( 2, 1, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_FULL_NAME \
+BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
+( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME \
+, BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SEMANTICS \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_HEADER_OPENER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME \
+ ) \
+, / \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_RESULT_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_HEADER_OPENER() \
+, BOOST_PP_CAT \
+ ( \
+ BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME \
+ , _result_fwd.hpp> \
+ ) \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_OP_RESULT_HEADER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_end_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/forwarder_fwd_end_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,15 @@
+/*=============================================================================
+ 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_DETAIL_FORWARDER_FWD_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/full_name.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_DETAIL_FULL_NAME_HPP
+#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_barrier 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_acquire 1
+#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_release 2
+#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 \
+ )
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+// ToDo: Do fancy dance to undef old macros
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_IS_READY_FOR_CLEANUP
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HEADER_RAW
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SEMANTICS
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_IS_READY_FOR_CLEANUP
+#endif
+#endif
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN() \
+<boost/act/interlocked/detail/impl_begin_dont_include.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END() \
+<boost/act/interlocked/detail/impl_end_dont_include.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_begin_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_begin_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,42 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+/*
+
+Note: If you are getting an error in this file, please post to the mailing list
+
+*/
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/tuple/elem.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME \
+BOOST_PP_TUPLE_ELEM( 2, 0, BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SEMANTICS \
+BOOST_PP_TUPLE_ELEM( 2, 1, BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO )
+
+#include <boost/act/interlocked/detail/full_name.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME \
+BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
+( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME \
+, BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SEMANTICS \
+)
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME, _impl );
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_end_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_end_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,106 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+/*
+
+Note: If you are getting an error in this file, please post to the mailing list
+
+*/
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_IS_READY_FOR_CLEANUP
+
+// ToDo: Make this 80 characters max (push to macro invocation)
+#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME, BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SEMANTICS )
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HEADER_RAW() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME \
+ ) \
+ , /detail/ \
+ ) \
+, BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME \
+ , _ \
+ ) \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NAME \
+ ) \
+ , .hpp> \
+ ) \
+)
+
+#else
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME
+ , _default_impl
+ );
+
+template< typename ResultType, typename UnqualifiedType >
+struct BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME
+ , _impl
+ )
+ : BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME
+ , _default_impl
+ )
+ < ResultType, UnqualifiedType > {};
+
+} } } }
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HEADER_RAW() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( <boost/act/interlocked/ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME \
+ ) \
+ , /detail/ \
+ ) \
+, BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_ACT_INTERLOCKED_DETAIL_IMPL_FULL_NAME \
+ , _ \
+ ) \
+ , default \
+ ) \
+ , .hpp> \
+ ) \
+)
+
+#endif
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_HEADER_RAW()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/interlocked_operand_validators.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/interlocked_operand_validators.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/interlocked_operand_validators.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -36,6 +36,7 @@
 #include <boost/type_traits/is_integral.hpp>
 
 #include <boost/act/detail/is_nonfunction_pointer.hpp>
+#include <cstddef>
 
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
@@ -55,33 +56,21 @@
     , is_convertible< ComparisonType const, TargetType >
> {};
 
-template< typename TargetType, typename SourceType
- , typename ComparisonType = TargetType
- >
-struct are_valid_arithmetic8_params
- : are_valid_arithmeticn_params< 1, TargetType, SourceType, ComparisonType >
- {};
-
-template< typename TargetType, typename SourceType
- , typename ComparisonType = TargetType
- >
-struct are_valid_arithmetic16_params
- : are_valid_arithmeticn_params< 2, TargetType, SourceType, ComparisonType >
- {};
-
-template< typename TargetType, typename SourceType
- , typename ComparisonType = TargetType
- >
-struct are_valid_arithmetic32_params
- : are_valid_arithmeticn_params< 4, TargetType, SourceType, ComparisonType >
- {};
-
-template< typename TargetType, typename SourceType
- , typename ComparisonType = TargetType
+template< unsigned NumBytes
+ , typename TargetType, typename SourceType
>
-struct are_valid_arithmetic64_params
- : are_valid_arithmeticn_params< 8, TargetType, SourceType, ComparisonType >
- {};
+struct are_valid_additiven_params
+ : mpl::or_
+ <
+ are_valid_arithmeticn_params< NumBytes, TargetType, SourceType >
+ , mpl::and_
+ <
+ act::detail::is_nonfunction_pointer< TargetType >
+ , mpl::bool_< ( sizeof( TargetType ) == NumBytes ) >
+ , mpl::not_< is_const< TargetType > >
+ , is_convertible< SourceType const, std::ptrdiff_t >
+ >
+ > {};
 
 template< typename TargetType, typename SourceType
         , typename ComparisonType = TargetType

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -6,156 +6,19 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_IS_READY_FOR_CLEANUP
 #error Improper incusion of interlocked implementation header. Contact Boost.
 #else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_IS_READY_FOR_CLEANUP
+#endif
+#endif
 
-#include <boost/preprocessor/tuple/elem.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/control/if.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME \
-BOOST_PP_TUPLE_ELEM( 2, 0, BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTICS \
-BOOST_PP_TUPLE_ELEM( 2, 1, BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_full_barrier 0
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_acquire 1
-#define BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_release 2
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
-BOOST_PP_IF( BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_AFFIX_ \
- , BOOST_ACT_INTERLOCKED_DETAIL_SEMANTICS \
- ) \
- , BOOST_PP_CAT \
- ( \
- BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME \
- , BOOST_PP_CAT( _ \
- , BOOST_ACT_INTERLOCKED_DETAIL_SEMANTICS \
- ) \
- ) \
- , BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME \
- )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-BOOST_PP_CAT \
-( \
- BOOST_PP_CAT( <boost/act/interlocked/ \
- , BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME \
- ) \
-, / \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-, BOOST_PP_CAT \
- ( \
- BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME \
- , _result.hpp> \
- ) \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-, BOOST_PP_CAT \
- ( \
- detail/ \
- , BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME \
- ) \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-, _impl.hpp> \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-, _default_impl.hpp> \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO \
-BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER()
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER()
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER()
-
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER
-
-#include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/remove_volatile.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_decl.hpp>
-#include <boost/act/interlocked/detail/has_nested_type.hpp>
-#include <boost/type_traits/remove_volatile.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename TargetType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
-, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME
- , _result
- )
- < TargetType >
->
-::type
-BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME( TargetType& target )
-{
- typedef typename remove_volatile< TargetType >::type type;
- typedef typename BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SHORT_NAME
- , _result
- )
- < TargetType >
- ::type result_type;
-
- typedef detail::BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME
- , _impl
- )
- < result_type
- , type
- >
- impl_type;
-
- return mpl::if_< detail::has_nested_type< impl_type >
- , impl_type
- , detail::BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FULL_NAME
- , _default_impl
- )
- < result_type, type >
- >
- ::type
- ::execute( target );
-}
-
-} } }
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_HPP
 
-#undef BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER() \
+<boost/act/interlocked/detail/unary_forwarder_dont_include.hpp>
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,75 @@
+/*=============================================================================
+ 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_DETAIL_UNARY_FORWARDER_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.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/type_traits/remove_volatile.hpp>
+
+#include <boost/act/interlocked/detail/forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_INFO \
+BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_assign_style_params< TargetType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+>
+::type
+BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME( TargetType& target )
+{
+ typedef typename remove_volatile< TargetType >::type type;
+ typedef typename BOOST_PP_CAT
+ ( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+ ::type result_type;
+
+ return detail::BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FULL_NAME
+ , _impl
+ )
+ < result_type
+ , type
+ >
+ ::execute( target );
+}
+
+} } }
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_IS_READY_FOR_CLEANUP
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_END()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -6,98 +6,19 @@
     http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
 #error Improper incusion of interlocked implementation header. Contact Boost.
 #else
+#undef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+#endif
+#endif
 
-#include <boost/preprocessor/cat.hpp>
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-BOOST_PP_CAT \
-( \
- BOOST_PP_CAT( <boost/act/interlocked/ \
- , BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME \
- ) \
-, / \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-, BOOST_PP_CAT \
- ( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME \
- , _result.hpp> \
- ) \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER() \
-, BOOST_PP_CAT \
- ( \
- detail/ \
- , BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME \
- ) \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-, _impl.hpp> \
-)
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER() \
-BOOST_PP_CAT \
-( \
- BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER() \
-, _default_impl.hpp> \
-)
-
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER()
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER()
-#include BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER()
-
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_DEFAULT_IMPL_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_IMPL_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_DETAIL_HEADER_OPENER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_RESULT_HEADER
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_HEADER_OPENER
-
-#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/act/interlocked/detail/impl_decl.hpp>
-
-namespace boost { namespace act { namespace interlocked {
-
-template< typename TargetType >
-typename lazy_enable_if
-<
- mpl::and_
- <
- detail::are_valid_assign_style_params< TargetType >
- , mpl::not_< detail::is_interlocked_bool< TargetType > >
- >
-, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME
- , _result
- )
- < TargetType >
->
-::type
-BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME( TargetType& target );
-
-} } }
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_HPP
 
-#undef BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD() \
+<boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp>
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO
+#error Improper incusion of interlocked implementation header. Contact Boost.
+#else
+
+#include <boost/preprocessor/cat.hpp>
+
+#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/act/interlocked/detail/forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_INFO \
+BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ detail::are_valid_assign_style_params< TargetType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_SHORT_NAME
+ , _result
+ )
+ < TargetType >
+>
+::type
+BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_FULL_NAME( TargetType& target );
+
+} } }
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_IS_READY_FOR_CLEANUP
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_FORWARDER_FWD_END()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/detail/divide_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign/divide_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/divide_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_INCREMENT_DETAIL_INCREMENT_ACQUIRE_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_DETAIL_INCREMENT_ACQUIRE_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct increment_acquire_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was_acquire( target
+ , act::detail::next( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_INCREMENT_DETAIL_INCREMENT_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_DETAIL_INCREMENT_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct increment_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was( target
+ , act::detail::next( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_operation.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_operation.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,6 +9,9 @@
 #ifndef BOOST_ACT_INTERLOCKED_INCREMENT_DETAIL_INCREMENT_OPERATION_HPP
 #define BOOST_ACT_INTERLOCKED_INCREMENT_DETAIL_INCREMENT_OPERATION_HPP
 
+#include <boost/act/detail/next.hpp>
+#include <boost/act/detail/prior.hpp>
+
 namespace boost { namespace act { namespace interlocked { namespace detail {
 
 struct increment_operation
@@ -18,9 +21,7 @@
     template< typename ValueType >
     static ValueType execute( ValueType& value )
     {
- ValueType copy = value;
-
- return ++copy;
+ return act::detail::next( value );
     }
   };
 
@@ -29,9 +30,7 @@
     template< typename ValueType >
     static ValueType execute( ValueType& value )
     {
- ValueType copy = value;
-
- return --copy;
+ return act::detail::prior( value );
     }
   };
 };

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/detail/increment_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_INCREMENT_DETAIL_INCREMENT_RELEASE_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_DETAIL_INCREMENT_RELEASE_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/detail/prior.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct increment_release_default_impl
+{
+ template< typename TargetType >
+ static ResultType execute( TargetType& target )
+ {
+ UnqualifiedType new_value;
+
+ for( UnqualifiedType curr_value = retrieve( target )
+ ; ( new_value = assign_if_was_release( target
+ , act::detail::next( curr_value )
+ , curr_value
+ )
+ .old_value()
+ )
+ != curr_value
+ ; curr_value = new_value
+ );
+
+ return new_value;
+ }
+};
+
+
+} } } }
+
+#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-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,8 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_HPP
 #define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_HPP
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO ( increment, full_barrier )
-
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( increment, full_barrier )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
+
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,8 +9,11 @@
 #ifndef BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_ACQUIRE_HPP
 #define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_ACQUIRE_HPP
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO ( increment, acquire )
-
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( increment, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
+
+
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_acquire_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_INCREMENT_INCREMENT_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_ACQUIRE_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( increment, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_INCREMENT_INCREMENT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( increment, full_barrier )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,8 +9,10 @@
 #ifndef BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_RELEASE_HPP
 #define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_RELEASE_HPP
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_INFO ( increment, release )
-
 #include <boost/act/interlocked/detail/unary_forwarder.hpp>
 
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_INFO ( increment, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER()
+
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_release_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_INCREMENT_INCREMENT_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_RELEASE_FWD_HPP
+
+#include <boost/act/interlocked/detail/unary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD_INFO ( increment, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_FORWARDER_FWD()
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_result.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_result.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_result.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -9,10 +9,8 @@
 #ifndef BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_RESULT_HPP
 #define BOOST_ACT_INTERLOCKED_INCREMENT_INCREMENT_RESULT_HPP
 
-#include <boost/act/interlocked/detail/result_impl.hpp>
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO increment
 
-#define BOOST_ACT_INTERLOCKED_DETAIL_OP_NAME increment
-
-#include BOOST_ACT_INTERLOCKED_DETAIL_UNARY_RESULT_IMPL()
+#include <boost/act/interlocked/detail/unary_result_impl.hpp>
 
 #endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_INCREMENT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_INCREMENT_FWD_HPP
+
+#include <boost/act/interlocked/increment/increment_fwd.hpp>
+#include <boost/act/interlocked/increment/increment_acquire_fwd.hpp>
+#include <boost/act/interlocked/increment/increment_release_fwd.hpp>
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/selection.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/selection.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/selection.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -123,14 +123,14 @@
 template< long MaxValue >
 struct int_max_value_t
 {
- typedef typename boost::int_max_value_t< Bits >::least least;
+ typedef typename boost::int_max_value_t< MaxValue >::least least;
   typedef typename int_fast_t< least >::fast fast;
 };
 
 template< long MinValue >
 struct int_min_value_t
 {
- typedef typename boost::int_min_value_t< Bits >::least least;
+ typedef typename boost::int_min_value_t< MinValue >::least least;
   typedef typename int_fast_t< least >::fast fast;
 };
 
@@ -138,7 +138,7 @@
 template< unsigned long Value >
 struct uint_value_t
 {
- typedef typename boost::uint_value_t< Bits >::least least;
+ typedef typename boost::uint_value_t< Value >::least least;
   typedef typename int_fast_t< least >::fast fast;
 };
 

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/types.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/types.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/types.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -15,8 +15,11 @@
 
 #include <boost/config.hpp>
 
+// ToDo: Add in toggles for 64-bit
+
 #ifdef BOOST_WINDOWS
 
+#include <windows.h>
 #include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
 #include <cstddef>
 
@@ -30,6 +33,14 @@
 typedef unsigned long uint_fast16_t;
 typedef unsigned long uint_fast32_t;
 
+typedef long short_t;
+typedef long int_t;
+typedef long long_t;
+
+typedef unsigned long ushort_t;
+typedef unsigned long uint_t;
+typedef unsigned long ulong_t;
+
 typedef ::std::size_t size_t;
 typedef ::std::ptrdiff_t ptrdiff_t;
 

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/detail/mod_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign/mod_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/mod_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/detail/multiply_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign/multiply_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/multiply_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/detail/negate_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign/negate_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/negate_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,66 @@
+/*=============================================================================
+ 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_RETRIEVE_HPP
+#define BOOST_ACT_INTERLOCKED_RETRIEVE_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_RETRIEVE
+
+#include <boost/act/interlocked/retrieve/detail/retrieve_default.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename ResultType, typename UnqualifiedType >
+struct retrieve_impl : retrieve_default_impl< ResultType, UnqualifiedType > {};
+
+} } } }
+
+#else
+
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_RETRIEVE_CUSTOM_IMPL_HEADER() \
+BOOST_PP_CAT \
+( \
+ BOOST_PP_CAT( <boost/act/interlocked/retrieve/detail/retrieve_ \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_NAME \
+ ) \
+, .hpp> \
+)
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_RETRIEVE_CUSTOM_IMPL_HEADER()
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_RETRIEVE_CUSTOM_IMPL_HEADER
+
+#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
+retrieve( TargetType const& target )
+{
+ typedef typename remove_volatile< TargetType >::type unqualified_type;
+
+ return detail::retrieve_impl< unqualified_type, unqualified_type >
+ ::execute( target );
+}
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/retrieve_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_RETRIEVE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_RETRIEVE_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
+retrieve( TargetType const& target );
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acquire_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_acquire_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_ACQUIRE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_ACQUIRE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( subtract_assign, acquire, - )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( subtract_assign, full_barrier, - )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_operation.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_OPERATION_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_DETAIL_SUBTRACT_ASSIGN_OPERATION_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_OPERATION_INFO \
+( subtract_assign, -, inverse(+) )
+
+#include <boost/act/interlocked/detail/binary_operation.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_release_default.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_release_default.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ 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_RELEASE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_RELEASE_DEFAULT_HPP
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO
+#endif
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_DEFAULT_IMPL_INFO \
+( subtract_assign, release, - )
+
+#include <boost/act/interlocked/detail/binary_default_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, full_barrier, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, acquire, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_ACQUIRE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, acquire, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, full_barrier, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, release, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RELEASE_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, release, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RESULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RESULT_HPP
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_RESULT_INFO subtract_assign
+
+#include <boost/act/interlocked/detail/binary_result_impl.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 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_SUBTRACT_ASSIGN_RESULT_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_RESULT_FWD_HPP
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename TargetType, typename OperandType = TargetType >
+struct subtract_assign_result;
+
+} } }
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_acquire_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_operation.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/detail/xor_assign_release_default.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_acquire.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_release.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign/xor_assign_result.hpp
==============================================================================

Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/xor_assign_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ 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_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_FWD_HPP
+
+#include <boost/act/interlocked/subtract_assign/subtract_assign_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_acquire_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_release_fwd.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result_fwd.hpp>
+
+#endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -11,5 +11,7 @@
 
 #include <boost/act/interlocked/assign_fwd.hpp>
 #include <boost/act/interlocked/assign_if_was_fwd.hpp>
+#include <boost/act/interlocked/increment_fwd.hpp>
+#include <boost/act/interlocked/decrement_fwd.hpp>
 
 #endif

Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/queue_policy/bounded_queue_policy/safe_single_push_pop_queue.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/queue_policy/bounded_queue_policy/safe_single_push_pop_queue.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/queue_policy/bounded_queue_policy/safe_single_push_pop_queue.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -21,7 +21,7 @@
 #include <boost/act/interlocked/increment/increment_release.hpp>
 #include <boost/act/interlocked/decrement/decrement_release.hpp>
 #include <boost/act/interlocked/integer/types.hpp>
-#include <boost/act/interlocked/safe_get.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
 
 #include <cstddef>
 #include <new>
@@ -79,8 +79,8 @@
     , curr_size_m( 0 ) {}
 public:
   ~bounded_safe_single_push_pop_queue() { clear(); }
-private:
- void clear()
+public:
+ void clear() // ToDo: Remove
   {
     for( size_type curr_size = size(); curr_size > 0; --curr_size )
       pop();
@@ -90,7 +90,7 @@
   {
     // Safe get insures an added volatile qualifier and that the type can safely
     // be read in whole when another thread is writing to it.
- return static_cast< size_type >( interlocked::safe_get( curr_size_m ) );
+ return static_cast< size_type >( interlocked::retrieve( curr_size_m ) );
   }
 
   bool empty() const { return size() == 0; }

Added: sandbox/SOC/2006/concurrency/trunk/boost/utility/binary.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/utility/binary.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,714 @@
+#ifndef BOOST_UTILITY_BINARY_HPP
+#define BOOST_UTILITY_BINARY_HPP
+
+// (C) Copyright Matthew Calabrese 2005
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/preprocessor/control/deduce_d.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/seq/cat.hpp>
+#include <boost/preprocessor/seq/transform.hpp>
+#include <boost/preprocessor/arithmetic/mod.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/control/while.hpp>
+
+#define BOOST_DETAIL_BITS_PER_OCTIT 3
+
+#define BOOST_BINARY( bit_groupings ) \
+ BOOST_BINARY_LITERAL_D \
+ ( \
+ BOOST_PP_DEDUCE_D() \
+ , bit_groupings \
+ )
+
+#define BOOST_BINARY_U( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, U )
+
+#define BOOST_BINARY_L( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, L )
+
+#define BOOST_BINARY_UL( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, UL )
+
+#define BOOST_BINARY_LU( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LU )
+
+#define BOOST_BINARY_LL( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LL )
+
+#define BOOST_BINARY_ULL( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, ULL )
+
+#define BOOST_BINARY_LLU( bit_groupings ) \
+ BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LLU )
+
+#define BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, suffix ) \
+ BOOST_SUFFIXED_BINARY_LITERAL_D \
+ ( \
+ BOOST_PP_DEDUCE_D() \
+ , bit_groupings \
+ , suffix \
+ )
+
+#define BOOST_SUFFIXED_BINARY_LITERAL_D( d, bit_groupings, suffix ) \
+ BOOST_PP_CAT( BOOST_BINARY_LITERAL_D( d, bit_groupings ), suffix )
+
+#define BOOST_BINARY_LITERAL_D( d, bit_groupings ) \
+ BOOST_PP_SEQ_CAT \
+ ( \
+ (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \
+ )
+
+#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \
+ BOOST_PP_SEQ_TRANSFORM \
+ ( \
+ BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION \
+ , BOOST_PP_NIL \
+ , BOOST_PP_IDENTITY( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE )()\
+ ( \
+ BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE \
+ ( \
+ d \
+ , BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings ) \
+ ) \
+ ) \
+ )
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE( bit_sequence ) \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 bit_sequence \
+ , END_BIT \
+ )
+
+#define BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE( d, incomplete_nibble_sequence ) \
+ BOOST_PP_CAT \
+ ( \
+ BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_ \
+ , BOOST_PP_MOD_D( d \
+ , BOOST_PP_SEQ_SIZE( incomplete_nibble_sequence ) \
+ , BOOST_DETAIL_BITS_PER_OCTIT \
+ ) \
+ ) \
+ incomplete_nibble_sequence
+
+/* Begin workaround */
+
+#define BOOST_DETAIL_FIXED_COMPL( bit ) \
+ BOOST_PP_CAT( BOOST_DETAIL_FIXED_COMPL_, bit )
+
+#define BOOST_DETAIL_FIXED_COMPL_0 1
+
+#define BOOST_DETAIL_FIXED_COMPL_1 0
+
+/* End workaround */
+
+#define BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings ) \
+ BOOST_PP_EMPTY \
+ BOOST_PP_CAT( BOOST_PP_WHILE_, d ) \
+ ( \
+ BOOST_DETAIL_BINARY_LITERAL_PREDICATE \
+ , BOOST_DETAIL_BINARY_LITERAL_OPERATION \
+ , bit_groupings () \
+ )
+
+#define BOOST_DETAIL_BINARY_LITERAL_PREDICATE( d, state ) \
+ BOOST_DETAIL_FIXED_COMPL( BOOST_DETAIL_IS_NULLARY_ARGS( state ) )
+
+#define BOOST_DETAIL_BINARY_LITERAL_OPERATION( d, state ) \
+ BOOST_DETAIL_SPLIT_AND_SWAP \
+ ( \
+ BOOST_PP_CAT( BOOST_DETAIL_BINARY_LITERAL_ELEMENT_, state ) \
+ )
+
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION( s, dummy_param, tuple ) \
+ BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL tuple
+
+#define BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL( bit2, bit1, bit0 ) \
+ BOOST_DETAIL_TRIPLE_TO_OCTAL_ ## bit2 ## bit1 ## bit0
+
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_1 (0)(0)
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_2 (0)
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_0
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1END_BIT
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1( bit ) \
+ ( ( bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2( bit ) \
+ bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3( bit ) \
+ bit ) ) BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1
+
+#define BOOST_DETAIL_SPLIT_AND_SWAP( params ) \
+ BOOST_PP_IDENTITY( BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS )()( params )
+
+#define BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS( first_param, second_param ) \
+ second_param first_param
+
+#define BOOST_DETAIL_LEFT_OF_COMMA( params ) \
+ BOOST_PP_IDENTITY( BOOST_DETAIL_FIRST_MACRO_PARAM )()( params )
+
+#define BOOST_DETAIL_FIRST_MACRO_PARAM( first_param, second_param ) \
+ first_param
+
+/* Begin derived concepts from Chaos by Paul Mensonides */
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS( param ) \
+ BOOST_DETAIL_LEFT_OF_COMMA \
+ ( \
+ BOOST_PP_CAT( BOOST_DETAIL_IS_NULLARY_ARGS_R_ \
+ , BOOST_DETAIL_IS_NULLARY_ARGS_C param \
+ ) \
+ )
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_C() \
+ 1
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_R_1 \
+ 1, BOOST_PP_NIL
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_R_BOOST_DETAIL_IS_NULLARY_ARGS_C \
+ 0, BOOST_PP_NIL
+
+/* End derived concepts from Chaos by Paul Mensonides */
+
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_000 0
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_001 1
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_010 2
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_011 3
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_100 4
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_101 5
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_110 6
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_111 7
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0 (0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1 (1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000 (0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001 (0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010 (0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011 (0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100 (1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101 (1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110 (1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111 (1)(1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000 (0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001 (0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010 (0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011 (0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100 (0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101 (0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110 (0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111 (0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000 (1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001 (1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010 (1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011 (1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100 (1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101 (1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110 (1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111 (1)(1)(1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000 (0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001 (0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010 (0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011 (0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100 (0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101 (0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110 (0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111 (0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000 (0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001 (0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010 (0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011 (0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100 (0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101 (0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110 (0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111 (0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000 (1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001 (1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010 (1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011 (1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100 (1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101 (1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110 (1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111 (1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000 (1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001 (1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010 (1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011 (1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100 (1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101 (1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110 (1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111 (1)(1)(1)(1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000000 (0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000001 (0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000010 (0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000011 (0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000100 (0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000101 (0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000110 (0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000111 (0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001000 (0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001001 (0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001010 (0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001011 (0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001100 (0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001101 (0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001110 (0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001111 (0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010000 (0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010001 (0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010010 (0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010011 (0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010100 (0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010101 (0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010110 (0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010111 (0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011000 (0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011001 (0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011010 (0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011011 (0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011100 (0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011101 (0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011110 (0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011111 (0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100000 (1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100001 (1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100010 (1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100011 (1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100100 (1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100101 (1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100110 (1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100111 (1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101000 (1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101001 (1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101010 (1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101011 (1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101100 (1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101101 (1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101110 (1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101111 (1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110000 (1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110001 (1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110010 (1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110011 (1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110100 (1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110101 (1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110110 (1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110111 (1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111000 (1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111001 (1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111010 (1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111011 (1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111100 (1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111101 (1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111110 (1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111111 (1)(1)(1)(1)(1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000000 (0)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000001 (0)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000010 (0)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000011 (0)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000100 (0)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000101 (0)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000110 (0)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000111 (0)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001000 (0)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001001 (0)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001010 (0)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001011 (0)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001100 (0)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001101 (0)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001110 (0)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001111 (0)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010000 (0)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010001 (0)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010010 (0)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010011 (0)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010100 (0)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010101 (0)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010110 (0)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010111 (0)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011000 (0)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011001 (0)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011010 (0)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011011 (0)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011100 (0)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011101 (0)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011110 (0)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011111 (0)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100000 (0)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100001 (0)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100010 (0)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100011 (0)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100100 (0)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100101 (0)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100110 (0)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100111 (0)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101000 (0)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101001 (0)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101010 (0)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101011 (0)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101100 (0)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101101 (0)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101110 (0)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101111 (0)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110000 (0)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110001 (0)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110010 (0)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110011 (0)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110100 (0)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110101 (0)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110110 (0)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110111 (0)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111000 (0)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111001 (0)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111010 (0)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111011 (0)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111100 (0)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111101 (0)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111110 (0)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111111 (0)(1)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000000 (1)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000001 (1)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000010 (1)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000011 (1)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000100 (1)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000101 (1)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000110 (1)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000111 (1)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001000 (1)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001001 (1)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001010 (1)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001011 (1)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001100 (1)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001101 (1)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001110 (1)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001111 (1)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010000 (1)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010001 (1)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010010 (1)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010011 (1)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010100 (1)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010101 (1)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010110 (1)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010111 (1)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011000 (1)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011001 (1)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011010 (1)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011011 (1)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011100 (1)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011101 (1)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011110 (1)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011111 (1)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100000 (1)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100001 (1)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100010 (1)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100011 (1)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100100 (1)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100101 (1)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100110 (1)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100111 (1)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101000 (1)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101001 (1)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101010 (1)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101011 (1)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101100 (1)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101101 (1)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101110 (1)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101111 (1)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110000 (1)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110001 (1)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110010 (1)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110011 (1)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110100 (1)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110101 (1)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110110 (1)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110111 (1)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111000 (1)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111001 (1)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111010 (1)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111011 (1)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111100 (1)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111101 (1)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111110 (1)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111111 (1)(1)(1)(1)(1)(1)(1),
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000000 (0)(0)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000001 (0)(0)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000010 (0)(0)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000011 (0)(0)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000100 (0)(0)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000101 (0)(0)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000110 (0)(0)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000111 (0)(0)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001000 (0)(0)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001001 (0)(0)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001010 (0)(0)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001011 (0)(0)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001100 (0)(0)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001101 (0)(0)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001110 (0)(0)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001111 (0)(0)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010000 (0)(0)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010001 (0)(0)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010010 (0)(0)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010011 (0)(0)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010100 (0)(0)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010101 (0)(0)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010110 (0)(0)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010111 (0)(0)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011000 (0)(0)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011001 (0)(0)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011010 (0)(0)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011011 (0)(0)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011100 (0)(0)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011101 (0)(0)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011110 (0)(0)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011111 (0)(0)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100000 (0)(0)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100001 (0)(0)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100010 (0)(0)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100011 (0)(0)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100100 (0)(0)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100101 (0)(0)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100110 (0)(0)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100111 (0)(0)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101000 (0)(0)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101001 (0)(0)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101010 (0)(0)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101011 (0)(0)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101100 (0)(0)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101101 (0)(0)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101110 (0)(0)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101111 (0)(0)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110000 (0)(0)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110001 (0)(0)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110010 (0)(0)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110011 (0)(0)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110100 (0)(0)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110101 (0)(0)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110110 (0)(0)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110111 (0)(0)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111000 (0)(0)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111001 (0)(0)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111010 (0)(0)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111011 (0)(0)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111100 (0)(0)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111101 (0)(0)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111110 (0)(0)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111111 (0)(0)(1)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000000 (0)(1)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000001 (0)(1)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000010 (0)(1)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000011 (0)(1)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000100 (0)(1)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000101 (0)(1)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000110 (0)(1)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000111 (0)(1)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001000 (0)(1)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001001 (0)(1)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001010 (0)(1)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001011 (0)(1)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001100 (0)(1)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001101 (0)(1)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001110 (0)(1)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001111 (0)(1)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010000 (0)(1)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010001 (0)(1)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010010 (0)(1)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010011 (0)(1)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010100 (0)(1)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010101 (0)(1)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010110 (0)(1)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010111 (0)(1)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011000 (0)(1)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011001 (0)(1)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011010 (0)(1)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011011 (0)(1)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011100 (0)(1)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011101 (0)(1)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011110 (0)(1)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011111 (0)(1)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100000 (0)(1)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100001 (0)(1)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100010 (0)(1)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100011 (0)(1)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100100 (0)(1)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100101 (0)(1)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100110 (0)(1)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100111 (0)(1)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101000 (0)(1)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101001 (0)(1)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101010 (0)(1)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101011 (0)(1)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101100 (0)(1)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101101 (0)(1)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101110 (0)(1)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101111 (0)(1)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110000 (0)(1)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110001 (0)(1)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110010 (0)(1)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110011 (0)(1)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110100 (0)(1)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110101 (0)(1)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110110 (0)(1)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110111 (0)(1)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111000 (0)(1)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111001 (0)(1)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111010 (0)(1)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111011 (0)(1)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111100 (0)(1)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111101 (0)(1)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111110 (0)(1)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111111 (0)(1)(1)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000000 (1)(0)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000001 (1)(0)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000010 (1)(0)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000011 (1)(0)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000100 (1)(0)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000101 (1)(0)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000110 (1)(0)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000111 (1)(0)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001000 (1)(0)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001001 (1)(0)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001010 (1)(0)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001011 (1)(0)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001100 (1)(0)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001101 (1)(0)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001110 (1)(0)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001111 (1)(0)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010000 (1)(0)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010001 (1)(0)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010010 (1)(0)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010011 (1)(0)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010100 (1)(0)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010101 (1)(0)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010110 (1)(0)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010111 (1)(0)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011000 (1)(0)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011001 (1)(0)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011010 (1)(0)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011011 (1)(0)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011100 (1)(0)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011101 (1)(0)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011110 (1)(0)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011111 (1)(0)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100000 (1)(0)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100001 (1)(0)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100010 (1)(0)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100011 (1)(0)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100100 (1)(0)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100101 (1)(0)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100110 (1)(0)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100111 (1)(0)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101000 (1)(0)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101001 (1)(0)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101010 (1)(0)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101011 (1)(0)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101100 (1)(0)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101101 (1)(0)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101110 (1)(0)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101111 (1)(0)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110000 (1)(0)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110001 (1)(0)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110010 (1)(0)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110011 (1)(0)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110100 (1)(0)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110101 (1)(0)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110110 (1)(0)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110111 (1)(0)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111000 (1)(0)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111001 (1)(0)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111010 (1)(0)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111011 (1)(0)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111100 (1)(0)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111101 (1)(0)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111110 (1)(0)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111111 (1)(0)(1)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000000 (1)(1)(0)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000001 (1)(1)(0)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000010 (1)(1)(0)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000011 (1)(1)(0)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000100 (1)(1)(0)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000101 (1)(1)(0)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000110 (1)(1)(0)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000111 (1)(1)(0)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001000 (1)(1)(0)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001001 (1)(1)(0)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001010 (1)(1)(0)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001011 (1)(1)(0)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001100 (1)(1)(0)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001101 (1)(1)(0)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001110 (1)(1)(0)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001111 (1)(1)(0)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010000 (1)(1)(0)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010001 (1)(1)(0)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010010 (1)(1)(0)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010011 (1)(1)(0)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010100 (1)(1)(0)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010101 (1)(1)(0)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010110 (1)(1)(0)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010111 (1)(1)(0)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011000 (1)(1)(0)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011001 (1)(1)(0)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011010 (1)(1)(0)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011011 (1)(1)(0)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011100 (1)(1)(0)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011101 (1)(1)(0)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011110 (1)(1)(0)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011111 (1)(1)(0)(1)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100000 (1)(1)(1)(0)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100001 (1)(1)(1)(0)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100010 (1)(1)(1)(0)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100011 (1)(1)(1)(0)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100100 (1)(1)(1)(0)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100101 (1)(1)(1)(0)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100110 (1)(1)(1)(0)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100111 (1)(1)(1)(0)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101000 (1)(1)(1)(0)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101001 (1)(1)(1)(0)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101010 (1)(1)(1)(0)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101011 (1)(1)(1)(0)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101100 (1)(1)(1)(0)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101101 (1)(1)(1)(0)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101110 (1)(1)(1)(0)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101111 (1)(1)(1)(0)(1)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110000 (1)(1)(1)(1)(0)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110001 (1)(1)(1)(1)(0)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110010 (1)(1)(1)(1)(0)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110011 (1)(1)(1)(1)(0)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110100 (1)(1)(1)(1)(0)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110101 (1)(1)(1)(1)(0)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110110 (1)(1)(1)(1)(0)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110111 (1)(1)(1)(1)(0)(1)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111000 (1)(1)(1)(1)(1)(0)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111001 (1)(1)(1)(1)(1)(0)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111010 (1)(1)(1)(1)(1)(0)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111011 (1)(1)(1)(1)(1)(0)(1)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0),
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1),
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/Jamfile.v2 2007-06-15 19:59:39 EDT (Fri, 15 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)
+#==============================================================================
+
+project boost/libs/act/doc ;
+import boostbook : boostbook ;
+using quickbook ;
+
+boostbook quickbook
+ :
+ act.qbk
+ :
+ <xsl:param>boost.root=../../../..
+ <xsl:param>boost.libraries=../../../libraries.htm
+ <xsl:param>chunk.section.depth=4
+ <xsl:param>chunk.first.sections=1
+ <xsl:param>toc.section.depth=3
+ <xsl:param>toc.max.depth=3
+ <xsl:param>generate.section.toc.level=4
+ ;
+

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/concepts/interlocked_type.qbk 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -128,7 +128,7 @@
                                                      memory semantics.
                                                     ]
                                                    ] ]
-[[`safe_get( iv )`] [`I`] [Returns the value of `iv`.
+[[`retrieve( iv )`] [`I`] [Returns the value of `iv`.
                                                     [tablenote This template is
                                                      used for retrieving the
                                                      value of an object with the
@@ -137,7 +137,7 @@
                                                      recent value after any
                                                      modifications done by other
                                                      threads. The value is also
- guaranteed to not be
+ guaranteed to not be only
                                                      partially updated by
                                                      another thread.
                                                     ]

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/Jamfile.v2 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,44 @@
+#==============================================================================
+# 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)
+#==============================================================================
+
+import testing ;
+
+project act
+ : requirements
+ <library>../../thread/build//boost_thread
+ ;
+
+{
+ test-suite utility/binary
+ : [ run binary.cpp ]
+ ;
+
+ test-suite act/interlocked
+ : [ run interlocked/retrieve.cpp ]
+
+ [ run interlocked/assign/assign.cpp ]
+ [ run interlocked/assign/assign_acquire.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/add_assign/add_assign.cpp ]
+ [ run interlocked/add_assign/add_assign_acquire.cpp ]
+ [ run interlocked/add_assign/add_assign_release.cpp ]
+
+ [ run interlocked/subtract_assign/subtract_assign.cpp ]
+ [ run interlocked/subtract_assign/subtract_assign_acquire.cpp ]
+ [ run interlocked/subtract_assign/subtract_assign_release.cpp ]
+ ;
+
+ test-suite act
+ : [ run concurrent_consumer_policy.cpp ]
+ [ run bounded_queue_policy.cpp ]
+ ;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/binary.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/binary.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,652 @@
+/*=============================================================================
+ 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/test/minimal.hpp>
+#include <boost/utility/binary.hpp>
+#include <algorithm>
+#include <cstddef>
+
+/*
+Note: Behavior for long long types without a suffix is unspecified since such
+ types are not in the current C++ standard, and therefore implicit creation
+ of binary values with more than 32 bits without a suffix is not tested.
+ Because of this, if you must use binary values which are larger than 32
+ bits, please use one of the macros with suffixes.
+
+ This file tests every single valid bit-grouping on its own, and some
+ random combinations of bit-groupings.
+
+ The values generated here were done using www.random.org for "true" random
+ number generation.
+*/
+
+struct left_is_not_one_less_than_right
+{
+ bool operator ()( unsigned int left, unsigned int right ) const
+ {
+ return right != left + 1;
+ }
+};
+
+template< std::size_t Size >
+bool is_ascending_from_0_array( unsigned int const (&array)[Size] )
+{
+ unsigned int const* const curr = array,
+ * const end = array + Size;
+
+ return ( *curr == 0 )
+ && ( std::adjacent_find( curr, end
+ , left_is_not_one_less_than_right()
+ )
+ == end
+ );
+}
+
+std::size_t const unsigned_int_id = 1,
+ unsigned_long_int_id = 2;
+
+typedef char (&unsigned_int_id_type)[unsigned_int_id];
+typedef char (&unsigned_long_int_id_type)[unsigned_long_int_id];
+
+// Note: No definitions on purpose (only used for type checking)
+unsigned_int_id_type binary_type_checker( unsigned int );
+unsigned_long_int_id_type binary_type_checker( unsigned long int );
+
+std::size_t const num_random_test_values = 32;
+
+// Note: These hex values should all correspond with the binary array below
+unsigned int const random_unsigned_ints_hex[num_random_test_values]
+ = { 0x0103u, 0x77ebu, 0x5f36u, 0x1f18u, 0xc530u, 0xa73au, 0xd6f8u, 0x0919u
+ , 0xfbb0u, 0x3e7cu, 0xd0e9u, 0x22c8u, 0x724eu, 0x14fau, 0xd98eu, 0x40b5
+ , 0xeba0u, 0xfe50u, 0x688au, 0x1b05u, 0x5f9cu, 0xe4fcu, 0xa7b8u, 0xd3acu
+ , 0x1dddu, 0xbf04u, 0x8352u, 0xe89cu, 0x7506u, 0xe767u, 0xf489u, 0xe167
+ };
+
+unsigned int const random_unsigned_ints_binary[num_random_test_values]
+ = { BOOST_BINARY( 0 00010000 0011 ), BOOST_BINARY( 0 11101 1111 101011 )
+ , BOOST_BINARY( 010111 1100110 1 1 0 ), BOOST_BINARY( 000 1 11110 00 11000 )
+ , BOOST_BINARY( 110 001010 0110 000 ), BOOST_BINARY( 1010 01110011 1010 )
+ , BOOST_BINARY( 11 010 1 101111 1000 ), BOOST_BINARY( 0000 100100 0110 01 )
+ , BOOST_BINARY( 1111 101110 11 0000 ), BOOST_BINARY( 00111110 01111100 )
+ , BOOST_BINARY( 11 010 000111 01001 ), BOOST_BINARY( 00100 010110 01000 )
+ , BOOST_BINARY( 01 11001001 001110 ), BOOST_BINARY( 0010 1001111 1010 )
+ , BOOST_BINARY( 1101 1 00110 0 01110 ), BOOST_BINARY( 100 000 01011010 1 )
+ , BOOST_BINARY( 11 1010 1110 1000 00 ), BOOST_BINARY( 11111 110010 10000 )
+ , BOOST_BINARY( 01101 00010 001010 ), BOOST_BINARY( 000 11011 000001 01 )
+ , BOOST_BINARY( 01 01111 1100111 00 ), BOOST_BINARY( 1 110010 0111111 00 )
+ , BOOST_BINARY( 101 0011 11 01110 00 ), BOOST_BINARY( 110100 1 110101 100 )
+ , BOOST_BINARY( 00 1110111 011 101 ), BOOST_BINARY( 1011 1111 00000 100 )
+ , BOOST_BINARY( 1000 00110 101 0010 ), BOOST_BINARY( 1110 10001 001110 0 )
+ , BOOST_BINARY( 011 1010100 000 110 ), BOOST_BINARY( 1110 0111 01100 111 )
+ , BOOST_BINARY( 11110 10010 001001 ), BOOST_BINARY( 11 1000010 1100 111 )
+ };
+
+unsigned int const unsigned_ints_1_bit[2] =
+{ BOOST_BINARY( 0 )
+, BOOST_BINARY( 1 )
+};
+
+unsigned int const unsigned_ints_2_bits[4] =
+{ BOOST_BINARY( 00 )
+, BOOST_BINARY( 01 )
+, BOOST_BINARY( 10 )
+, BOOST_BINARY( 11 )
+};
+
+unsigned int const unsigned_ints_3_bits[8] =
+{ BOOST_BINARY( 000 )
+, BOOST_BINARY( 001 )
+, BOOST_BINARY( 010 )
+, BOOST_BINARY( 011 )
+, BOOST_BINARY( 100 )
+, BOOST_BINARY( 101 )
+, BOOST_BINARY( 110 )
+, BOOST_BINARY( 111 )
+};
+
+unsigned int const unsigned_ints_4_bits[16] =
+{ BOOST_BINARY( 0000 )
+, BOOST_BINARY( 0001 )
+, BOOST_BINARY( 0010 )
+, BOOST_BINARY( 0011 )
+, BOOST_BINARY( 0100 )
+, BOOST_BINARY( 0101 )
+, BOOST_BINARY( 0110 )
+, BOOST_BINARY( 0111 )
+, BOOST_BINARY( 1000 )
+, BOOST_BINARY( 1001 )
+, BOOST_BINARY( 1010 )
+, BOOST_BINARY( 1011 )
+, BOOST_BINARY( 1100 )
+, BOOST_BINARY( 1101 )
+, BOOST_BINARY( 1110 )
+, BOOST_BINARY( 1111 )
+};
+
+unsigned int const unsigned_ints_5_bits[32] =
+{ BOOST_BINARY( 00000 )
+, BOOST_BINARY( 00001 )
+, BOOST_BINARY( 00010 )
+, BOOST_BINARY( 00011 )
+, BOOST_BINARY( 00100 )
+, BOOST_BINARY( 00101 )
+, BOOST_BINARY( 00110 )
+, BOOST_BINARY( 00111 )
+, BOOST_BINARY( 01000 )
+, BOOST_BINARY( 01001 )
+, BOOST_BINARY( 01010 )
+, BOOST_BINARY( 01011 )
+, BOOST_BINARY( 01100 )
+, BOOST_BINARY( 01101 )
+, BOOST_BINARY( 01110 )
+, BOOST_BINARY( 01111 )
+, BOOST_BINARY( 10000 )
+, BOOST_BINARY( 10001 )
+, BOOST_BINARY( 10010 )
+, BOOST_BINARY( 10011 )
+, BOOST_BINARY( 10100 )
+, BOOST_BINARY( 10101 )
+, BOOST_BINARY( 10110 )
+, BOOST_BINARY( 10111 )
+, BOOST_BINARY( 11000 )
+, BOOST_BINARY( 11001 )
+, BOOST_BINARY( 11010 )
+, BOOST_BINARY( 11011 )
+, BOOST_BINARY( 11100 )
+, BOOST_BINARY( 11101 )
+, BOOST_BINARY( 11110 )
+, BOOST_BINARY( 11111 )
+};
+
+unsigned int const unsigned_ints_6_bits[64] =
+{ BOOST_BINARY( 000000 )
+, BOOST_BINARY( 000001 )
+, BOOST_BINARY( 000010 )
+, BOOST_BINARY( 000011 )
+, BOOST_BINARY( 000100 )
+, BOOST_BINARY( 000101 )
+, BOOST_BINARY( 000110 )
+, BOOST_BINARY( 000111 )
+, BOOST_BINARY( 001000 )
+, BOOST_BINARY( 001001 )
+, BOOST_BINARY( 001010 )
+, BOOST_BINARY( 001011 )
+, BOOST_BINARY( 001100 )
+, BOOST_BINARY( 001101 )
+, BOOST_BINARY( 001110 )
+, BOOST_BINARY( 001111 )
+, BOOST_BINARY( 010000 )
+, BOOST_BINARY( 010001 )
+, BOOST_BINARY( 010010 )
+, BOOST_BINARY( 010011 )
+, BOOST_BINARY( 010100 )
+, BOOST_BINARY( 010101 )
+, BOOST_BINARY( 010110 )
+, BOOST_BINARY( 010111 )
+, BOOST_BINARY( 011000 )
+, BOOST_BINARY( 011001 )
+, BOOST_BINARY( 011010 )
+, BOOST_BINARY( 011011 )
+, BOOST_BINARY( 011100 )
+, BOOST_BINARY( 011101 )
+, BOOST_BINARY( 011110 )
+, BOOST_BINARY( 011111 )
+, BOOST_BINARY( 100000 )
+, BOOST_BINARY( 100001 )
+, BOOST_BINARY( 100010 )
+, BOOST_BINARY( 100011 )
+, BOOST_BINARY( 100100 )
+, BOOST_BINARY( 100101 )
+, BOOST_BINARY( 100110 )
+, BOOST_BINARY( 100111 )
+, BOOST_BINARY( 101000 )
+, BOOST_BINARY( 101001 )
+, BOOST_BINARY( 101010 )
+, BOOST_BINARY( 101011 )
+, BOOST_BINARY( 101100 )
+, BOOST_BINARY( 101101 )
+, BOOST_BINARY( 101110 )
+, BOOST_BINARY( 101111 )
+, BOOST_BINARY( 110000 )
+, BOOST_BINARY( 110001 )
+, BOOST_BINARY( 110010 )
+, BOOST_BINARY( 110011 )
+, BOOST_BINARY( 110100 )
+, BOOST_BINARY( 110101 )
+, BOOST_BINARY( 110110 )
+, BOOST_BINARY( 110111 )
+, BOOST_BINARY( 111000 )
+, BOOST_BINARY( 111001 )
+, BOOST_BINARY( 111010 )
+, BOOST_BINARY( 111011 )
+, BOOST_BINARY( 111100 )
+, BOOST_BINARY( 111101 )
+, BOOST_BINARY( 111110 )
+, BOOST_BINARY( 111111 )
+};
+
+unsigned int const unsigned_ints_7_bits[128] =
+{ BOOST_BINARY( 0000000 )
+, BOOST_BINARY( 0000001 )
+, BOOST_BINARY( 0000010 )
+, BOOST_BINARY( 0000011 )
+, BOOST_BINARY( 0000100 )
+, BOOST_BINARY( 0000101 )
+, BOOST_BINARY( 0000110 )
+, BOOST_BINARY( 0000111 )
+, BOOST_BINARY( 0001000 )
+, BOOST_BINARY( 0001001 )
+, BOOST_BINARY( 0001010 )
+, BOOST_BINARY( 0001011 )
+, BOOST_BINARY( 0001100 )
+, BOOST_BINARY( 0001101 )
+, BOOST_BINARY( 0001110 )
+, BOOST_BINARY( 0001111 )
+, BOOST_BINARY( 0010000 )
+, BOOST_BINARY( 0010001 )
+, BOOST_BINARY( 0010010 )
+, BOOST_BINARY( 0010011 )
+, BOOST_BINARY( 0010100 )
+, BOOST_BINARY( 0010101 )
+, BOOST_BINARY( 0010110 )
+, BOOST_BINARY( 0010111 )
+, BOOST_BINARY( 0011000 )
+, BOOST_BINARY( 0011001 )
+, BOOST_BINARY( 0011010 )
+, BOOST_BINARY( 0011011 )
+, BOOST_BINARY( 0011100 )
+, BOOST_BINARY( 0011101 )
+, BOOST_BINARY( 0011110 )
+, BOOST_BINARY( 0011111 )
+, BOOST_BINARY( 0100000 )
+, BOOST_BINARY( 0100001 )
+, BOOST_BINARY( 0100010 )
+, BOOST_BINARY( 0100011 )
+, BOOST_BINARY( 0100100 )
+, BOOST_BINARY( 0100101 )
+, BOOST_BINARY( 0100110 )
+, BOOST_BINARY( 0100111 )
+, BOOST_BINARY( 0101000 )
+, BOOST_BINARY( 0101001 )
+, BOOST_BINARY( 0101010 )
+, BOOST_BINARY( 0101011 )
+, BOOST_BINARY( 0101100 )
+, BOOST_BINARY( 0101101 )
+, BOOST_BINARY( 0101110 )
+, BOOST_BINARY( 0101111 )
+, BOOST_BINARY( 0110000 )
+, BOOST_BINARY( 0110001 )
+, BOOST_BINARY( 0110010 )
+, BOOST_BINARY( 0110011 )
+, BOOST_BINARY( 0110100 )
+, BOOST_BINARY( 0110101 )
+, BOOST_BINARY( 0110110 )
+, BOOST_BINARY( 0110111 )
+, BOOST_BINARY( 0111000 )
+, BOOST_BINARY( 0111001 )
+, BOOST_BINARY( 0111010 )
+, BOOST_BINARY( 0111011 )
+, BOOST_BINARY( 0111100 )
+, BOOST_BINARY( 0111101 )
+, BOOST_BINARY( 0111110 )
+, BOOST_BINARY( 0111111 )
+, BOOST_BINARY( 1000000 )
+, BOOST_BINARY( 1000001 )
+, BOOST_BINARY( 1000010 )
+, BOOST_BINARY( 1000011 )
+, BOOST_BINARY( 1000100 )
+, BOOST_BINARY( 1000101 )
+, BOOST_BINARY( 1000110 )
+, BOOST_BINARY( 1000111 )
+, BOOST_BINARY( 1001000 )
+, BOOST_BINARY( 1001001 )
+, BOOST_BINARY( 1001010 )
+, BOOST_BINARY( 1001011 )
+, BOOST_BINARY( 1001100 )
+, BOOST_BINARY( 1001101 )
+, BOOST_BINARY( 1001110 )
+, BOOST_BINARY( 1001111 )
+, BOOST_BINARY( 1010000 )
+, BOOST_BINARY( 1010001 )
+, BOOST_BINARY( 1010010 )
+, BOOST_BINARY( 1010011 )
+, BOOST_BINARY( 1010100 )
+, BOOST_BINARY( 1010101 )
+, BOOST_BINARY( 1010110 )
+, BOOST_BINARY( 1010111 )
+, BOOST_BINARY( 1011000 )
+, BOOST_BINARY( 1011001 )
+, BOOST_BINARY( 1011010 )
+, BOOST_BINARY( 1011011 )
+, BOOST_BINARY( 1011100 )
+, BOOST_BINARY( 1011101 )
+, BOOST_BINARY( 1011110 )
+, BOOST_BINARY( 1011111 )
+, BOOST_BINARY( 1100000 )
+, BOOST_BINARY( 1100001 )
+, BOOST_BINARY( 1100010 )
+, BOOST_BINARY( 1100011 )
+, BOOST_BINARY( 1100100 )
+, BOOST_BINARY( 1100101 )
+, BOOST_BINARY( 1100110 )
+, BOOST_BINARY( 1100111 )
+, BOOST_BINARY( 1101000 )
+, BOOST_BINARY( 1101001 )
+, BOOST_BINARY( 1101010 )
+, BOOST_BINARY( 1101011 )
+, BOOST_BINARY( 1101100 )
+, BOOST_BINARY( 1101101 )
+, BOOST_BINARY( 1101110 )
+, BOOST_BINARY( 1101111 )
+, BOOST_BINARY( 1110000 )
+, BOOST_BINARY( 1110001 )
+, BOOST_BINARY( 1110010 )
+, BOOST_BINARY( 1110011 )
+, BOOST_BINARY( 1110100 )
+, BOOST_BINARY( 1110101 )
+, BOOST_BINARY( 1110110 )
+, BOOST_BINARY( 1110111 )
+, BOOST_BINARY( 1111000 )
+, BOOST_BINARY( 1111001 )
+, BOOST_BINARY( 1111010 )
+, BOOST_BINARY( 1111011 )
+, BOOST_BINARY( 1111100 )
+, BOOST_BINARY( 1111101 )
+, BOOST_BINARY( 1111110 )
+, BOOST_BINARY( 1111111 )
+};
+unsigned int const unsigned_ints_8_bits[256] =
+{ BOOST_BINARY( 00000000 )
+, BOOST_BINARY( 00000001 )
+, BOOST_BINARY( 00000010 )
+, BOOST_BINARY( 00000011 )
+, BOOST_BINARY( 00000100 )
+, BOOST_BINARY( 00000101 )
+, BOOST_BINARY( 00000110 )
+, BOOST_BINARY( 00000111 )
+, BOOST_BINARY( 00001000 )
+, BOOST_BINARY( 00001001 )
+, BOOST_BINARY( 00001010 )
+, BOOST_BINARY( 00001011 )
+, BOOST_BINARY( 00001100 )
+, BOOST_BINARY( 00001101 )
+, BOOST_BINARY( 00001110 )
+, BOOST_BINARY( 00001111 )
+, BOOST_BINARY( 00010000 )
+, BOOST_BINARY( 00010001 )
+, BOOST_BINARY( 00010010 )
+, BOOST_BINARY( 00010011 )
+, BOOST_BINARY( 00010100 )
+, BOOST_BINARY( 00010101 )
+, BOOST_BINARY( 00010110 )
+, BOOST_BINARY( 00010111 )
+, BOOST_BINARY( 00011000 )
+, BOOST_BINARY( 00011001 )
+, BOOST_BINARY( 00011010 )
+, BOOST_BINARY( 00011011 )
+, BOOST_BINARY( 00011100 )
+, BOOST_BINARY( 00011101 )
+, BOOST_BINARY( 00011110 )
+, BOOST_BINARY( 00011111 )
+, BOOST_BINARY( 00100000 )
+, BOOST_BINARY( 00100001 )
+, BOOST_BINARY( 00100010 )
+, BOOST_BINARY( 00100011 )
+, BOOST_BINARY( 00100100 )
+, BOOST_BINARY( 00100101 )
+, BOOST_BINARY( 00100110 )
+, BOOST_BINARY( 00100111 )
+, BOOST_BINARY( 00101000 )
+, BOOST_BINARY( 00101001 )
+, BOOST_BINARY( 00101010 )
+, BOOST_BINARY( 00101011 )
+, BOOST_BINARY( 00101100 )
+, BOOST_BINARY( 00101101 )
+, BOOST_BINARY( 00101110 )
+, BOOST_BINARY( 00101111 )
+, BOOST_BINARY( 00110000 )
+, BOOST_BINARY( 00110001 )
+, BOOST_BINARY( 00110010 )
+, BOOST_BINARY( 00110011 )
+, BOOST_BINARY( 00110100 )
+, BOOST_BINARY( 00110101 )
+, BOOST_BINARY( 00110110 )
+, BOOST_BINARY( 00110111 )
+, BOOST_BINARY( 00111000 )
+, BOOST_BINARY( 00111001 )
+, BOOST_BINARY( 00111010 )
+, BOOST_BINARY( 00111011 )
+, BOOST_BINARY( 00111100 )
+, BOOST_BINARY( 00111101 )
+, BOOST_BINARY( 00111110 )
+, BOOST_BINARY( 00111111 )
+, BOOST_BINARY( 01000000 )
+, BOOST_BINARY( 01000001 )
+, BOOST_BINARY( 01000010 )
+, BOOST_BINARY( 01000011 )
+, BOOST_BINARY( 01000100 )
+, BOOST_BINARY( 01000101 )
+, BOOST_BINARY( 01000110 )
+, BOOST_BINARY( 01000111 )
+, BOOST_BINARY( 01001000 )
+, BOOST_BINARY( 01001001 )
+, BOOST_BINARY( 01001010 )
+, BOOST_BINARY( 01001011 )
+, BOOST_BINARY( 01001100 )
+, BOOST_BINARY( 01001101 )
+, BOOST_BINARY( 01001110 )
+, BOOST_BINARY( 01001111 )
+, BOOST_BINARY( 01010000 )
+, BOOST_BINARY( 01010001 )
+, BOOST_BINARY( 01010010 )
+, BOOST_BINARY( 01010011 )
+, BOOST_BINARY( 01010100 )
+, BOOST_BINARY( 01010101 )
+, BOOST_BINARY( 01010110 )
+, BOOST_BINARY( 01010111 )
+, BOOST_BINARY( 01011000 )
+, BOOST_BINARY( 01011001 )
+, BOOST_BINARY( 01011010 )
+, BOOST_BINARY( 01011011 )
+, BOOST_BINARY( 01011100 )
+, BOOST_BINARY( 01011101 )
+, BOOST_BINARY( 01011110 )
+, BOOST_BINARY( 01011111 )
+, BOOST_BINARY( 01100000 )
+, BOOST_BINARY( 01100001 )
+, BOOST_BINARY( 01100010 )
+, BOOST_BINARY( 01100011 )
+, BOOST_BINARY( 01100100 )
+, BOOST_BINARY( 01100101 )
+, BOOST_BINARY( 01100110 )
+, BOOST_BINARY( 01100111 )
+, BOOST_BINARY( 01101000 )
+, BOOST_BINARY( 01101001 )
+, BOOST_BINARY( 01101010 )
+, BOOST_BINARY( 01101011 )
+, BOOST_BINARY( 01101100 )
+, BOOST_BINARY( 01101101 )
+, BOOST_BINARY( 01101110 )
+, BOOST_BINARY( 01101111 )
+, BOOST_BINARY( 01110000 )
+, BOOST_BINARY( 01110001 )
+, BOOST_BINARY( 01110010 )
+, BOOST_BINARY( 01110011 )
+, BOOST_BINARY( 01110100 )
+, BOOST_BINARY( 01110101 )
+, BOOST_BINARY( 01110110 )
+, BOOST_BINARY( 01110111 )
+, BOOST_BINARY( 01111000 )
+, BOOST_BINARY( 01111001 )
+, BOOST_BINARY( 01111010 )
+, BOOST_BINARY( 01111011 )
+, BOOST_BINARY( 01111100 )
+, BOOST_BINARY( 01111101 )
+, BOOST_BINARY( 01111110 )
+, BOOST_BINARY( 01111111 )
+, BOOST_BINARY( 10000000 )
+, BOOST_BINARY( 10000001 )
+, BOOST_BINARY( 10000010 )
+, BOOST_BINARY( 10000011 )
+, BOOST_BINARY( 10000100 )
+, BOOST_BINARY( 10000101 )
+, BOOST_BINARY( 10000110 )
+, BOOST_BINARY( 10000111 )
+, BOOST_BINARY( 10001000 )
+, BOOST_BINARY( 10001001 )
+, BOOST_BINARY( 10001010 )
+, BOOST_BINARY( 10001011 )
+, BOOST_BINARY( 10001100 )
+, BOOST_BINARY( 10001101 )
+, BOOST_BINARY( 10001110 )
+, BOOST_BINARY( 10001111 )
+, BOOST_BINARY( 10010000 )
+, BOOST_BINARY( 10010001 )
+, BOOST_BINARY( 10010010 )
+, BOOST_BINARY( 10010011 )
+, BOOST_BINARY( 10010100 )
+, BOOST_BINARY( 10010101 )
+, BOOST_BINARY( 10010110 )
+, BOOST_BINARY( 10010111 )
+, BOOST_BINARY( 10011000 )
+, BOOST_BINARY( 10011001 )
+, BOOST_BINARY( 10011010 )
+, BOOST_BINARY( 10011011 )
+, BOOST_BINARY( 10011100 )
+, BOOST_BINARY( 10011101 )
+, BOOST_BINARY( 10011110 )
+, BOOST_BINARY( 10011111 )
+, BOOST_BINARY( 10100000 )
+, BOOST_BINARY( 10100001 )
+, BOOST_BINARY( 10100010 )
+, BOOST_BINARY( 10100011 )
+, BOOST_BINARY( 10100100 )
+, BOOST_BINARY( 10100101 )
+, BOOST_BINARY( 10100110 )
+, BOOST_BINARY( 10100111 )
+, BOOST_BINARY( 10101000 )
+, BOOST_BINARY( 10101001 )
+, BOOST_BINARY( 10101010 )
+, BOOST_BINARY( 10101011 )
+, BOOST_BINARY( 10101100 )
+, BOOST_BINARY( 10101101 )
+, BOOST_BINARY( 10101110 )
+, BOOST_BINARY( 10101111 )
+, BOOST_BINARY( 10110000 )
+, BOOST_BINARY( 10110001 )
+, BOOST_BINARY( 10110010 )
+, BOOST_BINARY( 10110011 )
+, BOOST_BINARY( 10110100 )
+, BOOST_BINARY( 10110101 )
+, BOOST_BINARY( 10110110 )
+, BOOST_BINARY( 10110111 )
+, BOOST_BINARY( 10111000 )
+, BOOST_BINARY( 10111001 )
+, BOOST_BINARY( 10111010 )
+, BOOST_BINARY( 10111011 )
+, BOOST_BINARY( 10111100 )
+, BOOST_BINARY( 10111101 )
+, BOOST_BINARY( 10111110 )
+, BOOST_BINARY( 10111111 )
+, BOOST_BINARY( 11000000 )
+, BOOST_BINARY( 11000001 )
+, BOOST_BINARY( 11000010 )
+, BOOST_BINARY( 11000011 )
+, BOOST_BINARY( 11000100 )
+, BOOST_BINARY( 11000101 )
+, BOOST_BINARY( 11000110 )
+, BOOST_BINARY( 11000111 )
+, BOOST_BINARY( 11001000 )
+, BOOST_BINARY( 11001001 )
+, BOOST_BINARY( 11001010 )
+, BOOST_BINARY( 11001011 )
+, BOOST_BINARY( 11001100 )
+, BOOST_BINARY( 11001101 )
+, BOOST_BINARY( 11001110 )
+, BOOST_BINARY( 11001111 )
+, BOOST_BINARY( 11010000 )
+, BOOST_BINARY( 11010001 )
+, BOOST_BINARY( 11010010 )
+, BOOST_BINARY( 11010011 )
+, BOOST_BINARY( 11010100 )
+, BOOST_BINARY( 11010101 )
+, BOOST_BINARY( 11010110 )
+, BOOST_BINARY( 11010111 )
+, BOOST_BINARY( 11011000 )
+, BOOST_BINARY( 11011001 )
+, BOOST_BINARY( 11011010 )
+, BOOST_BINARY( 11011011 )
+, BOOST_BINARY( 11011100 )
+, BOOST_BINARY( 11011101 )
+, BOOST_BINARY( 11011110 )
+, BOOST_BINARY( 11011111 )
+, BOOST_BINARY( 11100000 )
+, BOOST_BINARY( 11100001 )
+, BOOST_BINARY( 11100010 )
+, BOOST_BINARY( 11100011 )
+, BOOST_BINARY( 11100100 )
+, BOOST_BINARY( 11100101 )
+, BOOST_BINARY( 11100110 )
+, BOOST_BINARY( 11100111 )
+, BOOST_BINARY( 11101000 )
+, BOOST_BINARY( 11101001 )
+, BOOST_BINARY( 11101010 )
+, BOOST_BINARY( 11101011 )
+, BOOST_BINARY( 11101100 )
+, BOOST_BINARY( 11101101 )
+, BOOST_BINARY( 11101110 )
+, BOOST_BINARY( 11101111 )
+, BOOST_BINARY( 11110000 )
+, BOOST_BINARY( 11110001 )
+, BOOST_BINARY( 11110010 )
+, BOOST_BINARY( 11110011 )
+, BOOST_BINARY( 11110100 )
+, BOOST_BINARY( 11110101 )
+, BOOST_BINARY( 11110110 )
+, BOOST_BINARY( 11110111 )
+, BOOST_BINARY( 11111000 )
+, BOOST_BINARY( 11111001 )
+, BOOST_BINARY( 11111010 )
+, BOOST_BINARY( 11111011 )
+, BOOST_BINARY( 11111100 )
+, BOOST_BINARY( 11111101 )
+, BOOST_BINARY( 11111110 )
+, BOOST_BINARY( 11111111 )
+};
+
+int test_main( int, char *[] )
+{
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_1_bit ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_2_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_3_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_4_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_5_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_6_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_7_bits ) );
+ BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_8_bits ) );
+
+ BOOST_CHECK( std::equal( &random_unsigned_ints_hex[0]
+ , random_unsigned_ints_hex + num_random_test_values
+ , &random_unsigned_ints_binary[0]
+ )
+ );
+
+ BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_U( 110100 1010 ) ) )
+ == unsigned_int_id
+ );
+
+ BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_UL( 11110 ) ) )
+ == unsigned_long_int_id
+ );
+
+ BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_LU( 10 0001 ) ) )
+ == unsigned_long_int_id
+ );
+
+ return 0;
+}

Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/test/consumer_policy_tester.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/consumer_policy_tester.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/consumer_policy_tester.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -21,7 +21,7 @@
 #include <boost/mpl/if.hpp>
 
 #include <boost/act/interlocked/increment/increment_acquire.hpp>
-#include <boost/act/interlocked/safe_get.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
 #include <boost/act/interlocked/integer/types.hpp>
 
 #include <boost/act/consumer_policy/scoped_consumer.hpp>
@@ -173,7 +173,7 @@
     consumer( long_process( test_val ) );
   }
 
- if( interlocked::safe_get( test_val ) != 2 )
+ if( interlocked::retrieve( test_val ) != 2 )
     BOOST_ERROR( "Scoped Consumer does not complete execution prior to." );
 /*
   using namespace boost::act;

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME add_assign
+
+#include "add_assign_helper.hpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_acquire.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_acquire.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME add_assign_acquire
+
+#include "add_assign_helper.hpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,51 @@
+/*=============================================================================
+ 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_ADD_ASSIGN_ADD_ASSIGN_HELPER
+#define BOOST_ACT_TEST_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_HELPER
+
+#include <boost/test/minimal.hpp>
+#include "../integral_additive_helper.hpp"
+#include "../operation_result_checker.hpp"
+#include <boost/act/interlocked/add_assign.hpp>
+#include <boost/act/interlocked/add_assign/add_assign_result.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+struct BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+{
+ template< typename LeftType, typename RightType >
+ typename boost::act::interlocked::add_assign_result< LeftType >::type
+ operator ()( LeftType& left, RightType const& right ) const
+ {
+ return boost::act::interlocked::BOOST_ACT_TEST_INTERLOCKED_NAME
+ ( left, right );
+ }
+};
+
+int test_main( int, char *[] )
+{
+ brute_operation_result_checker( basic_add()
+ , BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+ ()
+ );
+
+ brute_additive_assign_test( basic_add_assign()
+ , BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+ ()
+ );
+
+ return 0;
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_release.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/add_assign/add_assign_release.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME add_assign_release
+
+#include "add_assign_helper.hpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#include "../assign_retrieve_helper.hpp"
+#include <boost/thread/barrier.hpp>
+#include "assign_helper.hpp"
+
+int test_main( int, char *[] )
+{
+ test_assign_retrieve_no_threads( single_thread_basic_get()
+ , interlocked_assign_set()
+ );
+
+ test_assign_retrieve_no_threads( interlocked_retrieve_get()
+ , interlocked_assign_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_assign_retrieve_with_threads( barrier
+ , interlocked_retrieve_get()
+ , interlocked_assign_set()
+ );
+ }
+
+ brute_assign_test( interlocked_assign_set() );
+
+ return 0;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_acquire.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_acquire.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,49 @@
+/*=============================================================================
+ 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 "../assign_retrieve_helper.hpp"
+#include <boost/thread/barrier.hpp>
+#include "assign_helper.hpp"
+
+#include <boost/act/interlocked/assign/assign_acquire.hpp>
+#include <boost/act/interlocked/assign/assign_result.hpp>
+
+struct interlocked_assign_acquire_set
+{
+ template< typename VariableType, typename SourceType >
+ typename boost::act::interlocked::assign_result< VariableType >::type
+ operator ()( VariableType& var, SourceType new_val ) const
+ {
+ return boost::act::interlocked::assign_acquire( var, new_val );
+ }
+};
+
+int test_main( int, char *[] )
+{
+
+ test_assign_retrieve_no_threads( single_thread_basic_get()
+ , interlocked_assign_acquire_set()
+ );
+
+ test_assign_retrieve_no_threads( interlocked_retrieve_get()
+ , interlocked_assign_acquire_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_assign_retrieve_with_threads( barrier
+ , interlocked_retrieve_get()
+ , interlocked_assign_acquire_set()
+ );
+ }
+
+ brute_assign_test( interlocked_assign_acquire_set() );
+
+ return 0;
+}
\ No newline at end of file

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign/assign_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,120 @@
+/*=============================================================================
+ 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_ASSIGN_HELPER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_ASSIGN_ASSIGN_HELPER_HPP
+
+#include <boost/test/minimal.hpp>
+#include <boost/foreach.hpp>
+#include <boost/act/interlocked/assign/assign_result.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/barrier.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <set>
+
+#include "../random_uint8.hpp"
+
+template< typename ContainerType, typename BarrierType, typename AssignType
+ , typename DestinationType, typename SourceType
+ >
+class perform_assign
+{
+public:
+ perform_assign( ContainerType& container_init, boost::mutex& mutex_init
+ , BarrierType& barrier_init, AssignType assign_init
+ , DestinationType& destination_init, SourceType source_init
+ )
+ : container_m( container_init ), mutex_m( mutex_init )
+ , barrier_m( barrier_init ), assign_m( assign_init )
+ , destination_m( destination_init ), source_m( source_init ) {}
+public:
+ void operator ()() const
+ {
+ barrier_m.wait(); // Wait until all other perform_assigns are ready
+
+ typedef typename boost::act::interlocked::assign_result< DestinationType >
+ ::type result_type;
+
+ result_type const result = assign_m( destination_m, source_m );
+
+ BOOST_CHECK( result.new_value() == source_m );
+
+ {
+ boost::mutex::scoped_lock const lock( mutex_m );
+
+ typename ContainerType::iterator it
+ = container_m.find( result.old_value() );
+
+ BOOST_CHECK( it != container_m.end() );
+
+ container_m.erase( it );
+ }
+ }
+private:
+ ContainerType& container_m;
+ boost::mutex& mutex_m;
+ BarrierType& barrier_m;
+ AssignType assign_m;
+ DestinationType& destination_m;
+ SourceType source_m;
+};
+
+template< typename ContainerType, typename BarrierType, typename AssignType
+ , typename DestinationType, typename SourceType
+ >
+perform_assign< ContainerType, BarrierType, AssignType
+ , DestinationType, SourceType
+ >
+make_perform_assign( ContainerType& container, boost::mutex& mutex
+ , BarrierType& barrier, AssignType assign
+ , DestinationType& destination, SourceType source
+ )
+{
+ return perform_assign< ContainerType, BarrierType, AssignType
+ , DestinationType, SourceType
+ >
+ ( container, mutex, barrier, assign
+ , destination, source
+ );
+}
+
+template< typename AssignType >
+void brute_assign_test( AssignType assign )
+{
+ boost::barrier barrier( static_cast< unsigned int >( random_uint8.size() ) );
+
+ boost::thread_group thread_group;
+
+ boost::mutex mutex;
+
+ typedef boost::act::interlocked::uint_least8_t uint_least8_t;
+
+ std::multiset< uint_least8_t > old_values
+ ( boost::begin( random_uint8 ), boost::end( random_uint8 ) );
+
+ uint_least8_t test_var = 0;
+
+ old_values.insert( test_var );
+
+ BOOST_FOREACH( uint_least8_t val, random_uint8 )
+ {
+ thread_group.add_thread
+ ( new boost::thread( make_perform_assign( old_values, mutex, barrier
+ , assign, test_var, val
+ )
+ )
+ );
+ }
+
+ thread_group.join_all();
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,15 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+// Note: These tests could be a little bit better. Currently testing is done by
+// forcing compound CAS operations to use their default implementation
+// (which is to internally use assign_if_was).
+
+#define BOOST_ACT_INTERLOCKED_FORCE_DEFAULTS
+
+#include "../add_assign/add_assign.cpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_acquire.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_acquire.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,15 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+// Note: These tests could be a little bit better. Currently testing is done by
+// forcing compound CAS operations to use their default implementation
+// (which is to internally use assign_if_was).
+
+#define BOOST_ACT_INTERLOCKED_FORCE_DEFAULTS
+
+#include "../add_assign/add_assign_acquire.cpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,171 @@
+/*=============================================================================
+ 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_IF_WAS_HELPER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_ASSIGN_IF_WAS_HELPER_HPP
+
+#include <boost/test/minimal.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/xtime.hpp>
+#include <boost/act/interlocked/assign.hpp>
+#include <boost/act/interlocked/integer.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+// Note: Logic of how test will be performed (any better ideas?):
+//
+// Start with a non-volatile variable.
+//
+// Create a separate thread, in new thread, set value with
+// interlocked::assign
+//
+// In primary thread, wait several seconds to give the opposing thread
+// a decent amount of time to set the value, then yield,
+// then use retrieve.
+//
+// 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_retrieve_no_threads( GetType get, SetType set )
+{
+ using namespace boost::act::interlocked;
+
+ int_fast8_t test_var = 0;
+
+ set( test_var, 5 );
+ BOOST_CHECK( get( test_var ) == 5 );
+
+ set( test_var, -20 );
+ BOOST_CHECK( get( test_var ) == -20 );
+ BOOST_CHECK( get( test_var ) == -20 );
+
+ set( test_var, 112 );
+ set( test_var, 36 );
+ BOOST_CHECK( get( test_var ) == 36 );
+ BOOST_CHECK( get( test_var ) == 36 );
+
+ set( test_var, -14 );
+ BOOST_CHECK( get( test_var ) == -14 );
+}
+
+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 >
+ void operator ()( VariableType& var, SourceType new_val ) const
+ {
+ boost::act::interlocked::assign( var, new_val );
+ }
+};
+
+struct interlocked_retrieve_get
+{
+ template< typename VariableType >
+ typename boost::remove_cv< VariableType >::type
+ operator ()( VariableType& var ) const
+ {
+ return boost::act::interlocked::retrieve( var );
+ }
+};
+
+template< typename VariableType, typename SourceType
+ , typename GetType, typename SetType
+ >
+class assign_thread_fun
+{
+public:
+ assign_thread_fun( VariableType& var_init, SourceType new_val_init
+ , GetType get_init, SetType set_init
+ )
+ : var_m( var_init ), new_val_m( new_val_init )
+ , get_m( get_init ), set_m( set_init ) {}
+public:
+ void operator ()() const
+ {
+ set_m( var_m, new_val_m );
+ }
+private:
+ VariableType& var_m,
+ new_val_m;
+ GetType get_m;
+ SetType set_m;
+};
+
+template< typename VariableType, typename SourceType
+ , typename GetType, typename SetType
+ >
+assign_thread_fun< VariableType, SourceType, GetType, SetType >
+make_assign_thread_fun( VariableType& var_init, SourceType new_val_init
+ , GetType get, SetType set_init
+ )
+{
+ return assign_thread_fun< VariableType, SourceType, GetType, SetType >
+ ( var_init, new_val_init
+ , get, set_init
+ );
+}
+
+template< typename VariableType, typename SourceType
+ , typename GetType, typename SetType
+ >
+void assign_in_new_thread( VariableType& var, SourceType new_val
+ , GetType get, SetType set
+ )
+{
+ boost::thread( make_assign_thread_fun( var, new_val, get, set ) );
+
+ boost::xtime time_of_completion;
+
+ boost::xtime_get( &time_of_completion, boost::TIME_UTC );
+
+ time_of_completion.sec += 2;
+
+ boost::thread::sleep( time_of_completion );
+
+ boost::thread::yield();
+
+ BOOST_CHECK( get( var ) == new_val );
+}
+
+template< typename GetType, typename SetType >
+void test_assign_retrieve_with_threads( GetType get, SetType set )
+{
+ using namespace boost::act::interlocked;
+
+ int_fast8_t test_var = 0;
+
+ assign_in_new_thread( test_var, 5, get, set );
+ assign_in_new_thread( test_var, -20, get, set );
+ assign_in_new_thread( test_var, 112, get, set );
+ assign_in_new_thread( test_var, 36, get, set );
+ assign_in_new_thread( test_var, -14, get, set );
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_release.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_release.cpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,15 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+// Note: These tests could be a little bit better. Currently testing is done by
+// forcing compound CAS operations to use their default implementation
+// (which is to internally use assign_if_was).
+
+#define BOOST_ACT_INTERLOCKED_FORCE_DEFAULTS
+
+#include "../add_assign/add_assign_release.cpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_retrieve_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_retrieve_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,158 @@
+/*=============================================================================
+ 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_RETRIEVE_HELPER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_ASSIGN_RETRIEVE_HELPER_HPP
+
+#include <boost/test/minimal.hpp>
+#include <boost/act/interlocked/retrieve.hpp>
+#include <boost/act/interlocked/assign/assign_result.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_retrieve_no_threads( GetType get, SetType set )
+{
+ using namespace boost::act::interlocked;
+
+ uint_least8_t test_var = 0;
+
+ BOOST_FOREACH( 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::act::interlocked::assign_result< VariableType >::type
+ operator ()( VariableType& var, SourceType new_val ) const
+ {
+ return boost::act::interlocked::assign( var, new_val );
+ }
+};
+
+struct interlocked_retrieve_get
+{
+ template< typename VariableType >
+ typename boost::remove_cv< VariableType >::type
+ operator ()( VariableType& var ) const
+ {
+ return boost::act::interlocked::retrieve( 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_retrieve_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/bitand_assign/bitand_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/bitand_assign/bitand_assign.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#include <boost/test/minimal.hpp>
+#include "../operation_result_checker.hpp"
+#include <boost/act/interlocked/bitand_assign.hpp>
+#include <boost/act/interlocked/bitand_assign/bitand_assign_result.hpp>
+
+struct interlocked_bitand_assign
+{
+ template< typename LeftType, typename RightType >
+ typename boost::act::interlocked::bitand_assign_result< LeftType >::type
+ operator ()( LeftType& left, RightType const& right ) const
+ {
+ return boost::act::interlocked::bitand_assign( left, right );
+ }
+};
+
+int test_main( int, char *[] )
+{
+ brute_operation_result_checker( basic_bitand()
+ , interlocked_bitand_assign()
+ );
+/*
+ brute_additive_assign_test( basic_add_assign()
+ , BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+ ()
+ );
+*/
+ return 0;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/integral_additive_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/integral_additive_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,135 @@
+/*=============================================================================
+ 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_INTEGRAL_ADDITIVE_HELPER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_INTEGRAL_ADDITIVE_HELPER_HPP
+
+#include <boost/test/minimal.hpp>
+#include <boost/foreach.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/barrier.hpp>
+#include <boost/integer_traits.hpp>
+
+#include "../random_uint8.hpp"
+
+/*
+Logic for additive tests:
+
+Initialize an unsigned value.
+
+Create a table with N random values.
+
+Create N threads, with each one an assigned value from the table.
+
+All threads approach a barrier after which they all perform their operation
+
+Join all threads.
+
+Compare new value with the value it should be.
+
+*/
+
+struct basic_add_assign
+{
+ template< typename LeftType, typename RightType >
+ void operator ()( LeftType& left, RightType const& right ) const
+ {
+ left += right;
+ }
+};
+
+struct basic_subtract_assign
+{
+ template< typename LeftType, typename RightType >
+ void operator ()( LeftType& left, RightType const& right ) const
+ {
+ left -= right;
+ }
+};
+
+template< typename BarrierType, typename OperationType
+ , typename DestinationType, typename OperandType
+ >
+class perform_operation
+{
+public:
+ perform_operation( BarrierType& barrier_init, OperationType operation_init
+ , DestinationType& destination_init, OperandType operand_init
+ )
+ : barrier_m( barrier_init ), operation_m( operation_init )
+ , destination_m( destination_init ), operand_m( operand_init ) {}
+public:
+ void operator ()() const
+ {
+ barrier_m.wait(); // Wait until all other perform_operation are ready
+
+ operation_m( destination_m, operand_m );
+ }
+private:
+ BarrierType& barrier_m;
+ OperationType operation_m;
+ DestinationType& destination_m;
+ OperandType operand_m;
+};
+
+template< typename BarrierType, typename OperationType
+ , typename DestinationType, typename OperandType
+ >
+perform_operation< BarrierType, OperationType
+ , DestinationType, OperandType
+ >
+make_perform_operation( BarrierType& barrier, OperationType operation
+ , DestinationType& destination, OperandType operand
+ )
+{
+ return perform_operation< BarrierType, OperationType
+ , DestinationType, OperandType
+ >
+ ( barrier, operation
+ , destination, operand
+ );
+}
+
+template< typename SingleThreadOperationType, typename OperationType >
+void brute_additive_assign_test( SingleThreadOperationType single_thread_op
+ , OperationType operation
+ )
+{
+ boost::barrier barrier( static_cast< unsigned int >( random_uint8.size() ) );
+
+ boost::thread_group thread_group;
+
+ typedef boost::act::interlocked::uint_least8_t uint_least8_t;
+ typedef boost::act::interlocked::uint_least32_t uint_least32_t;
+
+ uint_least32_t test_var
+ = boost::integer_traits< uint_least32_t >::const_max / 2,
+ test_var_copy = test_var;
+
+ BOOST_FOREACH( uint_least8_t val, random_uint8 )
+ {
+ thread_group.add_thread
+ ( new boost::thread( make_perform_operation( barrier, operation
+ , test_var, val
+ )
+ )
+ );
+ }
+
+ thread_group.join_all();
+
+ BOOST_FOREACH( uint_least8_t val, random_uint8 )
+ {
+ single_thread_op( test_var_copy, val );
+ }
+
+ BOOST_CHECK( boost::act::interlocked::retrieve( test_var ) == test_var_copy );
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/operation_result_checker.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/operation_result_checker.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,81 @@
+/*=============================================================================
+ 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_OPERATION_RESULT_CHECKER_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_OPERATION_RESULT_CHECKER_HPP
+
+/*
+Note: The template in this file only checks for proper result functionality.
+ It is not a multithreaded test for checking the application of interlocked
+ operations in a multithreaded environment.
+*/
+
+#include <boost/test/minimal.hpp>
+#include <boost/foreach.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+
+#include "../random_uint8.hpp"
+
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( name, op ) \
+struct BOOST_PP_CAT( basic_, name ) \
+{ \
+ template< typename LeftType, typename RightType > \
+ LeftType operator ()( LeftType const& left, RightType const& right ) const \
+ { \
+ return static_cast< LeftType >( left op right ); \
+ } \
+};
+
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( add, + )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( subtract, - )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( multiply, * )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( divide, / )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( mod, % )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( bitand, & )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( bitor, | )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( xor, ^ )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( lshift, << )
+BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP( rshift, >> )
+
+#undef BOOST_ACT_TEST_DETAIL_BASIC_BINARY_OP
+
+template< typename ValueType, typename ResultType >
+void check_operation_results( ValueType old_value, ValueType expected_value
+ , ResultType result
+ )
+{
+ ValueType const result_old_value = result.old_value(),
+ result_new_value = result.new_value();
+
+ BOOST_CHECK( result_old_value == old_value );
+ BOOST_CHECK( result_new_value == expected_value );
+}
+
+
+template< typename SingleThreadOperationType, typename OperationType >
+void brute_operation_result_checker( SingleThreadOperationType single_thread_op
+ , OperationType operation
+ )
+{
+ typedef boost::act::interlocked::uint_least8_t uint_least8_t;
+
+ uint_least8_t test_var = 0;
+
+ BOOST_FOREACH( uint_least8_t val, random_uint8 )
+ {
+ uint_least8_t const copy = test_var;
+
+ check_operation_results( copy, single_thread_op( copy, val )
+ , operation( test_var, val )
+ );
+ }
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/random_uint8.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/random_uint8.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ 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_RANDOM_UINT8_HPP
+#define BOOST_ACT_TEST_INTERLOCKED_RANDOM_UINT8_HPP
+
+#include <boost/array.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+
+boost::array< boost::act::interlocked::uint_least8_t, 64 > const random_uint8
+ = { 38, 71, 69, 12, 13
+ , 90, 97, 52, 47, 14
+ , 46, 21, 27, 18, 12
+ , 49, 69, 22, 91, 101
+ , 117, 29, 120, 105, 95
+ , 14, 41, 25, 109, 114
+ , 101, 100, 83, 56, 104
+ , 113, 22, 122, 108, 127
+ , 14, 85, 11, 97, 67
+ , 63, 32, 57, 99, 106
+ , 8, 49, 27, 82, 43
+ , 56, 126, 127, 123, 37
+ , 25, 23, 102, 82
+ };
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/retrieve.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/retrieve.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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 "assign_retrieve_helper.hpp"
+#include <boost/thread/barrier.hpp>
+
+int test_main( int, char *[] )
+{
+ test_assign_retrieve_no_threads( interlocked_retrieve_get()
+ , single_thread_basic_set()
+ );
+
+ test_assign_retrieve_no_threads( interlocked_retrieve_get()
+ , interlocked_assign_set()
+ );
+
+ {
+ boost::barrier barrier( 2 );
+
+ test_assign_retrieve_with_threads( barrier
+ , interlocked_retrieve_get()
+ , interlocked_assign_set()
+ );
+ }
+
+ return 0;
+}

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME subtract_assign
+
+#include "subtract_assign_helper.hpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_acquire.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_acquire.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME subtract_assign_acquire
+
+#include "subtract_assign_helper.hpp"

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_helper.hpp 2007-06-15 19:59:39 EDT (Fri, 15 Jun 2007)
@@ -0,0 +1,50 @@
+/*=============================================================================
+ 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_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_HELPER
+#define BOOST_ACT_TEST_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_HELPER
+
+#include "../integral_additive_helper.hpp"
+#include "../operation_result_checker.hpp"
+#include <boost/act/interlocked/subtract_assign.hpp>
+#include <boost/act/interlocked/subtract_assign/subtract_assign_result.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+struct BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+{
+ template< typename LeftType, typename RightType >
+ typename boost::act::interlocked::subtract_assign_result< LeftType >::type
+ operator ()( LeftType& left, RightType const& right ) const
+ {
+ return boost::act::interlocked::BOOST_ACT_TEST_INTERLOCKED_NAME
+ ( left, right );
+ }
+};
+
+int test_main( int, char *[] )
+{
+ brute_operation_result_checker( basic_subtract()
+ , BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+ ()
+ );
+
+ brute_additive_assign_test( basic_subtract_assign()
+ , BOOST_PP_CAT( interlocked_
+ , BOOST_ACT_TEST_INTERLOCKED_NAME
+ )
+ ()
+ );
+
+ return 0;
+}
+
+#endif

Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_release.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/subtract_assign/subtract_assign_release.cpp 2007-06-15 19:59:39 EDT (Fri, 15 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)
+==============================================================================*/
+
+#define BOOST_ACT_TEST_INTERLOCKED_NAME subtract_assign_release
+
+#include "subtract_assign_helper.hpp"


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