|
Boost-Commit : |
From: matt_calabrese_at_[hidden]
Date: 2007-07-04 02:01:27
Author: matt_calabrese
Date: 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
New Revision: 7354
URL: http://svn.boost.org/trac/boost/changeset/7354
Log:
Fixed integer typedefs (should now automatically generate typedefs correctly). Did a lot of cleanup of headers and some reorganization.
Added:
sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_int.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_lock_free.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_natural.hpp
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/extending_support.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/checking_support.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/extending_support.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/checking_support.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/extending_support.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/example/multiply_assign.cpp
Properties modified:
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/ (props changed)
Text files modified:
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default | 53 ++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_dont_include.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp | 114 -----------------
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp | 6
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/interlocked_operand_validators.hpp | 89 +++++++++++--
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/selection.hpp | 252 +++++++++++++++++++++++++++++++--------
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/integer/types.hpp | 110 +++++-----------
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp | 1
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp | 1
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp | 1
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp | 1
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked.hpp | 18 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp | 18 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_bool.hpp | 36 +++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_integer.hpp | 71 +++++++++++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/HTML.manifest | 3
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked.html | 22 +++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html | 21 ++-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html | 28 ++-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html | 23 ++-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_operation.html | 181 +++++++++++++++++++++++++++-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_type.html | 20 ++-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/rationale.html | 53 +++++++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/index.html | 24 +++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked.qbk | 1
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_arithmetic_type.qbk | 4
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_integer_type.qbk | 6
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_natural_type.qbk | 6
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_operation.qbk | 42 ++++++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_type.qbk | 5
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/rationale.qbk | 34 +++++
66 files changed, 960 insertions(+), 356 deletions(-)
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_int.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_int.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 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_HAS_INT_HPP
+#define BOOST_ACT_INTERLOCKED_HAS_INT_HPP
+
+#include <boost/act/interlocked/detail/cas_support.hpp>
+
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/if.hpp>
+
+#include <boost/preprocessor/comparison/greater_equal.hpp>
+#include <boost/preprocessor/logical/bitor.hpp>
+#include <boost/preprocessor/seq/filter.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_INT_LEAST_PREDICATE( s,num_bits,elem )\
+BOOST_PP_BITOR \
+( BOOST_PP_EQUAL( elem, 0 ) \
+, BOOST_PP_GREATER_EQUAL( elem, num_bits ) \
+)
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_HAS_INT_PREDICATE( s,num_bits,elem ) \
+BOOST_PP_BITOR \
+( BOOST_PP_EQUAL( elem, 0 ) \
+, BOOST_PP_EQUAL( elem, num_bits ) \
+)
+
+#define BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( num_bits ) \
+BOOST_PP_GREATER_EQUAL \
+( BOOST_PP_SEQ_SIZE \
+ ( BOOST_PP_SEQ_FILTER( BOOST_ACT_INTERLOCKED_DETAIL_HAS_INT_LEAST_PREDICATE \
+ , num_bits \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ(0) \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_ACT_INTERLOCKED_HAS_UINT_LEAST( num_bits ) \
+BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( num_bits )
+
+#define BOOST_ACT_INTERLOCKED_HAS_INT( num_bits ) \
+BOOST_PP_GREATER_EQUAL \
+( BOOST_PP_SEQ_SIZE \
+ ( BOOST_PP_SEQ_FILTER( BOOST_ACT_INTERLOCKED_DETAIL_HAS_INT_PREDICATE \
+ , num_bits \
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ(0) \
+ ) \
+ ) \
+, 2 \
+)
+
+#define BOOST_ACT_INTERLOCKED_HAS_UINT( num_bits ) \
+BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( num_bits )
+
+#else
+
+#define BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( num_bits ) 0
+#define BOOST_ACT_INTERLOCKED_HAS_UINT_LEAST( num_bits ) 0
+
+#define BOOST_ACT_INTERLOCKED_HAS_INT( num_bits ) 0
+#define BOOST_ACT_INTERLOCKED_HAS_UINT( num_bits ) 0
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_lock_free.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has_lock_free.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,12 @@
+/*=============================================================================
+ Copyright (c) 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_HAS_LOCK_FREE_HPP
+#define BOOST_ACT_INTERLOCKED_HAS_LOCK_FREE_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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -20,7 +20,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acq_rel_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_acquire_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/type_traits/remove_cv.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_release_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_unordered_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,53 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQ_REL_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_ACQ_REL_DEF_HPP
+
+// Note: This file is only entered if there is assign_if_was< acq_rel > support
+
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/act/interlocked/modify/modify_acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+template< typename Type >
+struct assign_acq_rel_fun
+{
+public:
+ assign_acq_rel_fun( Type const& right_init ) : right_m( right_init ) {}
+public:
+ template< typename LeftType >
+ Type operator ()( LeftType& ) const
+ {
+ return right_m;
+ }
+private:
+ Type const& right_m;
+};
+
+template< typename Type >
+assign_acq_rel_fun< typename remove_volatile< Type >::type >
+make_assign_acq_rel_fun( Type const& right )
+{
+ return assign_acq_rel_fun< typename remove_volatile< Type >::type >( right );
+}
+
+struct assign_acq_rel_default_impl
+{
+ template< typename Type >
+ static typename remove_volatile< Type >::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ return modify< acq_rel >( left, make_assign_acq_rel_fun( right ) );
+ }
+};
+
+} } } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -20,7 +20,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -20,7 +20,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/act/interlocked/decrement/decrement_acq_rel.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/decrement/decrement_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/type_traits/remove_cv.hpp>
Modified: 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_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_dont_include.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/act/interlocked/semantics.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/cat.hpp>
Modified: 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_forwarder_fwd_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/binary_forwarder_fwd_dont_include.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/act/interlocked/semantics.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/and.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -15,7 +15,6 @@
#ifdef BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
#include <climits>
-#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/mpl/or.hpp>
@@ -71,8 +70,8 @@
#else
#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
-( ( assign, ( acq_rel ) ) ) \
-( ( assign_if_was, ( acq_rel ) ) ) \
+( ( assign, ( acq_rel ) ) ) \
+( ( assign_if_was, ( acq_rel ) ) ) \
( ( load, ( acquire ) ) ) \
( ( store, ( release ) ) )
@@ -176,7 +175,7 @@
, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_, semantics ) \
) \
, BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
- ((0,(unordered)(acquire)(release)(acq_rel))) \
+ ((0,(unordered)(acquire)(release)(acq_rel))) \
) \
) \
, 2 \
@@ -227,113 +226,6 @@
, BOOST_PP_CAT( BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_, desired_name ) \
)
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO(r,data,elem) \
-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
- >
-struct are_valid_arithmetic_params
- : mpl::or_
- <
- BOOST_PP_SEQ_FOR_EACH
- ( BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO
- , ~
- , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ
- )
- mpl::true_
- >
-{
-};
-
-// 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
- >
-struct are_valid_store_style_params
- : mpl::or_< are_valid_arithmetic_params< LeftOperand, RightOperand
- , ComparisonType
- >
- , are_valid_pointer_params< LeftOperand, RightOperand
- , ComparisonType
- >
- , are_valid_bool_params< LeftOperand, RightOperand
- , ComparisonType
- >
- > {};
-
-#undef BOOST_ACT_INTERLOCKED_DETAIL_ADDITIVE_PARAMS_BASE_MACRO
-#undef BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO
-
-} } } }
-
-#else // Else: No CAS support defined
-
-#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/apply.hpp>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-template< typename LeftOperand, typename RightOperand = LeftOperand
- , typename ComparisonType = LeftOperand
- >
-struct are_valid_arithmetic_params
- : mpl::false_
-{
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , INTERLOCKED_OPERATIONS_NOT_DEFINED_FOR_THIS_SYSTEM
- , ()
- );
-};
-
-template< typename LeftOperand, typename RightOperand = LeftOperand
- , typename ComparisonType = LeftOperand
- >
-struct are_valid_store_style_params
- : mpl::false_
-{
-
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , INTERLOCKED_OPERATIONS_NOT_DEFINED_FOR_THIS_SYSTEM
- , ()
- );
-
-};
-
-
-} } } }
-
#endif
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -78,11 +78,11 @@
// Where semantic_sequence is a sequence whose elements are each one of:
// acquire, meanining there is an implementation for acquire semantics
// -or-
-// release, meanining there is an one for release semantics
+// release, meanining there is one for release semantics
// -or-
-// acq_rel, meanining there is one for full barrier semantics
+// acq_rel, meanining there is one for combined acquire/release semantics
// -or-
-// unordered, meanining there is no specific ordering required
+// unordered, meanining there is one for unordered semantics
//
//
// Because of the heavy branching and use of macros that occur in practice, it
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -6,24 +6,22 @@
http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
+// ToDo: Fix to work with interlocked pointers correctly.
+
#ifndef BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_OPERAND_VALIDATORS_HPP
#define BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_OPERAND_VALIDATORS_HPP
#include <climits>
-#if CHAR_BIT == 8
-
-// ToDo: Change
-#include <boost/act/interlocked/integer/has_interlocked_operations.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
-// #include <boost/act/interlocked/integer/is_interlocked_type.hpp>
-// #include <boost/act/interlocked/integer/is_interlocked_arithmetic_type.hpp>
-// #include <boost/act/interlocked/integer/is_interlocked_integer_type.hpp>
+#if CHAR_BIT == 8
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/act/interlocked/integer/detail/convert_interlocked_bool_operand_to_bool.hpp>
-
-#include <boost/detail/interlocked.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_bool.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_integer.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/and.hpp>
@@ -47,9 +45,7 @@
struct are_valid_arithmeticn_params
: mpl::and_
<
- mpl::and_< has_interlocked_operations< TargetType >
- , is_integral< TargetType >
- , mpl::bool_< ( sizeof( TargetType ) == NumBytes ) >
+ mpl::and_< is_interlocked_integer< TargetType >
, mpl::not_< is_const< TargetType > >
>
, is_convertible< SourceType const, TargetType >
@@ -65,7 +61,7 @@
are_valid_arithmeticn_params< NumBytes, TargetType, SourceType >
, mpl::and_
<
- act::detail::is_nonfunction_pointer< TargetType >
+ act::detail::is_nonfunction_pointer< TargetType > // ToDo: Change
, mpl::bool_< ( sizeof( TargetType ) == NumBytes ) >
, mpl::not_< is_const< TargetType > >
, is_convertible< SourceType const, std::ptrdiff_t >
@@ -78,8 +74,8 @@
struct are_valid_pointer_params
: mpl::and_
<
- mpl::and_< has_interlocked_operations< TargetType >
- , act::detail::is_nonfunction_pointer< TargetType >
+ // ToDo: Change
+ mpl::and_< act::detail::is_nonfunction_pointer< TargetType >
, mpl::not_< is_const< TargetType > >
>
, is_convertible< SourceType const, TargetType >
@@ -92,8 +88,7 @@
struct are_valid_bool_params
: mpl::and_
<
- mpl::and_< has_interlocked_operations< TargetType >
- , detail::is_interlocked_bool< TargetType >
+ mpl::and_< interlocked::is_interlocked_bool< TargetType >
, mpl::not_< is_const< TargetType > >
>
, mpl::or_< is_convertible< SourceType const, bool >
@@ -104,6 +99,66 @@
>
> {};
+#define BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO(r,data,elem) \
+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
+ >
+struct are_valid_arithmetic_params
+ : mpl::or_
+ <
+ BOOST_PP_SEQ_FOR_EACH
+ ( BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO
+ , ~
+ , BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ
+ )
+ mpl::true_
+ >
+{
+};
+
+// 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
+ >
+struct are_valid_store_style_params
+ : mpl::or_< are_valid_arithmetic_params< LeftOperand, RightOperand
+ , ComparisonType
+ >
+ , are_valid_pointer_params< LeftOperand, RightOperand
+ , ComparisonType
+ >
+ , are_valid_bool_params< LeftOperand, RightOperand
+ , ComparisonType
+ >
+ > {};
+
+#undef BOOST_ACT_INTERLOCKED_DETAIL_ADDITIVE_PARAMS_BASE_MACRO
+#undef BOOST_ACT_INTERLOCKED_DETAIL_ARITHMETIC_PARAMS_BASE_MACRO
+
} } } }
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_dont_include.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -16,7 +16,7 @@
#include <boost/type_traits/remove_volatile.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/unary_forwarder_fwd_dont_include.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -15,7 +15,7 @@
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/act/interlocked/semantics.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -20,7 +20,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/act/interlocked/increment/increment_acq_rel.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/increment/increment_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/type_traits/remove_cv.hpp>
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -9,64 +9,194 @@
#ifndef BOOST_ACT_INTERLOCKED_INTEGER_SELECTION_HPP
#define BOOST_ACT_INTERLOCKED_INTEGER_SELECTION_HPP
-#include <boost/act/config/interlocked/has_interlocked_operations.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
-#ifdef BOOST_ACT_HAS_INTERLOCKED_OPERATIONS
-
-#include <boost/config.hpp>
-
-#if defined( BOOST_WINDOWS ) && defined( BOOST_MSVC )
+#ifdef BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT
+#include <climits>
#include <cstddef>
-#include <boost/integer.hpp>
+#include <boost/cstdint.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/is_signed.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/identity.hpp>
#include <boost/mpl/empty_base.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/mpl/filter_view.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+//#include <boost/act/interlocked/type_traits/is_interlocked.hpp>
+#include <boost/mpl/size_t.hpp>
namespace boost { namespace act { namespace interlocked {
namespace detail
{
-struct type_too_large;
-}
+#ifdef BOOST_NO_INT64_T
+typedef mpl::vector< signed char, short, int, long >
+ int_types_all;
-#if WINVER < 0x0600
+typedef mpl::vector< unsigned char, unsigned short, unsigned int
+ , unsigned long > uint_types_all;
-// fast integers from least integers
-template< typename LeastInt >
-struct int_fast_t
+typedef mpl::vector< int_fast8_t, int_fast16_t, int_fast32_t >
+ int_fast_types_all;
+
+typedef mpl::vector< uint_fast8_t, uint_fast16_t, uint_fast32_t >
+ uint_fast_types_all;
+#else
+typedef mpl::vector< signed char, short, int, long, int64_t >
+ int_types_all;
+
+typedef mpl::vector< unsigned char, unsigned short, unsigned int
+ , unsigned long, uint64_t > uint_types_all;
+
+typedef mpl::vector< int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t >
+ int_fast_types_all;
+
+typedef mpl::vector< uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t >
+ uint_fast_types_all;
+#endif
+
+template< typename Type, typename DesiredSizeInBits >
+struct int_type_is_size_in_bits
+ : mpl::bool_< ( Type::value == DesiredSizeInBits::value ) > {};
+
+template< typename Type >
+struct type_is_native_interlocked_size
{
private:
- BOOST_MPL_ASSERT_MSG( is_integral< LeastInt >::value
- , ARGUMENTS_TO_INT_FAST_T_MUST_BE_INTEGRAL
- , ( LeastInt )
- );
+ typedef mpl::vector_c
+ < std::size_t
+ , BOOST_PP_SEQ_ENUM( BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_SEQ )
+ >
+ supported_sizes;
+
+ typedef typename mpl::find_if
+ < supported_sizes
+ , int_type_is_size_in_bits
+ < mpl::_1
+ , mpl::size_t< ( sizeof( Type ) * CHAR_BIT ) >
+ >
+ >
+ ::type it;
+
+ typedef typename mpl::end< supported_sizes >::type end_it;
public:
- typedef typename mpl::eval_if_c
- <
- ( sizeof( LeastInt ) <= 4 )
- , mpl::if_< is_signed< LeastInt >
- , long
- , unsigned long
- >
- , mpl::identity< detail::type_too_large >
+ typedef mpl::not_< is_same< it, end_it > > type;
+};
+
+typedef mpl::filter_view< int_types_all
+ , type_is_native_interlocked_size< mpl::_1 >
+ >
+ int_types;
+
+typedef mpl::filter_view< uint_types_all
+ , type_is_native_interlocked_size< mpl::_1 >
+ >
+ uint_types;
+
+typedef mpl::filter_view< int_fast_types_all
+ , type_is_native_interlocked_size< mpl::_1 >
+ >
+ int_fast_types;
+
+typedef mpl::filter_view< uint_fast_types_all
+ , type_is_native_interlocked_size< mpl::_1 >
+ >
+ uint_fast_types;
+
+template< typename Type, typename DesiredSize >
+struct int_type_is_at_least_size
+ : mpl::bool_< ( sizeof( Type ) >= DesiredSize::value ) > {};
+
+template< typename TypeSequence, std::size_t LeastSize >
+struct int_type_selector
+{
+private:
+ typedef typename mpl::find_if
+ < TypeSequence
+ , int_type_is_at_least_size< mpl::_1, mpl::size_t< LeastSize > >
>
- ::type fast;
+ ::type it_to_type;
+
+ typedef typename mpl::end< TypeSequence >::type end;
+public:
+ typedef mpl::not_< is_same< it_to_type, end > > match;
+
+ typedef typename mpl::eval_if
+ < match
+ , mpl::deref< it_to_type >
+ , mpl::identity< mpl::void_ >
+ >
+ ::type type;
+};
+
+template< bool Signed >
+struct int_type_sequence
+{
+ typedef typename mpl::if_c< Signed, int_types, uint_types >
+ ::type sequence;
+
+ typedef typename mpl::if_c< Signed
+ , int_fast_types
+ , uint_fast_types
+ >
+ ::type fast_sequence;
+};
+
+template< bool Signed, std::size_t Bytes, bool PreferFast >
+struct int_t_impl
+{
private:
- BOOST_MPL_ASSERT_MSG( (mpl::not<is_same<fast,detail::type_too_large> >::value)
- , TYPE_TOO_LARGE_FOR_INTERLOCKED_SUPPORT
- , ( LeastInt )
+ typedef typename int_type_sequence< Signed >::sequence sequence;
+ typedef typename int_type_sequence< Signed >::fast_sequence fast_sequence;
+
+ typedef detail::int_type_selector< fast_sequence, Bytes >
+ fast_selector;
+
+ typedef detail::int_type_selector< sequence, Bytes >
+ small_selector;
+
+ typedef typename mpl::if_c< PreferFast, fast_selector, small_selector >
+ ::type pref_selector;
+
+ typedef typename mpl::if_c< PreferFast, small_selector, fast_selector >
+ ::type fall_selector;
+
+ typedef typename pref_selector::match pref_match;
+ typedef typename fall_selector::match fall_match;
+public:
+ typedef typename mpl::eval_if
+ < pref_match
+ , pref_selector
+ , mpl::eval_if< fall_match
+ , fall_selector
+ , mpl::identity< mpl::void_ >
+ >
+ >
+ ::type type;
+private:
+ BOOST_MPL_ASSERT_MSG( ( mpl::not_< is_same< type, mpl::void_ > >::value )
+ , TYPE_HAS_NO_INTERLOCKED_SUPPORT
+ , ()
);
};
-#else
+}
// fast integers from least integers
template< typename LeastInt >
@@ -78,31 +208,44 @@
, ( LeastInt )
);
public:
- typedef typename mpl::eval_if_c
+ typedef typename detail::int_t_impl
<
- ( sizeof( LeastInt ) <= 4 )
- , mpl::if_< is_signed< LeastInt >
- , long
- , unsigned long
- >
- , mpl::eval_if_c< ( sizeof( LeastInt ) <= 8 )
- , mpl::if_< is_signed< LeastInt >
- , long long
- , unsigned long long
- >
- , mpl::identity< detail::type_too_large >
- >
+ is_signed< LeastInt >::value
+ , sizeof( LeastInt )
+ , true // Prefer fast over least
>
::type fast;
-private:
- BOOST_MPL_ASSERT_MSG( (mpl::not<is_same<fast,detail::type_too_large> >::value)
- , TYPE_TOO_LARGE_FOR_INTERLOCKED_SUPPORT
- , ( LeastInt )
- );
};
-#endif
+template< std::size_t Bits >
+struct int_t
+{
+ typedef typename detail::int_t_impl
+ <
+ true // Signed
+ , ( Bits / CHAR_BIT )
+ , false // Prefer least over fast
+ >
+ ::type least;
+
+ typedef typename int_fast_t< least >::fast fast;
+};
+
+template< std::size_t Bits >
+struct uint_t
+{
+ typedef typename detail::int_t_impl
+ <
+ false // Unsigned
+ , ( Bits / CHAR_BIT )
+ , false // Prefer least over fast
+ >
+ ::type least;
+
+ typedef typename int_fast_t< least >::fast fast;
+};
+/*
// signed
template< int Bits >
struct int_t
@@ -141,13 +284,14 @@
typedef typename boost::uint_value_t< Value >::least least;
typedef typename int_fast_t< least >::fast fast;
};
-
+*/
+/*
namespace detail
{
template< typename Type >
struct logical_type_of_impl
- : mpl::if_< is_interlocked_bool< Type >
+ : mpl::if_< is_interlocked< Type >
, bool
, Type
>
@@ -158,18 +302,16 @@
template< typename Type >
struct logical_type_of
- : mpl::if_< has_interlocked_operations< Type >
+ : mpl::if_< is_interlocked< Type >
, detail::logical_type_of_impl< Type >
, mpl::empty_base
>
::type
{
};
-
+*/
} } } // namespace boost
#endif
#endif
-
-#endif
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-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -9,103 +9,67 @@
#ifndef BOOST_ACT_INTERLOCKED_INTEGER_TYPES_HPP
#define BOOST_ACT_INTERLOCKED_INTEGER_TYPES_HPP
-#include <boost/act/config/interlocked/has_interlocked_operations.hpp>
+#include <boost/act/config/interlocked/has_int.hpp>
-//#ifdef BOOST_ACT_HAS_INTERLOCKED_OPERATIONS
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 1 )
-#include <boost/config.hpp>
-
-// ToDo: Add in toggles for 64-bit
-
-//#ifdef BOOST_WINDOWS
-
-#include <windows.h>
+#include <boost/act/interlocked/integer/selection.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
-#include <cstddef>
-namespace boost { namespace act { namespace interlocked {
+#endif
-typedef long int_fast8_t;
-typedef long int_fast16_t;
-typedef long int_fast32_t;
+namespace boost { namespace act { namespace interlocked {
-typedef unsigned long uint_fast8_t;
-typedef unsigned long uint_fast16_t;
-typedef unsigned long uint_fast32_t;
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 1 )
-typedef long short_t;
-typedef long int_t;
-typedef long long_t;
+// ToDo: Use native bool when supported.
+typedef detail::interlocked_bool< uint_t< 1 >::least > bool_least_t;
+typedef detail::interlocked_bool< uint_t< 1 >::fast > bool_fast_t;
-typedef unsigned long ushort_t;
-typedef unsigned long uint_t;
-typedef unsigned long ulong_t;
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 8 )
-typedef ::std::size_t size_t;
-typedef ::std::ptrdiff_t ptrdiff_t;
+typedef int_t< 8 >::fast int_fast8_t;
+typedef uint_t< 8 >::fast uint_fast8_t;
+typedef int_t< 8 >::least int_least8_t;
+typedef uint_t< 8 >::least uint_least8_t;
-//#if WINVER < 0x0600
-#if 1
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 16 )
-typedef unsigned long bits_least8_t;
-typedef unsigned long bits_least16_t;
-typedef unsigned long bits_least32_t;
+typedef int_t< 16 >::fast int_fast16_t;
+typedef uint_t< 16 >::fast uint_fast16_t;
+typedef int_t< 16 >::least int_least16_t;
+typedef uint_t< 16 >::least uint_least16_t;
-typedef unsigned long bits_fast8_t;
-typedef unsigned long bits_fast16_t;
-typedef unsigned long bits_fast32_t;
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 32 )
-typedef long int_least8_t;
-typedef long int_least16_t;
-typedef long int_least32_t;
+typedef int_t< 32 >::fast int_fast32_t;
+typedef uint_t< 32 >::fast uint_fast32_t;
+typedef int_t< 32 >::least int_least32_t;
+typedef uint_t< 32 >::least uint_least32_t;
-typedef unsigned long uint_least8_t;
-typedef unsigned long uint_least16_t;
-typedef unsigned long uint_least32_t;
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 64 )
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
+typedef int_t< 64 >::fast int_fast64_t;
+typedef uint_t< 64 >::fast uint_fast64_t;
+typedef int_t< 64 >::least int_least64_t;
+typedef uint_t< 64 >::least uint_least64_t;
-typedef detail::interlocked_bool< long > bool_t;
-typedef detail::interlocked_bool< long > bool_fast_t;
+typedef uint_fast64_t size_t; // ToDo: Change
#else
-typedef unsigned long bits_least8_t;
-typedef unsigned long bits_least16_t;
-typedef unsigned long bits_least32_t;
-typedef unsigned long long bits_least64_t;
-
-typedef unsigned long bits_fast8_t;
-typedef unsigned long bits_fast16_t;
-typedef unsigned long bits_fast32_t;
-typedef unsigned long long bits_fast64_t;
-
-typedef long int_least8_t;
-typedef long int_least16_t;
-typedef long int_least32_t;
-typedef long long int_least64_t;
-
-typedef unsigned long uint_least8_t;
-typedef unsigned long uint_least16_t;
-typedef unsigned long uint_least32_t;
-typedef unsigned long long uint_least64_t;
+typedef uint_fast32_t size_t; // ToDo: Change
-typedef long long int_fast64_t;
-typedef unsigned long long uint_fast64_t;
+#endif // End 64-bit
-typedef long long intmax_t;
-typedef unsigned long long uintmax_t;
+#endif // End 32-bit
-typedef detail::interlocked_bool< long > bool_t;
-typedef detail::interlocked_bool< long > bool_fast_t;
-
-#endif
+#endif // End 16-bit
-} } } // namespace boost
+#endif // End 8-bit
-//#endif
+#endif // End 1-bit
-//#endif
+} } }
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -13,6 +13,7 @@
#if BOOST_ACT_INTERLOCKED_HAS( load, acquire )
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_volatile.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -18,7 +18,7 @@
#include <boost/type_traits/remove_volatile.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_acquire_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -13,6 +13,7 @@
#if BOOST_ACT_INTERLOCKED_HAS( load, acquire )
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/semantics/acquire.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_volatile.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -13,6 +13,7 @@
#if BOOST_ACT_INTERLOCKED_HAS( load, acquire )
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_volatile.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -19,7 +19,7 @@
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_unordered_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -13,6 +13,7 @@
#if BOOST_ACT_INTERLOCKED_HAS( load, unordered )
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/semantics/unordered.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_volatile.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -15,7 +15,7 @@
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/store/store_release.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -15,7 +15,7 @@
#include <boost/utility/enable_if.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
namespace boost { namespace act { namespace interlocked {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_release_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/store_unordered_fwd.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -17,7 +17,7 @@
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
#include <boost/mpl/if.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 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_TYPE_TRAITS_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_HPP
+
+#include <boost/act/interlocked/type_traits/is_interlocked.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_bool.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_integer.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_semantics.hpp>
+#include <boost/act/interlocked/type_traits/is_interlocked_natural.hpp>
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,7 +1,21 @@
/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
+ Copyright (c) 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)
-==============================================================================*/
\ No newline at end of file
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_HPP
+
+#include <boost/act/interlocked/type_traits/is_interlocked_natural.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type >
+struct is_interlocked : is_interlocked_natural< Type > {};
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,7 +1,21 @@
/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
+ Copyright (c) 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)
-==============================================================================*/
\ No newline at end of file
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_ARITHMETIC_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_ARITHMETIC_HPP
+
+#include <boost/act/interlocked/type_traits/is_interlocked_integer.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type >
+struct is_interlocked_arithmetic : is_interlocked_integer< Type > {};
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_bool.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_bool.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_bool.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -4,4 +4,38 @@
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)
-==============================================================================*/
\ No newline at end of file
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_BOOL_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_BOOL_HPP
+
+#include <boost/act/config/interlocked/has_int.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS_INT( 1 )
+
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type >
+struct is_interlocked_bool
+ : mpl::or_< is_same< Type, bool_least_t >
+ , is_same< Type, bool_fast_t >
+ > {};
+
+} } }
+
+#else
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type > struct is_interlocked_bool : mpl::false_ {};
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_integer.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_integer.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_integer.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -4,4 +4,73 @@
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)
-==============================================================================*/
\ No newline at end of file
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_INTEGER_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_INTEGER_HPP
+
+#include <boost/act/config/interlocked/has_int.hpp>
+#include <boost/mpl/contains.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( 1 )
+
+#include <boost/act/interlocked/integer/types.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM( size ) \
+, BOOST_PP_CAT( BOOST_PP_CAT( int_least, size ), _t ) \
+, BOOST_PP_CAT( BOOST_PP_CAT( uint_least, size ), _t )
+
+#define BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_DUMMY( size )
+
+#define BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF( size ) \
+BOOST_PP_IF \
+( BOOST_ACT_INTERLOCKED_HAS_INT_LEAST( size ) \
+, BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM \
+, BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_DUMMY \
+) \
+( size )
+
+namespace boost { namespace act { namespace interlocked {
+
+namespace detail
+{
+
+typedef mpl::vector
+ < mpl::void_
+ BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF( 8 )
+ BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF( 16 )
+ BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF( 32 )
+ BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF( 64 )
+ >
+ interlocked_integer_sequence;
+
+#undef BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_IF
+#undef BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM_DUMMY
+#undef BOOST_ACT_INTERLOCKED_IS_INTERLOCKED_INTEGER_DETAIL_ELEM
+
+}
+
+template< typename Type >
+struct is_interlocked_integer
+ : mpl::contains< detail::interlocked_integer_sequence, Type > {};
+
+} } }
+
+#else
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type > struct is_interlocked_integer : mpl::false_ {};
+
+} } }
+
+#endif
+
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_natural.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/type_traits/is_interlocked_natural.hpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,21 @@
+/*=============================================================================
+ Copyright (c) 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_TYPE_TRAITS_IS_INTERLOCKED_NATURAL_HPP
+#define BOOST_ACT_INTERLOCKED_TYPE_TRAITS_IS_INTERLOCKED_NATURAL_HPP
+
+#include <boost/act/interlocked/type_traits/is_interlocked_arithmetic.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Type >
+struct is_interlocked_natural : is_interlocked_arithmetic< Type > {};
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/HTML.manifest
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/HTML.manifest (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/HTML.manifest 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -10,4 +10,7 @@
boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html
boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html
boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html
+boost_act/interlocked/interlocked_support.html
+boost_act/interlocked/interlocked_support/checking_support.html
+boost_act/interlocked/interlocked_support/extending_support.html
boost_act/rationale.html
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -134,6 +134,28 @@
</dt>
</dl>
</dd>
+ <dt>
+ <span class="section">
+ <a href="interlocked/interlocked_support.html">Interlocked
+ Support</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="section">
+ <a href="interlocked/interlocked_support/checking_support.html">Checking
+ Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="interlocked/interlocked_support/extending_support.html">Extending
+ Support</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</div>
<div class="box-bottom-left"></div>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/extending_support.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/extending_support.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extending Support</title><link rel="stylesheet" href="../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked.html" title="Interlocked" /><link rel="prev" href="interlocked_concepts/interlocked_integer_type.html" title="Interlocked Integer Type" /><link rel="next" href="../rationale.html" title="Rationale" /><script type="text/javascript" src="../../../../doc/javascript/main.js"></script>
+ <script type="text/javascript" > <!--
+ boostscript.init( new Array(
+ boostscript.nested_links,
+ boostscript.style_switcher,
+ boostscript.common
+ ),
+ '../../../../doc/javascript'
+ );
+ //--></script>
+
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'include_alternate_stylesheets',
+ '../../../../doc/style/html/syntax.xml',
+ '../../../../doc/style/html'
+ );
+ //--></script>
+<link rel="alternate stylesheet" type="text/css" title="Quickbook source" href="../../../../doc/style/html/conversion/boostbook_to_quickbook.css" />
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'load_user_stylesheet' );
+ //--></script>
+</head>
+ <body>
+ <div id="heading">
+ <div id="heading-placard"></div>
+ <div class="heading-navigation-box">
+ <div class="nested-links-select-box" id="chapters_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'chapters_select_box',
+ '../../../../doc/chapters.xml',
+ '../../../../libs');
+ //--></script>
+</div>
+ <div class="nested-links-select-box" id="sections_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'sections_select_box',
+ '../../sections.xml',
+ '../.././');
+ //--></script>
+</div>
+ </div>
+ <div class="search-box">
+ <form id="cref" action="http://google.com/cse">
+ <div class="search-box-label"></div>
+ <div>
+ <input type="hidden" name="cref" value="http://tinyurl.com/33np8c" />
+ <input class="search-box" type="text" name="q" id="q" size="40" maxlength="255" alt="Search Text" />
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_concepts/interlocked_integer_type.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="../rationale.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="body">
+ <div id="body-inner">
+ <div id="content">
+ <div class="section">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="boost_act.interlocked.extending_support"></a>Extending Support</h3>
+ </div>
+ </div>
+ </div>
+ <p>
+ In its current state, the interlocked portion of <code class="literal">Boost.Act</code>
+ is only implemented for Windows and for GCC targetting x86. I unfortunately
+ do no have the means to test other systems, so I must rely on the boost community
+ to contribute. I have done all that I can to make porting the implementation
+ to other systems as easy as possible. Most operations may be emulated in
+ a lock-free manner based on other operations, namely via assign_if_was, and
+ therefore the minimum amount of code required is fairly small. For details
+ on exacly how to port to other systems and the exact way that default implementations
+ are chosen, please see the documentation in the header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">implementation_info</span><span class="special">/</span><span class="identifier">operation_support</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>.
+ </p>
+ <p>
+ In future updates, I plan to use <code class="literal">Boost.Wave</code> to create
+ a table in this documentation which internally uses implementation header
+ files to present exactly which compilers and architectures are supported
+ and to what extent. This way, each rebuild of the documentation automatically
+ syncs up with the implemenation to give an accurate view of support. This
+ should make it much easier to see which operations are supported for your
+ system as a user, and also should make it easier for implementors to determine
+ if additions they make are correctly being picked (as running tests will
+ merely tell you if the test was successful, not if a native implementation
+ was used as opposed to one emulated with compare-and-swap).
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_concepts/interlocked_integer_type.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="../rationale.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="footer">
+ <div id="footer-left">
+ <div id="copyright">
+ <p>Copyright © 2006 , 2007 Matthew Calabrese</p>
+ </div>
+ <div id="license">
+ <p>Distributed under the
+ Boost Software License, Version 1.0.
+ </p>
+ </div>
+ </div>
+ <div id="footer-right">
+ <div id="banners">
+ <p id="banner-xhtml">
+ XHTML 1.0
+ </p>
+ <p id="banner-css">
+ CSS
+ </p>
+ <p id="banner-sourceforge">
+ SourceForge
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </body>
+</html>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.description"></a>
- <h6><a id="id459355"></a>
+ <h6><a id="id460555"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.description">Description</a>
</h6>
<p>
@@ -145,7 +145,7 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.refinement_of"></a>
- <h6><a id="id459565"></a>
+ <h6><a id="id460765"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.refinement_of">Refinement
of</a>
</h6>
@@ -154,7 +154,7 @@
<code class="literal">Interlocked Natural Type</code></a>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.expression_requirements"></a>
- <h6><a id="id459614"></a>
+ <h6><a id="id460814"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.expression_requirements">Expression
Requirements</a>
</h6>
@@ -206,7 +206,7 @@
</div>
</div>
<div class="table">
- <a id="id459824"></a>
+ <a id="id461026"></a>
<p class="title">
<b>Table 6. Interlocked Arithmetic Type Requirements</b>
</p>
@@ -323,7 +323,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.headers"></a>
- <h6><a id="id460344"></a>
+ <h6><a id="id461549"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.headers">Headers</a>
</h6>
<p>
@@ -335,10 +335,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id460366">
+ <div class="style-switcher-box" id="id461570">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id460366',
+ 'id461570',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -383,6 +383,13 @@
</div>
<p>
</p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.example"></a>
+ <h6><a id="id462452"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Put a code example here.
+ </p>
</div>
</div>
<div class="clear"></div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
- <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Integer Type</title><link rel="stylesheet" href="../../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked_concepts.html" title="Interlocked Concepts" /><link rel="prev" href="interlocked_arithmetic_type.html" title="Interlocked Arithmetic Type" /><link rel="next" href="../../rationale.html" title="Rationale" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Integer Type</title><link rel="stylesheet" href="../../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked_concepts.html" title="Interlocked Concepts" /><link rel="prev" href="interlocked_arithmetic_type.html" title="Interlocked Arithmetic Type" /><link rel="next" href="../interlocked_support.html" title="Interlocked Support" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
<script type="text/javascript" > <!--
boostscript.init( new Array(
boostscript.nested_links,
@@ -71,7 +71,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="../../rationale.html">
+ <a accesskey="n" href="../interlocked_support.html">
<div class="next-icon"></div>
</a>
</div>
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.description"></a>
- <h6><a id="id461270"></a>
+ <h6><a id="id462507"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.description">Description</a>
</h6>
<p>
@@ -145,7 +145,7 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.refinement_of"></a>
- <h6><a id="id461490"></a>
+ <h6><a id="id462727"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.refinement_of">Refinement
of</a>
</h6>
@@ -154,7 +154,7 @@
<code class="literal">Interlocked Arithmetic Type</code></a>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.expression_requirements"></a>
- <h6><a id="id461538"></a>
+ <h6><a id="id462775"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.expression_requirements">Expression
Requirements</a>
</h6>
@@ -206,7 +206,7 @@
</div>
</div>
<div class="table">
- <a id="id461755"></a>
+ <a id="id462992"></a>
<p class="title">
<b>Table 7. Interlocked Integer Type Requirements</b>
</p>
@@ -341,7 +341,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.headers"></a>
- <h6><a id="id462394"></a>
+ <h6><a id="id463630"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.headers">Headers</a>
</h6>
<p>
@@ -353,10 +353,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id462416">
+ <div class="style-switcher-box" id="id463652">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id462416',
+ 'id463652',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -383,7 +383,6 @@
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">bitand_assign</span><span class="special">/</span><span class="identifier">bitand_assign_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="comment">/* etc. */</span>
-
<span class="comment">// bitor_assign headers.
</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">bitor_assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">bitor_assign</span><span class="special">/</span><span class="identifier">bitor_assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
@@ -401,6 +400,13 @@
</div>
<p>
</p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.example"></a>
+ <h6><a id="id464534"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Put a code example here.
+ </p>
</div>
</div>
<div class="clear"></div>
@@ -423,7 +429,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="../../rationale.html">
+ <a accesskey="n" href="../interlocked_support.html">
<div class="next-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.description"></a>
- <h6><a id="id457681"></a>
+ <h6><a id="id458848"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.description">Description</a>
</h6>
<p>
@@ -165,7 +165,7 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.refinement_of"></a>
- <h6><a id="id458011"></a>
+ <h6><a id="id459177"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.refinement_of">Refinement
of</a>
</h6>
@@ -174,7 +174,7 @@
<code class="literal">Interlocked Type</code></a>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.expression_requirements"></a>
- <h6><a id="id458060"></a>
+ <h6><a id="id459226"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.expression_requirements">Expression
Requirements</a>
</h6>
@@ -223,7 +223,7 @@
</div>
</div>
<div class="table">
- <a id="id458260"></a>
+ <a id="id459426"></a>
<p class="title">
<b>Table 5. Interlocked Arithmetic Type Requirements</b>
</p>
@@ -288,7 +288,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.headers"></a>
- <h6><a id="id458524"></a>
+ <h6><a id="id459691"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.headers">Headers</a>
</h6>
<p>
@@ -300,10 +300,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id458546">
+ <div class="style-switcher-box" id="id459712">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id458546',
+ 'id459712',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -323,13 +323,11 @@
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign</span><span class="special">/</span><span class="identifier">assign_acq_rel</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign</span><span class="special">/</span><span class="identifier">assign_unordered</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
-
<span class="comment">// Forward declarations.
</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign</span><span class="special">/</span><span class="identifier">assign_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="comment">/* etc. */</span>
-
<span class="comment">// assign_if_was headers.
</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign_if_was</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">assign_if_was</span><span class="special">/</span><span class="identifier">assign_if_was</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
@@ -343,6 +341,13 @@
</div>
<p>
</p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.example"></a>
+ <h6><a id="id460498"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Put a code example here.
+ </p>
</div>
</div>
<div class="clear"></div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_operation.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_operation.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_operation.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -88,6 +88,10 @@
</div>
</div>
</div>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.description"></a>
+ <h6><a id="id455469"></a>
+ Description
+ </h6>
<p>
An <code class="literal">Interlocked Operation</code> is a function which provides
guarantees concerning order and visibility of read and write operations
@@ -138,12 +142,12 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.expression_requirements"></a>
- <h6><a id="id455580"></a>
+ <h6><a id="id455609"></a>
<a href="interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.expression_requirements">Expression
Requirements</a>
</h6>
<div class="table">
- <a id="id455599"></a>
+ <a id="id455628"></a>
<p class="title">
<b>Table 2. Interlocked Operation Requirements</b>
</p>
@@ -207,7 +211,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.semantic_type"></a>
- <h6><a id="id455767"></a>
+ <h6><a id="id455796"></a>
<a href="interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.semantic_type">Semantic
Type</a>
</h6>
@@ -219,7 +223,7 @@
<code class="literal">Interlocked Operations</code> support all <code class="literal">Semantic
Types</code>.
</p>
- <div class="note">
+ <div class="important">
<div class="box-outer-wrapper">
<div class="box-top-left"></div>
<div class="box-top-right"></div>
@@ -227,11 +231,11 @@
<div class="box-inner-wrapper">
<div class="admonition-graphic">
<div class="admonition-icon">
- <div class="note-icon"></div>
+ <div class="important-icon"></div>
</div>
</div>
<div class="admonition-body">
- <div class="admonition-title">Note</div>
+ <div class="admonition-title">Important</div>
<div class="admonition-content">
<p>
</p>
@@ -254,7 +258,7 @@
</div>
</div>
<div class="table">
- <a id="id455834"></a>
+ <a id="id455862"></a>
<p class="title">
<b>Table 3. Semantic Types</b>
</p>
@@ -341,7 +345,8 @@
<td>
<p>
Uses the default ordering guarantees as specified by the corresponding
- <code class="literal">Interlocked Operation</code>.
+ <code class="literal">Interlocked Operation</code>. This <code class="literal">Semantic
+ Type</code> must be supported by all <code class="literal">Interlocked Operations</code>.
</p>
</td>
</tr>
@@ -350,6 +355,166 @@
</div>
</div>
<br class="table-break" />
+ <div class="note">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <div class="admonition-graphic">
+ <div class="admonition-icon">
+ <div class="note-icon"></div>
+ </div>
+ </div>
+ <div class="admonition-body">
+ <div class="admonition-title">Note</div>
+ <div class="admonition-content">
+ <p>
+ </p>
+ <p>
+ In a future release, another <code class="literal">Semantic Type</code> may be
+ introduced called <code class="computeroutput"><span class="identifier">thread_unsafe</span></code>
+ which does not perform the operation atomically at all. This type would
+ be a required semantic for all <code class="literal">Interlocked Operations</code>,
+ much like <code class="computeroutput"><span class="identifier">default_</span></code>.
+ </p>
+ <p>
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.headers"></a>
+ <h6><a id="id456185"></a>
+ Headers
+ </h6>
+ <p>
+ In general, you should not have to include the following files in order
+ to use <code class="literal">Interlocked Operations</code>, since including the file
+ for the operation implicitly includes the corresponding semantics. However,
+ if you wish to create your own <code class="literal">Interlocked Operations</code>,
+ you would use the headers notated below to bring in the semantic types
+ which are necessary for use with your operation.
+ </p>
+ <p>
+
+</p>
+ <div class="programlisting">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <div class="style-switcher-box" id="id456230">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'insert_style_selector',
+ 'id456230',
+ '../../../../../doc/style/html/syntax.xml',
+ '../../../../../doc/style/html'
+ );
+ //--></script>
+</div>
+ <pre>
+<span class="comment">// Brings in all semantic types.
+</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+
+<span class="comment">// Fine-grained semantic headers.
+</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">/</span><span class="identifier">unordered</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">/</span><span class="identifier">acquire</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">/</span><span class="identifier">release</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">/</span><span class="identifier">acq_rel</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">semantics</span><span class="special">/</span><span class="keyword">default</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+</pre>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ <p>
+ </p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.example"></a>
+ <h6><a id="id456685"></a>
+ Example
+ </h6>
+ <p>
+ </p>
+ <p>
+
+</p>
+ <div class="programlisting">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <div class="style-switcher-box" id="id456710">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'insert_style_selector',
+ 'id456710',
+ '../../../../../doc/style/html/syntax.xml',
+ '../../../../../doc/style/html'
+ );
+ //--></script>
+</div>
+ <pre>
+<span class="comment">//Bring in the multiply_assign operation (a valid Interlocked Operation).
+</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">multiply_assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+
+<span class="comment">// Bring in interlocked integer types.
+</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+
+<span class="comment">/* ... */</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">act</span><span class="special">::</span><span class="identifier">interlocked</span><span class="special">;</span>
+
+ <span class="comment">// Create an interlocked integer.
+</span> <span class="identifier">int_fast32_t</span> <span class="identifier">shared_integer</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+
+ <span class="comment">/* ... (code for thread creation not shown for simplicity) ... */</span>
+
+ <span class="comment">// Atomically multiply shared_integer by 4 and store the result back to
+</span> <span class="comment">// shared_integer. Default semantics are used (in this case, the default is
+</span> <span class="comment">// acq_rel, as noted in the documentation for multiply_assign).
+</span> <span class="identifier">multiply_assign</span><span class="special">(</span> <span class="identifier">shared_integer</span><span class="special">,</span> <span class="number">4</span> <span class="special">);</span>
+
+ <span class="comment">// Perform a multiply_assign operation with unordered semantics.
+</span> <span class="identifier">multiply_assign</span><span class="special"><</span> <span class="identifier">unordered</span> <span class="special">>(</span> <span class="identifier">shared_integer</span><span class="special">,</span> <span class="number">2</span> <span class="special">);</span>
+
+ <span class="comment">// Perform a multiply_assign operation with acquire semantics.
+</span> <span class="identifier">multiply_assign</span><span class="special"><</span> <span class="identifier">acquire</span> <span class="special">>(</span> <span class="identifier">shared_integer</span><span class="special">,</span> <span class="number">3</span> <span class="special">);</span>
+
+ <span class="comment">/* ... */</span>
+
+ <span class="comment">// Perform a multiply_assign operation explicitly with default semantics.
+</span> <span class="identifier">multiply_assign</span><span class="special"><</span> <span class="identifier">default_</span> <span class="special">>(</span> <span class="identifier">shared_integer</span><span class="special">,</span> <span class="number">3</span> <span class="special">);</span>
+<span class="special">}</span>
+</pre>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ <p>
+ </p>
+ <p>
+ </p>
+ <p>
+ </p>
+ <div class="calloutlist">
+ <dl></dl>
+ </div>
+ <p>
+ </p>
+ <p>
+ </p>
</div>
</div>
<div class="clear"></div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_type.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_type.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_type.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.description"></a>
- <h6><a id="id456112"></a>
+ <h6><a id="id457247"></a>
<a href="interlocked_type.html#boost_act.interlocked.interlocked_concepts.interlocked_type.description">Description</a>
</h6>
<p>
@@ -156,7 +156,7 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.expression_requirements"></a>
- <h6><a id="id456397"></a>
+ <h6><a id="id457532"></a>
<a href="interlocked_type.html#boost_act.interlocked.interlocked_concepts.interlocked_type.expression_requirements">Expression
Requirements</a>
</h6>
@@ -204,7 +204,7 @@
</div>
</div>
<div class="table">
- <a id="id456596"></a>
+ <a id="id457731"></a>
<p class="title">
<b>Table 4. Interlocked Type Requirements</b>
</p>
@@ -289,7 +289,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.headers"></a>
- <h6><a id="id456922"></a>
+ <h6><a id="id458057"></a>
<a href="interlocked_type.html#boost_act.interlocked.interlocked_concepts.interlocked_type.headers">Headers</a>
</h6>
<p>
@@ -301,10 +301,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id456943">
+ <div class="style-switcher-box" id="id458078">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id456943',
+ 'id458078',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -328,7 +328,6 @@
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">load</span><span class="special">/</span><span class="identifier">load_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="comment">/* etc. */</span>
-
<span class="comment">// store headers.
</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">store</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">store</span><span class="special">/</span><span class="identifier">store</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
@@ -342,6 +341,13 @@
</div>
<p>
</p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_type.example"></a>
+ <h6><a id="id458791"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Put a code example here.
+ </p>
</div>
</div>
<div class="clear"></div>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Support</title><link rel="stylesheet" href="../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked.html" title="Interlocked" /><link rel="prev" href="interlocked_concepts/interlocked_integer_type.html" title="Interlocked Integer Type" /><link rel="next" href="interlocked_support/checking_support.html" title="Checking Support" /><script type="text/javascript" src="../../../../doc/javascript/main.js"></script>
+ <script type="text/javascript" > <!--
+ boostscript.init( new Array(
+ boostscript.nested_links,
+ boostscript.style_switcher,
+ boostscript.common
+ ),
+ '../../../../doc/javascript'
+ );
+ //--></script>
+
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'include_alternate_stylesheets',
+ '../../../../doc/style/html/syntax.xml',
+ '../../../../doc/style/html'
+ );
+ //--></script>
+<link rel="alternate stylesheet" type="text/css" title="Quickbook source" href="../../../../doc/style/html/conversion/boostbook_to_quickbook.css" />
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'load_user_stylesheet' );
+ //--></script>
+</head>
+ <body>
+ <div id="heading">
+ <div id="heading-placard"></div>
+ <div class="heading-navigation-box">
+ <div class="nested-links-select-box" id="chapters_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'chapters_select_box',
+ '../../../../doc/chapters.xml',
+ '../../../../libs');
+ //--></script>
+</div>
+ <div class="nested-links-select-box" id="sections_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'sections_select_box',
+ '../../sections.xml',
+ '../.././');
+ //--></script>
+</div>
+ </div>
+ <div class="search-box">
+ <form id="cref" action="http://google.com/cse">
+ <div class="search-box-label"></div>
+ <div>
+ <input type="hidden" name="cref" value="http://tinyurl.com/33np8c" />
+ <input class="search-box" type="text" name="q" id="q" size="40" maxlength="255" alt="Search Text" />
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_concepts/interlocked_integer_type.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="interlocked_support/checking_support.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="body">
+ <div id="body-inner">
+ <div id="content">
+ <div class="section">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="boost_act.interlocked.interlocked_support"></a><a href="interlocked_support.html" title="Interlocked Support">Interlocked
+ Support</a></h3>
+ </div>
+ </div>
+ </div>
+ <div class="toc">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <dl>
+ <dt>
+ <span class="section">
+ <a href="interlocked_support/checking_support.html">Checking
+ Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="interlocked_support/extending_support.html">Extending
+ Support</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_concepts/interlocked_integer_type.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="interlocked_support/checking_support.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="footer">
+ <div id="footer-left">
+ <div id="copyright">
+ <p>Copyright © 2006 , 2007 Matthew Calabrese</p>
+ </div>
+ <div id="license">
+ <p>Distributed under the
+ Boost Software License, Version 1.0.
+ </p>
+ </div>
+ </div>
+ <div id="footer-right">
+ <div id="banners">
+ <p id="banner-xhtml">
+ XHTML 1.0
+ </p>
+ <p id="banner-css">
+ CSS
+ </p>
+ <p id="banner-sourceforge">
+ SourceForge
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </body>
+</html>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/checking_support.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/checking_support.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Checking Support</title><link rel="stylesheet" href="../../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked_support.html" title="Interlocked Support" /><link rel="prev" href="../interlocked_support.html" title="Interlocked Support" /><link rel="next" href="extending_support.html" title="Extending Support" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
+ <script type="text/javascript" > <!--
+ boostscript.init( new Array(
+ boostscript.nested_links,
+ boostscript.style_switcher,
+ boostscript.common
+ ),
+ '../../../../../doc/javascript'
+ );
+ //--></script>
+
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'include_alternate_stylesheets',
+ '../../../../../doc/style/html/syntax.xml',
+ '../../../../../doc/style/html'
+ );
+ //--></script>
+<link rel="alternate stylesheet" type="text/css" title="Quickbook source" href="../../../../../doc/style/html/conversion/boostbook_to_quickbook.css" />
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'load_user_stylesheet' );
+ //--></script>
+</head>
+ <body>
+ <div id="heading">
+ <div id="heading-placard"></div>
+ <div class="heading-navigation-box">
+ <div class="nested-links-select-box" id="chapters_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'chapters_select_box',
+ '../../../../../doc/chapters.xml',
+ '../../../../../libs');
+ //--></script>
+</div>
+ <div class="nested-links-select-box" id="sections_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'sections_select_box',
+ '../../../sections.xml',
+ '../../.././');
+ //--></script>
+</div>
+ </div>
+ <div class="search-box">
+ <form id="cref" action="http://google.com/cse">
+ <div class="search-box-label"></div>
+ <div>
+ <input type="hidden" name="cref" value="http://tinyurl.com/33np8c" />
+ <input class="search-box" type="text" name="q" id="q" size="40" maxlength="255" alt="Search Text" />
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="../interlocked_support.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_support.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="extending_support.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="body">
+ <div id="body-inner">
+ <div id="content">
+ <div class="section">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="boost_act.interlocked.interlocked_support.checking_support"></a><a href="checking_support.html" title="Checking Support">Checking
+ Support</a></h4>
+ </div>
+ </div>
+ </div>
+ <a id="boost_act.interlocked.interlocked_support.checking_support.description"></a>
+ <h6><a id="id464610"></a>
+ Description
+ </h6>
+ <p>
+ In practice, not all architectures and compilers can be made to support
+ all of the interlocked portion of this library. While many common systems
+ may support all of the functionality described in documentation, others
+ may support none, or a certain subset. Because of this, it is important
+ to be able to check at preprocessor time if certain functionality is supported,
+ allowing the implementation to branch off accordingly. This can be accomplished
+ by using the <code class="computeroutput"><span class="identifier">BOOST_ACT_INTERLOCKED_HAS</span></code>
+ macro.
+ </p>
+ <div class="variablelist">
+ <p class="title">
+ <b>Notation</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="term">
+ <em class="replaceable"><code>
+ name
+ </code></em>
+ </span>
+ </dt>
+ <dd>
+ The name of an <a href="../interlocked_concepts/interlocked_operation.html" title="Interlocked Operation">
+ <code class="literal">Interlocked Operation</code></a> in <code class="literal">Boost.Act</code>.
+ </dd>
+ <dt>
+ <span class="term">
+ <code class="computeroutput">
+ <span class="identifier">S</span>
+ </code>
+ </span>
+ </dt>
+ <dd>
+ A <a href="../interlocked_concepts/interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.semantic_type">
+ <code class="literal">Semantic Type</code></a>, as specified without qualification
+ and with the exact name as listed in documentation (not a typedef name).
+ As an exception, <code class="literal">default_</code>, <code class="literal">default</code>,
+ and <code class="literal">_</code> may each be used when specifying default semantics.
+ </dd>
+ </dl>
+ </div>
+ <a id="boost_act.interlocked.interlocked_support.checking_support.expression_requirements"></a>
+ <h6><a id="id464763"></a>
+ <a href="checking_support.html#boost_act.interlocked.interlocked_support.checking_support.expression_requirements">Expression
+ Requirements</a>
+ </h6>
+ <div class="table">
+ <a id="id464781"></a>
+ <p class="title">
+ <b>Table 8. Interlocked Operation Requirements</b>
+ </p>
+ <div class="table-contents">
+ <table class="table" summary="Interlocked Operation Requirements">
+ <colgroup>
+ <col />
+ <col />
+ </colgroup>
+ <thead>
+ <tr>
+ <th>
+ <p>
+ Expression
+ </p>
+ </th>
+ <th>
+ <p>
+ Pre/Post-Condition
+ </p>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <p>
+ <code class="computeroutput"><span class="identifier">BOOST_ACT_INTERLOCKED_HAS</span><span class="special">(</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">S</span> <span class="special">)</span></code>
+ </p>
+ </td>
+ <td>
+ <p>
+ Yields the literal <code class="computeroutput"><span class="number">1</span></code>
+ if the operation is supported or <code class="computeroutput"><span class="number">0</span></code>
+ if the operation is not supported.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <br class="table-break" />
+ <a id="boost_act.interlocked.interlocked_support.checking_support.headers"></a>
+ <h6><a id="id464916"></a>
+ Headers
+ </h6>
+ <p>
+
+</p>
+ <div class="programlisting">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <div class="style-switcher-box" id="id464936">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'insert_style_selector',
+ 'id464936',
+ '../../../../../doc/style/html/syntax.xml',
+ '../../../../../doc/style/html'
+ );
+ //--></script>
+</div>
+ <pre>
+
+<span class="comment">// Brings in the `BOOST_ACT_INTERLOCKED_HAS` macro.
+</span><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">has</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+
+<span class="comment">// Note: No semantic headers have to be included in order to use
+</span><span class="comment">// BOOST_ACT_INTERLOCKED_HAS as it relies entirely on the preprocessor.
+</span>
+</pre>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ <p>
+ </p>
+ <a id="boost_act.interlocked.interlocked_support.checking_support.example"></a>
+ <h6><a id="id465044"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Put a code example here.
+ </p>
+ <div class="note">
+ <div class="box-outer-wrapper">
+ <div class="box-top-left"></div>
+ <div class="box-top-right"></div>
+ <div class="box-top"></div>
+ <div class="box-inner-wrapper">
+ <div class="admonition-graphic">
+ <div class="admonition-icon">
+ <div class="note-icon"></div>
+ </div>
+ </div>
+ <div class="admonition-body">
+ <div class="admonition-title">Note</div>
+ <div class="admonition-content">
+ <p>
+ </p>
+ <p>
+ In a future release, another macro, <code class="computeroutput"><span class="identifier">BOOST_ACT_INTERLOCKED_HAS_LOCK_FREE</span></code>
+ will likely be introduced, allowing one to check if an operation is
+ supported natively without locking as opposed to being simulated with
+ locks.
+ </p>
+ <p>
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="box-bottom-left"></div>
+ <div class="box-bottom-right"></div>
+ <div class="box-bottom"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="../interlocked_support.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_support.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="extending_support.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="footer">
+ <div id="footer-left">
+ <div id="copyright">
+ <p>Copyright © 2006 , 2007 Matthew Calabrese</p>
+ </div>
+ <div id="license">
+ <p>Distributed under the
+ Boost Software License, Version 1.0.
+ </p>
+ </div>
+ </div>
+ <div id="footer-right">
+ <div id="banners">
+ <p id="banner-xhtml">
+ XHTML 1.0
+ </p>
+ <p id="banner-css">
+ CSS
+ </p>
+ <p id="banner-sourceforge">
+ SourceForge
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </body>
+</html>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/extending_support.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/extending_support.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extending Support</title><link rel="stylesheet" href="../../../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../../../index.html" title="Boost.Act" /><link rel="up" href="../interlocked_support.html" title="Interlocked Support" /><link rel="prev" href="checking_support.html" title="Checking Support" /><link rel="next" href="../../rationale.html" title="Rationale" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
+ <script type="text/javascript" > <!--
+ boostscript.init( new Array(
+ boostscript.nested_links,
+ boostscript.style_switcher,
+ boostscript.common
+ ),
+ '../../../../../doc/javascript'
+ );
+ //--></script>
+
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'include_alternate_stylesheets',
+ '../../../../../doc/style/html/syntax.xml',
+ '../../../../../doc/style/html'
+ );
+ //--></script>
+<link rel="alternate stylesheet" type="text/css" title="Quickbook source" href="../../../../../doc/style/html/conversion/boostbook_to_quickbook.css" />
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.style_switcher, 'load_user_stylesheet' );
+ //--></script>
+</head>
+ <body>
+ <div id="heading">
+ <div id="heading-placard"></div>
+ <div class="heading-navigation-box">
+ <div class="nested-links-select-box" id="chapters_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'chapters_select_box',
+ '../../../../../doc/chapters.xml',
+ '../../../../../libs');
+ //--></script>
+</div>
+ <div class="nested-links-select-box" id="sections_select_box">
+ <script type="text/javascript" > <!--
+ boostscript.call( boostscript.nested_links, 'select_box',
+ 'sections_select_box',
+ '../../../sections.xml',
+ '../../.././');
+ //--></script>
+</div>
+ </div>
+ <div class="search-box">
+ <form id="cref" action="http://google.com/cse">
+ <div class="search-box-label"></div>
+ <div>
+ <input type="hidden" name="cref" value="http://tinyurl.com/33np8c" />
+ <input class="search-box" type="text" name="q" id="q" size="40" maxlength="255" alt="Search Text" />
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="checking_support.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_support.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="../../rationale.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="body">
+ <div id="body-inner">
+ <div id="content">
+ <div class="section">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h4 class="title"><a id="boost_act.interlocked.interlocked_support.extending_support"></a><a href="extending_support.html" title="Extending Support">Extending
+ Support</a></h4>
+ </div>
+ </div>
+ </div>
+ <p>
+ In its current state, the interlocked portion of <code class="literal">Boost.Act</code>
+ is only implemented for Windows and for GCC targetting x86. I unfortunately
+ do no have the means to test other systems, so I must rely on the boost
+ community to contribute. I have done all that I can to make porting the
+ implementation to other systems as easy as possible. Most operations may
+ be emulated in a lock-free manner based on other operations, namely via
+ assign_if_was, and therefore the minimum amount of code required is fairly
+ small. For details on exacly how to port to other systems and the exact
+ way that default implementations are chosen, please see the documentation
+ in the header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">act</span><span class="special">/</span><span class="identifier">interlocked</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">implementation_info</span><span class="special">/</span><span class="identifier">operation_support</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>.
+ </p>
+ <p>
+ In future updates, I plan to use <code class="literal">Boost.Wave</code> to create
+ a table in this documentation which internally uses implementation header
+ files to present exactly which compilers and architectures are supported
+ and to what extent. This way, each rebuild of the documentation automatically
+ syncs up with the implemenation to give an accurate view of support. This
+ should make it much easier to see which operations are supported for your
+ system as a user, and also should make it easier for implementors to determine
+ if additions they make are correctly being picked (as running tests will
+ merely tell you if the test was successful, not if a native implementation
+ was used as opposed to one emulated with compare-and-swap).
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="checking_support.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_support.html">
+ <div class="up-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="h" href="../../../index.html">
+ <div class="home-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="n" href="../../rationale.html">
+ <div class="next-icon"></div>
+ </a>
+ </div>
+ </div>
+ <div id="footer">
+ <div id="footer-left">
+ <div id="copyright">
+ <p>Copyright © 2006 , 2007 Matthew Calabrese</p>
+ </div>
+ <div id="license">
+ <p>Distributed under the
+ Boost Software License, Version 1.0.
+ </p>
+ </div>
+ </div>
+ <div id="footer-right">
+ <div id="banners">
+ <p id="banner-xhtml">
+ XHTML 1.0
+ </p>
+ <p id="banner-css">
+ CSS
+ </p>
+ <p id="banner-sourceforge">
+ SourceForge
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </body>
+</html>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/rationale.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/rationale.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/rationale.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
- <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Rationale</title><link rel="stylesheet" href="../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../index.html" title="Boost.Act" /><link rel="up" href="../index.html" title="Boost.Act" /><link rel="prev" href="interlocked/interlocked_concepts/interlocked_integer_type.html" title="Interlocked Integer Type" /><script type="text/javascript" src="../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Rationale</title><link rel="stylesheet" href="../../../doc/style/html/main.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /><link rel="start" href="../index.html" title="Boost.Act" /><link rel="up" href="../index.html" title="Boost.Act" /><link rel="prev" href="interlocked/interlocked_support/extending_support.html" title="Extending Support" /><script type="text/javascript" src="../../../doc/javascript/main.js"></script>
<script type="text/javascript" > <!--
boostscript.init( new Array(
boostscript.nested_links,
@@ -56,7 +56,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="interlocked/interlocked_concepts/interlocked_integer_type.html">
+ <a accesskey="p" href="interlocked/interlocked_support/extending_support.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -87,8 +87,51 @@
This section is provided to briefly describe the rationale behind some of these
decisions.
</p>
+ <a id="boost_act.rationale.interlocked_operation_names"></a>
+ <h4><a id="id465290"></a>
+ <a href="rationale.html#boost_act.rationale.interlocked_operation_names">Interlocked
+ Operation Names</a>
+ </h4>
+ <p>
+ Those familiar with lock-free programming may have noticed that the "swap"
+ and "compare-and-swap" operations are named <code class="computeroutput"><span class="identifier">assign</span></code>
+ and <code class="computeroutput"><span class="identifier">assign_if_was</span></code> in <code class="literal">Boost.Act</code>
+ respectively. This was done for several reasons. Firstly, the term "swap"
+ already has a meaning in standard C++, and that is to swap the values of two
+ objects in memory. The "swap" operation when refering to lock-free
+ programming means to set the value of a variable and yield the old value. Rather
+ than keep this conflict in terms, it was decided that the term "assign"
+ was a more accurate name, since the operation is just an assignment which returns
+ the old value rather than a reference to the modified object.
+ </p>
+ <p>
+ Similarly, the "swap" in "compare-and-swap" is not the
+ traditional C++ "swap." What's more is, the name "compare-and-swap"
+ does not give a very clear order of arguments, and indeed, different implementations
+ often choose varying orders of those arguments. <code class="computeroutput"><span class="identifier">assign_if_was</span></code>,
+ on the other hand, has an argument order which can be determined much less
+ ambiguously from its name.
+ </p>
+ <p>
+ There are still some down-sides to the name choice, and that is that <code class="computeroutput"><span class="identifier">assign</span></code> and <code class="computeroutput"><span class="identifier">assign_if_was</span></code>,
+ along with the other <code class="literal">Interlocked Operations</code>, return the
+ old value of the object being modified, whereas in C++ a reference to the object
+ is generally returned (from which you may obtain the new value). For this reason,
+ there was a short period where the <code class="literal">Interlocked Operations</code>
+ all yielded objects with member functions <code class="computeroutput"><span class="identifier">old_value</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">new_value</span><span class="special">()</span></code> to make it very unlikely that the user assumes
+ the wrong meaning when reading or writing code. Problems with this approach
+ were that the object, which now had to contain both the old value and the argument
+ to the function call or the old value and the new value, was not completely
+ optimized away in at least one commonly used compiler, which is a problem considering
+ the primary use of such functions is for efficiency. As well, the need to call
+ <code class="computeroutput"><span class="identifier">old_value</span><span class="special">()</span></code>
+ and <code class="computeroutput"><span class="identifier">new_value</span><span class="special">()</span></code>
+ when accessing the result of the call made trivial code overly verbous. If
+ there are any objections, I would be glad to consider changing the library
+ around, especially if you have a desirable alternative.
+ </p>
<a id="boost_act.rationale.policy_based_design"></a>
- <h4><a id="id463318"></a>
+ <h4><a id="id465490"></a>
<a href="rationale.html#boost_act.rationale.policy_based_design">Policy-Based Design</a>
</h4>
<p>
@@ -128,7 +171,7 @@
design.
</p>
<a id="boost_act.rationale.actions_vs__futures"></a>
- <h4><a id="id463412"></a>
+ <h4><a id="id465842"></a>
<a href="rationale.html#boost_act.rationale.actions_vs__futures">Actions vs. Futures</a>
</h4>
<p>
@@ -158,7 +201,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="interlocked/interlocked_concepts/interlocked_integer_type.html">
+ <a accesskey="p" href="interlocked/interlocked_support/extending_support.html">
<div class="prev-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/index.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/index.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/index.html 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -169,6 +169,28 @@
</dt>
</dl>
</dd>
+ <dt>
+ <span class="section">
+ <a href="boost_act/interlocked/interlocked_support.html">Interlocked
+ Support</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="section">
+ <a href="boost_act/interlocked/interlocked_support/checking_support.html">Checking
+ Support</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="boost_act/interlocked/interlocked_support/extending_support.html">Extending
+ Support</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
</dl>
</dd>
<dt>
@@ -197,7 +219,7 @@
</div>
<div id="footer">
<div id="footer-left">
- <div id="revised">Revised: June 30, 2007 at 20:30:30 GMT</div>
+ <div id="revised">Revised: July 02, 2007 at 16:55:42 GMT</div>
<div id="copyright"></div>
<div id="license">
<p>Distributed under the
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,5 +1,6 @@
[section Interlocked]
[include interlocked/concepts.qbk]
+[include interlocked/support.qbk]
[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_arithmetic_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_arithmetic_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_arithmetic_type.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -79,4 +79,8 @@
////////////////////////////////////////////////////////////////////////////
``
+[heading Example]
+
+ToDo: Put a code example here.
+
[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_integer_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_integer_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_integer_type.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -63,13 +63,11 @@
#include <boost/act/interlocked/bitand_assign/bitand_assign_acq_rel.hpp>
#include <boost/act/interlocked/bitand_assign/bitand_assign_unordered.hpp>
-
// Forward declarations.
#include <boost/act/interlocked/bitand_assign_fwd.hpp>
#include <boost/act/interlocked/bitand_assign/bitand_assign_fwd.hpp>
/* etc. */
-
// bitor_assign headers.
#include <boost/act/interlocked/bitor_assign.hpp>
#include <boost/act/interlocked/bitor_assign/bitor_assign.hpp>
@@ -80,4 +78,8 @@
////////////////////////////////////////////////////////////////////////////
``
+[heading Example]
+
+ToDo: Put a code example here.
+
[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_natural_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_natural_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_natural_type.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -57,17 +57,19 @@
#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
#include <boost/act/interlocked/assign/assign_unordered.hpp>
-
// Forward declarations.
#include <boost/act/interlocked/assign_fwd.hpp>
#include <boost/act/interlocked/assign/assign_fwd.hpp>
/* etc. */
-
// assign_if_was headers.
#include <boost/act/interlocked/assign_if_was.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
/* etc. */
``
+[heading Example]
+
+ToDo: Put a code example here.
+
[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_operation.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_operation.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_operation.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -1,5 +1,7 @@
[section Interlocked Operation]
+[heading Description]
+
An [concept Interlocked Operation] is a function which provides guarantees
concerning order and visibility of read and write operations with respect to
multiple threads, often with semantics which may be specified by users at the
@@ -52,7 +54,7 @@
argument to the corresponding template. Not all [concept Interlocked Operations]
support all [concept Semantic Types].
-[note
+[important
If you are unsure as to which semantics you should use for a given situation, it
is generally safest to use the default semantics of the corresponding
[concept Interlocked Operation]. If efficiency is important for your
@@ -76,8 +78,44 @@
only.
] ]
[[`default_`] [Uses the default ordering guarantees as specified by the
- corresponding [concept Interlocked Operation].
+ corresponding [concept Interlocked Operation]. This
+ [concept Semantic Type] must be supported by all
+ [concept Interlocked Operations].
] ]
]
+[note
+In a future release, another [concept Semantic Type] may be introduced called
+`thread_unsafe` which does not perform the operation atomically at all. This
+type would be a required semantic for all [concept Interlocked Operations], much
+like `default_`.
+]
+
+[heading Headers]
+
+In general, you should not have to include the following files in order to use
+[concept Interlocked Operations], since including the file for the operation
+implicitly includes the corresponding semantics. However, if you wish to create
+your own [concept Interlocked Operations], you would use the headers notated
+below to bring in the semantic types which are necessary for use with your
+operation.
+
+``
+ // Brings in all semantic types.
+ #include <boost/act/interlocked/semantics.hpp>
+
+ // Fine-grained semantic headers.
+ #include <boost/act/interlocked/semantics/unordered.hpp>
+ #include <boost/act/interlocked/semantics/acquire.hpp>
+ #include <boost/act/interlocked/semantics/release.hpp>
+ #include <boost/act/interlocked/semantics/acq_rel.hpp>
+ #include <boost/act/interlocked/semantics/default.hpp>
+``
+
+[heading Example]
+
+[import ../../../example/multiply_assign.cpp]
+
+[multiply_assign]
+
[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_type.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_type.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_type.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -72,11 +72,14 @@
#include <boost/act/interlocked/load/load_fwd.hpp>
/* etc. */
-
// store headers.
#include <boost/act/interlocked/store.hpp>
#include <boost/act/interlocked/store/store.hpp>
/* etc. */
``
+[heading Example]
+
+ToDo: Put a code example here.
+
[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,6 @@
+[section Interlocked Support]
+
+[include support/checking_support.qbk]
+[include support/extending_support.qbk]
+
+[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/checking_support.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/checking_support.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,54 @@
+[section Checking Support]
+
+[heading Description]
+
+In practice, not all architectures and compilers can be made to support all of
+the interlocked portion of this library. While many common systems may support
+all of the functionality described in documentation, others may support none, or
+a certain subset. Because of this, it is important to be able to check at
+preprocessor time if certain functionality is supported, allowing the
+implementation to branch off accordingly. This can be accomplished by using the
+`BOOST_ACT_INTERLOCKED_HAS` macro.
+
+[variablelist Notation
+[[[~name]] [The name of an __interlocked_operation__ in =Boost.Act=.] ]
+[[`S`] [A __semantic_type__, as specified without qualification
+ and with the exact name as listed in documentation
+ (not a typedef name). As an exception, =default_=,
+ =default=, and =_= may each be used when specifying default
+ semantics.
+ ] ]
+]
+
+[heading Expression Requirements]
+
+[table Interlocked Operation Requirements
+[[Expression] [Pre/Post-Condition] ]
+[[`BOOST_ACT_INTERLOCKED_HAS( name, S )`] [Yields the literal `1` if the
+ operation is supported or `0` if the
+ operation is not supported.
+ ] ]
+]
+
+[heading Headers]
+
+``
+ // Brings in the `BOOST_ACT_INTERLOCKED_HAS` macro.
+ #include <boost/act/config/interlocked/has.hpp>
+
+ // Note: No semantic headers have to be included in order to use
+ // BOOST_ACT_INTERLOCKED_HAS as it relies entirely on the preprocessor.
+
+``
+
+[heading Example]
+
+ToDo: Put a code example here.
+
+[note
+In a future release, another macro, `BOOST_ACT_INTERLOCKED_HAS_LOCK_FREE` will
+likely be introduced, allowing one to check if an operation is supported
+natively without locking as opposed to being simulated with locks.
+]
+
+[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/extending_support.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/support/extending_support.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,25 @@
+[section Extending Support]
+
+In its current state, the interlocked portion of =Boost.Act= is only implemented
+for Windows and for GCC targetting x86. I unfortunately do no have the means to
+test other systems, so I must rely on the boost community to contribute. I have
+done all that I can to make porting the implementation to other systems as easy
+as possible. Most operations may be emulated in a lock-free manner based on
+other operations, namely via assign_if_was, and therefore the minimum amount of
+code required is fairly small. For details on exacly how to port to other
+systems and the exact way that default implementations are chosen, please see
+the documentation in the header
+`<boost/act/interlocked/detail/implementation_info/operation_support.hpp>`.
+
+In future updates, I plan to use =Boost.Wave= to create a table in this
+documentation which internally uses implementation header files to present
+exactly which compilers and architectures are supported and to what extent. This
+way, each rebuild of the documentation automatically syncs up with the
+implemenation to give an accurate view of support. This should make it much
+easier to see which operations are supported for your system as a user, and also
+should make it easier for implementors to determine if additions they make are
+correctly being picked (as running tests will merely tell you if the test was
+successful, not if a native implementation was used as opposed to one emulated
+with compare-and-swap).
+
+[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/rationale.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/rationale.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/rationale.qbk 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -4,6 +4,40 @@
decisions. This section is provided to briefly describe the rationale behind
some of these decisions.
+[heading Interlocked Operation Names]
+
+Those familiar with lock-free programming may have noticed that the
+"swap" and "compare-and-swap" operations are named `assign` and `assign_if_was`
+in =Boost.Act= respectively. This was done for several reasons. Firstly, the
+term "swap" already has a meaning in standard C++, and that is to swap the
+values of two objects in memory. The "swap" operation when refering to lock-free
+programming means to set the value of a variable and yield the old value. Rather
+than keep this conflict in terms, it was decided that the term "assign" was a
+more accurate name, since the operation is just an assignment which returns the
+old value rather than a reference to the modified object.
+
+Similarly, the "swap" in "compare-and-swap" is not the traditional C++ "swap."
+What's more is, the name "compare-and-swap" does not give a very clear order of
+arguments, and indeed, different implementations often choose varying orders of
+those arguments. `assign_if_was`, on the other hand, has an argument order which
+can be determined much less ambiguously from its name.
+
+There are still some down-sides to the name choice, and that is that `assign`
+and `assign_if_was`, along with the other [concept Interlocked Operations],
+return the old value of the object being modified, whereas in C++ a reference to
+the object is generally returned (from which you may obtain the new value). For
+this reason, there was a short period where the [concept Interlocked Operations]
+all yielded objects with member functions `old_value()` and `new_value()` to
+make it very unlikely that the user assumes the wrong meaning when reading or
+writing code. Problems with this approach were that the object, which now had to
+contain both the old value and the argument to the function call or the old
+value and the new value, was not completely optimized away in at least one
+commonly used compiler, which is a problem considering the primary use of such
+functions is for efficiency. As well, the need to call `old_value()` and
+`new_value()` when accessing the result of the call made trivial code overly
+verbous. If there are any objections, I would be glad to consider changing the
+library around, especially if you have a desirable alternative.
+
[heading Policy-Based Design]
Boost.Act offers programmers customizability through two kinds of policies which
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/example/multiply_assign.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/example/multiply_assign.cpp 2007-07-04 02:01:20 EDT (Wed, 04 Jul 2007)
@@ -0,0 +1,43 @@
+/*==============================================================================
+ 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)
+==============================================================================*/
+
+//[ multiply_assign
+//Bring in the multiply_assign operation (a valid Interlocked Operation).
+#include <boost/act/interlocked/multiply_assign.hpp>
+
+// Bring in interlocked integer types.
+#include <boost/act/interlocked/integer.hpp>
+
+/* ... */
+
+int main()
+{
+ using namespace ::boost::act::interlocked;
+
+ // Create an interlocked integer.
+ int_fast32_t shared_integer = 2;
+
+ /* ... (code for thread creation not shown for simplicity) ... */
+
+ // Atomically multiply shared_integer by 4 and store the result back to
+ // shared_integer. Default semantics are used (in this case, the default is
+ // acq_rel, as noted in the documentation for multiply_assign).
+ multiply_assign( shared_integer, 4 );
+
+ // Perform a multiply_assign operation with unordered semantics.
+ multiply_assign< unordered >( shared_integer, 2 );
+
+ // Perform a multiply_assign operation with acquire semantics.
+ multiply_assign< acquire >( shared_integer, 3 );
+
+ /* ... */
+
+ // Perform a multiply_assign operation explicitly with default semantics.
+ multiply_assign< default_ >( shared_integer, 3 );
+}
+//]
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