|
Boost-Commit : |
From: matt_calabrese_at_[hidden]
Date: 2007-07-14 04:46:28
Author: matt_calabrese
Date: 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
New Revision: 7423
URL: http://svn.boost.org/trac/boost/changeset/7423
Log:
Doc updates, added some more support for the additional bidirectional semantics. GCC x86 support is broken for this release temporarily.
Added:
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_sequential_windows
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_sequential_windows
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_unordered_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acq_rel_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acquire_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_release_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_gcc
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_vc
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_thread_unsafe_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_unordered_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/impl_includer.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/cstdatomic.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_cage
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_fence
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_cage
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_fence
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/impl_includer.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acq_rel_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acquire_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_release_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_windows
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_thread_unsafe_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_unordered_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence.hpp
- copied, changed from r7409, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/fence.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_sequential_default
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_thread_unsafe.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_thread_unsafe_fwd.hpp
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_fence.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models/
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models/interlocked_compiler_fence.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models/interlocked_memory_fence.html
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_fence.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_compiler_fence.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_memory_fence.qbk
sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_sequential.cpp
sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_thread_unsafe.h
Removed:
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_load.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_store.hpp
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_load_vista
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_store_vista
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_vista
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_read_vc_x86
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vc_x86
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vista
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_write_vc_x86
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/fence.hpp
sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/cstdatomic.hpp
Text files modified:
sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp | 134 ++++++++++++++++++++++++++++-----------
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp | 5 +
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp | 4
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign.hpp | 8 +-
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_fwd.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_acq_rel_default | 9 +-
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default | 19 +----
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/impl_includer.hpp | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp | 4
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp | 4
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp | 16 ++--
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/detail/assign_if_was_acq_rel_default | 20 +----
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default | 6 -
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp | 4
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp | 2
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp | 7 +
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/add_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign_if_was | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitand_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitor_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compl_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/decrement | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/divide_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/impl_includer.hpp | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/increment | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/lshift_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/mod_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/multiply_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/negate_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/retrieve | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/rshift_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/subtract_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/xor_assign | 8 ++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/implementation_info/operation_support.hpp | 82 ++++--------------------
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence.hpp | 18 ++--
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence.hpp | 38 +++++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp | 44 +++++++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel_fwd.hpp | 29 ++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire.hpp | 44 +++++++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire_fwd.hpp | 29 ++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_fwd.hpp | 31 +++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release.hpp | 44 +++++++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release_fwd.hpp | 29 ++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential.hpp | 44 +++++++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential_fwd.hpp | 29 ++++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe.hpp | 25 +++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe_fwd.hpp | 23 ++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered.hpp | 24 +++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered_fwd.hpp | 22 ++++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence_fwd.hpp | 18 ++--
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default | 38 +++++-----
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default | 22 +++++
sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp | 5 +
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/act.qbk | 53 ++++++++------
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/HTML.manifest | 7 +
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/beta_warning.html | 6
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/compiler_setup.html | 10 +-
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked.html | 34 +++++++++
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models.html | 6
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_compiler_cage.html | 6
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_memory_cage.html | 52 +++++++++++---
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts.html | 6 +
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html | 16 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_cage.html | 36 +++++-----
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html | 16 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_natural_type.html | 20 +++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_operation.html | 20 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_semantic_type.html | 4
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_type.html | 14 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_metafunctions.html | 22 +++---
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_typedefs.html | 18 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_semantic_models.html | 54 +++------------
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/checking_support.html | 14 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/introduction.html | 20 ++--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/rationale.html | 111 ++++++--------------------------
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/index.html | 45 ++++++++----
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked.qbk | 1
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts.qbk | 1
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_cage.qbk | 13 +--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_natural_type.qbk | 4
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_cage_models/interlocked_memory_cage.qbk | 14 +--
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_semantic_models.qbk | 7 -
sandbox/SOC/2006/concurrency/trunk/libs/act/doc/rationale.qbk | 39 +++++-----
87 files changed, 1171 insertions(+), 550 deletions(-)
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/config/interlocked/has.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -15,36 +15,42 @@
#include <boost/preprocessor/comparison/equal.hpp>
#include <boost/preprocessor/control/if.hpp>
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSacquire() 0
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSrelease() 0
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSacq_rel() 0
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSunordered() 0
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSdefault() 1
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSdefault_() 1
-#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICS_() 1
-
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_add_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_assign_if_was() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_bitand_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_bitor_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_compiler_fence() acq_rel /*Change*/
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_compl_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_decrement() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_divide_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_fence() acq_rel /*Change*/
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_increment() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_lshift_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_mod_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_modify() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_multiply_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_negate_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_not_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_load() acquire
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_rshift_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_store() release
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_subtract_assign() acq_rel
-#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_xor_assign() acq_rel
+// ToDo: Fence detection here is completely wrong -- fix it!
+// Store and load are wrong
+// Create support check for thread_unsafe (always yield 1)
+
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSthread_unsafe() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSunordered() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSacquire() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSrelease() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSacq_rel() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSsequential() 0
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSdefault() 1
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICSdefault_() 1
+#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICS_() 1
+
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_add_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_assign_if_was() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_bitand_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_bitor_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_compiler_fence() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_compl_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_decrement() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_divide_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_memory_fence() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_increment() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_lshift_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_mod_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_modify() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_multiply_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_negate_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_not_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_load() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_rshift_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_store() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_subtract_assign() sequential
+#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_xor_assign() sequential
#define BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF( name ) \
BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_DEFAULT_OF_, name )()
@@ -52,8 +58,14 @@
#define BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICS( semantics ) \
BOOST_PP_CAT( BOOST_ACT_CONFIG_DETAIL_IS_DEFAULT_SEMANTICS, semantics )()
+#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_sequential() \
+BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, sequential )
+
#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acq_rel() \
-BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acq_rel )
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acq_rel ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_sequential() \
+)
#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
BOOST_PP_BITOR \
@@ -82,12 +94,18 @@
#define BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_DUMMY( name, semantics ) \
BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS( semantics )
+#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_sequential( name ) \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, sequential ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_sequential() \
+)
+
#define BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_acq_rel( name ) \
BOOST_PP_BITOR \
( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( name, acq_rel ) \
, BOOST_PP_BITOR \
- ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
- , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+ ( BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acq_rel() \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_AIW_DERIVABLE_sequential( name ) \
) \
)
@@ -184,18 +202,37 @@
) \
( name, semantics )
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_sequential() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, sequential ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_sequential() \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_acq_rel() 0
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_acquire() 0
+
#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_release() \
BOOST_PP_BITOR \
( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_RELEASE \
-, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, release ) \
+, BOOST_PP_BITOR \
+ ( BOOST_PP_BITOR \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, release ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_STORE_sequential() \
+ ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_release() \
+ ) \
)
#define BOOST_ACT_CONFIG_DETAIL_HAS_STORE_unordered() \
BOOST_PP_BITOR \
( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_STORE_UNORDERED \
, BOOST_PP_BITOR \
- ( BOOST_ACT_CONFIG_DETAIL_HAS_STORE_release() \
- , BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, unordered ) \
+ ( BOOST_PP_BITOR \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( store, unordered ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_STORE_release() \
+ ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_unordered() \
) \
)
@@ -210,18 +247,37 @@
) \
( name, semantics )
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_sequential() \
+BOOST_PP_BITOR \
+( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, sequential ) \
+, BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_sequential() \
+)
+
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acq_rel() 0
+
#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acquire() \
BOOST_PP_BITOR \
( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_ACQUIRE \
-, BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, acquire ) \
+, BOOST_PP_BITOR \
+ ( BOOST_PP_BITOR \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, acquire ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_sequential() \
+ ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_acquire() \
+ ) \
)
+#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_release() 0
+
#define BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_unordered() \
BOOST_PP_BITOR \
( BOOST_ACT_INTERLOCKED_DETAIL_HAS_VOLATILE_LOAD_UNORDERED \
, BOOST_PP_BITOR \
- ( BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acquire() \
- , BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, unordered ) \
+ ( BOOST_PP_BITOR \
+ ( BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( load, unordered ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_LOAD_acquire() \
+ ) \
+ , BOOST_ACT_CONFIG_DETAIL_HAS_ASSIGN_IF_WAS_unordered() \
) \
)
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -13,14 +13,19 @@
#include <boost/act/interlocked/assign_if_was.hpp>
#include <boost/act/interlocked/bitand_assign.hpp>
#include <boost/act/interlocked/bitor_assign.hpp>
+#include <boost/act/interlocked/compiler_cage.hpp>
+#include <boost/act/interlocked/compiler_fence.hpp>
#include <boost/act/interlocked/decrement.hpp>
#include <boost/act/interlocked/divide_assign.hpp>
#include <boost/act/interlocked/increment.hpp>
#include <boost/act/interlocked/integer.hpp>
#include <boost/act/interlocked/load.hpp>
#include <boost/act/interlocked/lshift_assign.hpp>
+#include <boost/act/interlocked/memory_cage.hpp>
+#include <boost/act/interlocked/memory_fence.hpp>
#include <boost/act/interlocked/modify.hpp>
#include <boost/act/interlocked/multiply_assign.hpp>
+#include <boost/act/interlocked/negate_assign.hpp>
#include <boost/act/interlocked/rshift_assign.hpp>
#include <boost/act/interlocked/semantics.hpp>
#include <boost/act/interlocked/store.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_SEQUENTIAL_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( add_assign, sequential, +, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_SEQUENTIAL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_ADD_ASSIGN_SEQUENTIAL_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( add_assign, sequential, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_thread_unsafe.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/add_assign_thread_unsafe_fwd.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/add_assign/detail/add_assign_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_SEQ_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_ADD_ASSIGN_DETAIL_ADD_ASSIGN_SEQ_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( add_assign, sequential, + )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -10,8 +10,10 @@
#define BOOST_ACT_INTERLOCKED_ASSIGN_HPP
#include <boost/act/interlocked/assign/assign.hpp>
+#include <boost/act/interlocked/assign/assign_unordered.hpp>
#include <boost/act/interlocked/assign/assign_acquire.hpp>
#include <boost/act/interlocked/assign/assign_release.hpp>
-#include <boost/act/interlocked/assign/assign_unordered.hpp>
+#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
+#include <boost/act/interlocked/assign/assign_sequential.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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -11,14 +11,14 @@
#include <boost/act/config/interlocked/has.hpp>
-#if BOOST_ACT_INTERLOCKED_HAS( assign, acq_rel )
+#if BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
#include <boost/act/interlocked/semantics/default.hpp>
#include <boost/mpl/and.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
+#include <boost/act/interlocked/assign/assign_sequential.hpp>
#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
@@ -33,7 +33,7 @@
::type
assign( TargetType& destination, SourceType const& new_value )
{
- return interlocked::assign< acq_rel >( destination, new_value );
+ return interlocked::assign< sequential >( destination, new_value );
}
template< typename Semantics, typename TargetType, typename SourceType >
@@ -48,7 +48,7 @@
::type
assign( TargetType& destination, SourceType const& new_value )
{
- return interlocked::assign< acq_rel >( destination, new_value );
+ return interlocked::assign< sequential >( destination, new_value );
}
} } }
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -11,7 +11,7 @@
#include <boost/act/config/interlocked/has.hpp>
-#if BOOST_ACT_INTERLOCKED_HAS( assign, acq_rel )
+#if BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
#include <boost/act/interlocked/semantics/default.hpp>
#include <boost/mpl/and.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,126 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_SEQUENTIAL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+#include <boost/act/interlocked/integer/selection.hpp>
+#include <boost/act/interlocked/modify/modify_sequential.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign, sequential )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+namespace detail
+{
+
+template< typename OperandType >
+class assign_sequential_fun
+{
+public:
+ explicit assign_sequential_fun( OperandType const& operand_init )
+ : operand_m( operand_init ) {}
+
+ template< typename Type >
+ typename remove_cv< Type >::type operator ()( Type& ) const
+ {
+ return static_cast< typename remove_cv< Type >::type >( operand_m );
+ }
+private:
+ OperandType const& operand_m;
+};
+
+struct assign_sequential_unaligned
+{
+ template< typename TargetType, typename SourceType >
+ static typename remove_cv< TargetType >::type
+ execute( TargetType& destination, SourceType const& source )
+ {
+ return modify< sequential >( destination
+ , assign_sequential_fun< SourceType >( source )
+ );
+ }
+};
+
+}
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value )
+{
+ return mpl::if_< detail::is_unaligned_interlocked< TargetType >
+ , detail::assign_sequential_unaligned
+ , detail::assign_sequential_impl
+ >
+ ::type::execute( destination, new_value );
+}
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign< sequential >
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,61 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_SEQ_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_SEQ_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value );
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_THUN_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_THUN_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, thread_unsafe >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value )
+{
+ typename remove_cv< TargetType >::type result = destination;
+ destination = new_value;
+ return result;
+}
+
+} } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/assign_thread_unsafe_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_THUN_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_ASSIGN_THUN_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename SourceType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, thread_unsafe >
+ , detail::are_valid_store_style_params< TargetType, SourceType const >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign( TargetType& destination, SourceType const& new_value );
+
+} } }
+
+#endif
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -17,10 +17,10 @@
namespace boost { namespace act { namespace interlocked { namespace detail {
template< typename Type >
-struct assign_acq_rel_fun
+struct assign_acq_rel_def_fun
{
public:
- assign_acq_rel_fun( Type const& right_init ) : right_m( right_init ) {}
+ assign_acq_rel_def_fun( Type const& right_init ) : right_m( right_init ) {}
public:
template< typename LeftType >
Type operator ()( LeftType& ) const
@@ -32,10 +32,11 @@
};
template< typename Type >
-assign_acq_rel_fun< typename remove_volatile< Type >::type >
+assign_acq_rel_def_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 );
+ return assign_acq_rel_def_fun< typename remove_volatile< Type >::type >
+ ( right );
}
struct assign_acq_rel_default_impl
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_sequential_windows
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_sequential_windows 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_SEQUENTIAL_WINDOWS_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_SEQUENTIAL_WINDOWS_HPP
+
+#include <boost/config.hpp>
+
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <windows.h> // ToDo: Remove (forward declare functions)
+
+#include <boost/type_traits/remove_volatile.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_sequential_impl
+{
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 4 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ BOOST_INTERLOCKED_EXCHANGE
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ )
+ );
+ }
+
+#if WINVER >= 0x0600
+
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 8 )
+ , remove_volatile< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_volatile< Type >::type right )
+ {
+ typedef typename remove_volatile< Type >::type unqualified_type;
+
+ return static_cast< unqualified_type >
+ (
+ InterlockedExchange64
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ )
+ );
+ }
+
+#endif
+
+};
+
+} } } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/assign_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -9,31 +9,23 @@
#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_DEFAULT_HPP
#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_UNORDERED_DEFAULT_HPP
-#include <boost/act/interlocked/detail/cas_support.hpp>
+// ToDo: Change the way defaults are picked here.
+
+#include <boost/act/config/interlocked/has.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#if BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, acquire )
+#if BOOST_ACT_INTERLOCKED_HAS( assign, acquire )
#include <boost/act/interlocked/assign/assign_acquire.hpp>
#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign< acquire >
-#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, release )
+#elif BOOST_ACT_INTERLOCKED_HAS( assign, release )
#include <boost/act/interlocked/assign/assign_release.hpp>
#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign< release >
-#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign, acq_rel )
-
-#include <boost/act/interlocked/assign/assign.hpp>
-
-#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_UNORDERED_IMPL assign
-
-#else
-
-#error If you read this, assign_unordered_default was improperly included.
-
#endif
namespace boost { namespace act { namespace interlocked { namespace detail {
@@ -49,7 +41,6 @@
}
};
-
} } } }
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/impl_includer.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/impl_includer.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign/detail/impl_includer.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_LOCAL_INCLUDE()
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -10,8 +10,10 @@
#define BOOST_ACT_INTERLOCKED_ASSIGN_FWD_HPP
#include <boost/act/interlocked/assign/assign_fwd.hpp>
+#include <boost/act/interlocked/assign/assign_unordered_fwd.hpp>
#include <boost/act/interlocked/assign/assign_acquire_fwd.hpp>
#include <boost/act/interlocked/assign/assign_release_fwd.hpp>
-#include <boost/act/interlocked/assign/assign_unordered_fwd.hpp>
+#include <boost/act/interlocked/assign/assign_acq_rel_fwd.hpp>
+#include <boost/act/interlocked/assign/assign_sequential_fwd.hpp>
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -10,9 +10,11 @@
#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_HPP
#include <boost/act/interlocked/assign_if_was/assign_if_was.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_release.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
-#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -11,12 +11,12 @@
#include <boost/act/config/interlocked/has.hpp>
-#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, acq_rel )
+#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, sequential )
#include <boost/act/interlocked/semantics/default.hpp>
#include <boost/mpl/and.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/remove_cv.hpp>
@@ -37,9 +37,9 @@
, ConditionType const& expected_value
)
{
- return interlocked::assign_if_was< acq_rel >( destination, new_value
- , expected_value
- );
+ return interlocked::assign_if_was< sequential >( destination, new_value
+ , expected_value
+ );
}
template< typename Semantics
@@ -61,9 +61,9 @@
, ConditionType const& expected_value
)
{
- return interlocked::assign_if_was< acq_rel >( destination, new_value
- , expected_value
- );
+ return interlocked::assign_if_was< sequential >( destination, new_value
+ , expected_value
+ );
}
} } }
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -11,7 +11,7 @@
#include <boost/act/config/interlocked/has.hpp>
-#if BOOST_ACT_INTERLOCKED_HAS( assign, acq_rel )
+#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, sequential )
#include <boost/act/interlocked/semantics/default.hpp>
#include <boost/mpl/and.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,113 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_SEQ_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_SEQ_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+#include <boost/act/interlocked/integer/selection.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/assign_if_was/detail/unaligned_assign_if_was.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( assign_if_was, sequential )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+namespace detail
+{
+template< typename Semantics >
+struct unaligned_assign_if_was;
+}
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ return mpl::if_< detail::is_unaligned_interlocked< TargetType >
+ , detail::unaligned_assign_if_was< Semantics >
+ , detail::assign_if_was_sequential_impl
+ >
+ ::type::execute( destination, new_value, expected_value );
+}
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::assign_if_was< Semantics >
+ ( interlocked_bool_internal_value( destination )
+ , static_cast< bool >( new_value )
+ , static_cast< bool >( expected_value )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_SEQ_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_SEQ_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+} } }
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_THUN_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_THUN_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, thread_unsafe >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ )
+{
+ if( destination == expected_value )
+ {
+ destination = new_value;
+ return expected_value;
+ }
+ else
+ return destination;
+}
+
+} } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_THUN_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_ASSIGN_IF_WAS_THUN_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics
+ , typename TargetType, typename SourceType, typename ConditionType
+ >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, thread_unsafe >
+ , detail::are_valid_store_style_params< TargetType, SourceType const
+ , ConditionType const
+ >
+ >
+, remove_cv< TargetType >
+>
+::type
+assign_if_was( TargetType& destination, SourceType const& new_value
+ , ConditionType const& expected_value
+ );
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_acq_rel_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -9,26 +9,18 @@
#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_ACQ_REL_DEF_IMPL_HPP
#define BOOST_ACT_INTERLOCKED_ASSIGN_DETAIL_ASSIGN_IF_WAS_ACQ_REL_DEF_IMPL_HPP
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/bool.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
+#include <boost/type_traits/remove_cv.hpp>
namespace boost { namespace act { namespace interlocked { namespace detail {
-// ToDo: Make better stub impl
-
struct assign_if_was_acq_rel_default_impl
{
- template< typename LeftType, typename RightType, typename ConditionType >
- static void execute( LeftType&, RightType&, ConditionType& )
+ template< typename LeftType, typename RightType, typename OldType >
+ static typename boost::remove_cv< LeftType >::type
+ execute( LeftType& left, RightType& right, OldType& old )
{
- BOOST_MPL_ASSERT_MSG
- (
- ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
- , NO_DEFAULT_INTERLOCKED_ASSIGN_IF_WAS_IMPLEMENTATION
- , ()
- );
+ return interlocked::assign_if_was< sequential >( left, right, old );
}
};
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_sequential_windows
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_sequential_windows 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_SEQ_WIN_HPP
+#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_ASSIGN_IF_WAS_SEQ_WIN_HPP
+
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/utility/enable_if.hpp>
+
+#include <windows.h> // ToDo: Remove (forward declare functions)
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct assign_if_was_sequential_impl
+{
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 4 )
+ , remove_cv< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
+ {
+ typedef typename remove_cv< Type >::type unqualified_type;
+
+ MemoryBarrier();
+
+ LONG const result = BOOST_INTERLOCKED_COMPARE_EXCHANGE
+ ( reinterpret_cast< LONG volatile* >( &left )
+ , reinterpret_cast< LONG const& >( right )
+ , reinterpret_cast< LONG const& >( old )
+ );
+
+ MemoryBarrier();
+
+ return reinterpret_cast< unqualified_type const& >( result );
+ }
+
+#ifdef _M_IA64
+
+ template< typename Type >
+ static
+ typename lazy_enable_if_c
+ <
+ ( sizeof( Type ) == 8 )
+ , remove_cv< Type >
+ >
+ ::type
+ execute( Type& left, typename remove_cv< Type >::type right
+ , typename remove_cv< Type >::type old
+ )
+ {
+ typedef typename remove_cv< Type >::type unqualified_type;
+
+ MemoryBarrier();
+
+ unqualified_type const result
+ = static_cast< unqualified_type >
+ (
+ InterlockedCompareExchange64
+ ( reinterpret_cast< LONGLONG volatile* >( &left )
+ , reinterpret_cast< LONGLONG const& >( right )
+ , reinterpret_cast< LONGLONG const& >( old )
+ )
+ );
+
+ MemoryBarrier();
+ }
+
+#endif
+
+};
+
+} } } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was/detail/assign_if_was_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -26,17 +26,13 @@
#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL \
assign_if_was< release >
-#elif BOOST_ACT_INTERLOCKED_DETAIL_HAS_CUSTOM_IMPL( assign_if_was, acq_rel )
+#else
#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel.hpp>
#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_DETAIL_UN_IMPL \
assign_if_was< acq_rel >
-#else
-
-#error assign_if_was_unordered_default was improperly included.
-
#endif
namespace boost { namespace act { namespace interlocked { namespace detail {
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/assign_if_was_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -10,9 +10,11 @@
#define BOOST_ACT_INTERLOCKED_ASSIGN_IF_WAS_FWD_HPP
#include <boost/act/interlocked/assign_if_was/assign_if_was_fwd.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_thread_unsafe_fwd.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_acquire_fwd.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_release_fwd.hpp>
#include <boost/act/interlocked/assign_if_was/assign_if_was_acq_rel_fwd.hpp>
-#include <boost/act/interlocked/assign_if_was/assign_if_was_unordered_fwd.hpp>
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential_fwd.hpp>
#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -12,7 +12,7 @@
#include <boost/act/interlocked/detail/binary_forwarder.hpp>
#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
-( bitand_assign, acq_rel, not_additive )
+( bitand_assign, sequential, not_additive )
#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_SEQUENTIAL_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( bitand_assign, sequential, &, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_SEQUENTIAL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_BITAND_ASSIGN_SEQUENTIAL_FWD_HPP
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( bitand_assign, sequential, not_additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_thread_unsafe.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/bitand_assign_thread_unsafe_fwd.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_SEQ_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_SEQ_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( bitand_assign, sequential, & )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/bitand_assign/detail/bitand_assign_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_UN_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_BITAND_ASSIGN_DETAIL_BITAND_ASSIGN_UN_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( bitand_assign, unordered, & )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_fwd.hpp
==============================================================================
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_load.hpp
==============================================================================
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_store.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_thread_unsafe.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/compiler_fence_thread_unsafe_fwd.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acq_rel_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acq_rel_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,26 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_ACQ_REL_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_ACQ_REL_DEF_HPP
+
+#include <boost/act/interlocked/compiler_fence/compiler_fence_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_acq_rel_default_impl
+{
+ static void execute()
+ {
+ compiler_fence< sequential >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acquire_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_acquire_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,26 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_ACQUIRE_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_ACQUIRE_DEF_HPP
+
+#include <boost/act/interlocked/compiler_fence/compiler_fence_acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_acquire_default_impl
+{
+ static void execute()
+ {
+ compiler_fence< acq_rel >();
+ }
+};
+
+} } } }
+
+#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_load_vista
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_load_vista 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,24 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_LD_VISTA_HPP
-#define BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_LD_VISTA_HPP
-
-// ToDo: Don't include windows.h
-#include <windows.h>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void compiler_fence_load_impl()
-{
- _ReadBarrier();
-}
-
-} } } }
-
-#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_release_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_release_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,26 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_RELEASE_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_RELEASE_DEF_HPP
+
+#include <boost/act/interlocked/compiler_fence/compiler_fence_acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_release_default_impl
+{
+ static void execute()
+ {
+ compiler_fence< acq_rel >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,26 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_DEF_HPP
+
+#include <boost/act/interlocked/memory_fence/memory_fence_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_sequential_default_impl
+{
+ static void execute()
+ {
+ memory_fence< sequential >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_gcc
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_gcc 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_GCC_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_GCC_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_impl
+{
+ static void execute()
+ {
+ __asm__ __volatile__ ();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_vc
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_sequential_vc 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,27 @@
+/*=============================================================================
+ 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_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_VC_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_SEQ_VC_HPP
+
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic( _ReadWriteBarrier )
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_impl
+{
+ static void execute()
+ {
+ _ReadWriteBarrier();
+ }
+};
+
+} } } }
+
+#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_store_vista
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_store_vista 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,24 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_STR_VISTA_HPP
-#define BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_STR_VISTA_HPP
-
-// ToDo: Don't include windows.h
-#include <windows.h>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void compiler_fence_store_impl()
-{
- _WriteBarrier();
-}
-
-} } } }
-
-#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_thread_unsafe_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_thread_unsafe_default 2007-07-14 04:46:15 EDT (Sat, 14 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_COMP_FENCE_DETAIL_COMP_FENCE_THUN_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_THUN_DEF_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_thread_unsafe_default_impl
+{
+ static void execute() {}
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 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_COMP_FENCE_DETAIL_COMP_FENCE_UN_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_COMP_FENCE_DETAIL_COMP_FENCE_UN_DEF_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct compiler_fence_unordered_default_impl
+{
+ static void execute() {}
+};
+
+} } } }
+
+#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_vista
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/compiler_fence_vista 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,24 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_VISTA_HPP
-#define BOOST_ACT_INTERLOCKED_COMPILER_FENCE_DETAIL_COMPILER_FENCE_VISTA_HPP
-
-// ToDo: Don't include windows.h
-#include <windows.h>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void compiler_fence_impl()
-{
- _ReadWriteBarrier();
-}
-
-} } } }
-
-#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/impl_includer.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence/detail/impl_includer.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_LOCAL_INCLUDE()
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/compiler_fence_fwd.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/cstdatomic.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/cstdatomic.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,564 @@
+/*=============================================================================
+ 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_CSTDATOMIC_HPP
+#define BOOST_ACT_INTERLOCKED_CSTDATOMIC_HPP
+
+#include <boost/act/interlocked/store.hpp>
+#include <boost/act/interlocked/load.hpp>
+#include <boost/act/interlocked/add_assign.hpp>
+#include <boost/act/interlocked/subtract_assign.hpp>
+#include <boost/act/interlocked/and_assign.hpp>
+#include <boost/act/interlocked/or_assign.hpp>
+#include <boost/act/interlocked/xor_assign.hpp>
+#include <boost/act/interlocked/integer/types.hpp>
+#include <boost/act/interlocked/flag.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <cassert>
+#include <cstddef>
+
+namespace boost { namespace act { namespace interlocked { namespace std_atomic {
+
+enum memory_order
+{ memory_order_relaxed
+, memory_order_acquire
+, memory_order_release
+, memory_order_acq_rel
+, memory_order_seq_cst
+};
+
+#define BOOST_ACT_DETAIL_RETURN_CALL_IMPL( macro, name, order, args, data ) \
+switch( order ) \
+{ \
+case memory_order_relaxed: \
+ macro( interlocked::name< unordered > args, data ) \
+ break; \
+case memory_order_acquire: \
+ macro( interlocked::name< acquire > args, data ) \
+ break; \
+case memory_order_release: \
+ macro( interlocked::name< release > args, data ) \
+ break; \
+case memory_order_acq_rel: \
+ macro( interlocked::name< acq_rel > args, data ) \
+ break; \
+case memory_order_seq_cst: \
+ macro( interlocked::name< sequential > args, data ) \
+ break; \
+}
+
+#define BOOST_ACT_DETAIL_CALL_MAC( expression, dummy ) result;
+
+#define BOOST_ACT_DETAIL_RETURN_CALL_MAC( expression, dummy ) return result;
+
+#define BOOST_ACT_DETAIL_CAS_CALL_MAC( expression, type_and_old_val ) \
+BOOST_PP_TUPLE_ELEM( 2, 0 ) expected_val = BOOST_PP_TUPLE_ELEM( 2, 1 ); \
+BOOST_PP_TUPLE_ELEM( 2, 1 ) = expression; \
+return expected_val == BOOST_PP_TUPLE_ELEM( 2, 1 );
+
+#define BOOST_ACT_DETAIL_CALL( name, order, args ) \
+BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_CALL_MAC \
+ , name, order, args \
+ )
+
+#define BOOST_ACT_DETAIL_RETURN_CALL( name, order, args ) \
+BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_RETURN_CALL_MAC \
+ , name, order, args \
+ )
+
+#define BOOST_ACT_DETAIL_RETURN_CAS_CALL( name, order, args, type, expected ) \
+BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_CAS_CALL_MAC \
+ , name, order, args, ( type, expected ) \
+ )
+
+// ToDo: Initialize in constructor to clear (figure out how to guarantee order)
+struct atomic_flag
+ : noncopyable
+{
+public:
+ bool test_and_set( memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( set_if_was_clear, order, ( flag_m ) )
+ }
+
+ void clear( memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_CALL( clear, order, ( flag_m ) )
+ }
+private:
+ interlocked::int_fast8_t flag_m;
+}
+
+inline bool atomic_flag_test_and_set( volatile atomic_flag* target )
+{
+ assert( target != 0 );
+ return target->test_and_set( memory_order_seq_cst );
+}
+
+inline bool atomic_flag_test_and_set_explicit( volatile atomic_flag* target
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->test_and_set( order );
+}
+
+inline void atomic_flag_clear( volatile atomic_flag* target )
+{
+ assert( target != 0 );
+ target->clear( memory_order_seq_cst );
+}
+
+inline void atomic_flag_clear_explicit( volatile atomic_flag* target
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ target->clear( order );
+}
+
+struct atomic_bool
+ : noncopyable
+{
+public:
+ bool lock_free()
+ {
+ return true; // ToDo: Change when emulation is supported.
+ }
+
+ void store( bool val, memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_CALL( store, order, ( bool_m, val ) )
+ }
+
+ bool load( memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( bool_m ) )
+ }
+
+ bool swap( bool val, memory_order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( bool_m, val ) )
+ }
+
+ bool compare_swap( bool& expected, bool new_val
+ , memory_order order = memory_order_seq_cst
+ ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
+ , ( bool_m, new_val, expected )
+ , bool, expected
+ )
+ }
+/*
+ void fence( memory_order ) volatile
+ {
+ // ToDo: Define
+ }
+*/
+ //constexpr atomic_bool( bool __v__ );
+
+ bool operator =( bool val ) volatile
+ {
+ store( val );
+ return val;
+ }
+
+ operator bool() volatile
+ {
+ return load();
+ }
+private:
+ interlocked::bool_fast_t bool_m;
+};
+
+inline bool atomic_lock_free( volatile atomic_bool* target )
+{
+ assert( target != 0 );
+ return target->lock_free();
+}
+
+inline void atomic_store( volatile atomic_bool* target, bool val )
+{
+ assert( target != 0 );
+ target->store( val );
+}
+
+inline void atomic_store_explicit( volatile atomic_bool* target, bool val
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ target->store( val, order );
+}
+
+inline bool atomic_load( volatile atomic_bool* target )
+{
+ assert( target != 0 );
+ return target->load();
+}
+
+inline bool atomic_load_explicit( volatile atomic_bool* target, memory_order order )
+{
+ assert( target != 0 );
+ return target->load( order );
+}
+
+inline bool atomic_swap( volatile atomic_bool* target, bool val )
+{
+ assert( target != 0 );
+ return target->swap( val );
+}
+
+inline bool atomic_swap_explicit( volatile atomic_bool* target, bool val
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->swap( val, order );
+}
+
+inline bool atomic_compare_swap( volatile atomic_bool* target
+ , bool* expected, bool val
+ )
+{
+ assert( target != 0 );
+ return target->compare_swap( *expected, val );
+}
+
+inline bool atomic_compare_swap_explicit( volatile atomic_bool* target
+ , bool*, bool val, memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->compare_swap( *expected, val, order );
+}
+
+inline void atomic_fence( volatile atomic_bool* target, memory_order order )
+{
+ assert( target != 0 );
+ // ToDo: Define
+}
+
+struct atomic_address
+ : noncopyable
+{
+ bool lock_free()
+ {
+ return true; // ToDo: Change when emulation is supported.
+ }
+ void store( void* val, memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_CALL( store, order, ( address_m, val ) )
+ }
+
+ void* load( memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( address_m ) )
+ }
+
+ void* swap( void* val, memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( address_m, val ) )
+ }
+
+ void* compare_swap( void*& expected, void*, new_val
+ , memory_order order = memory_order_seq_cst
+ ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
+ , ( address_m, new_val, expected )
+ , void*, expected
+ )
+ }
+/*
+ void fence( memory_order ) volatile
+ {
+ // ToDo: Define
+ }
+*/
+ void* fetch_add( std::ptrdiff_t offset
+ , memory_order order = memory_order_seq_cst
+ ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( add_assign, order, ( address_m, offset ) )
+ }
+
+ void* fetch_sub( std::ptrdiff_t offset
+ , memory_order order = memory_order_seq_cst
+ ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( subtract_assign, order, ( address_m,offset ) )
+ }
+
+ //constexpr atomic_address( void* );
+
+ void* operator =( void* address ) volatile
+ {
+ store( address );
+ return address;
+ }
+
+ operator void*() volatile
+ {
+ return load();
+ }
+
+ void* operator +=( std::ptrdiff_t offset ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( add_assign, order, ( address_m,offset ) )
+ }
+
+ void* operator -=( std::ptrdiff_t offset ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( subtract_assign, order, ( address_m,offset ) )
+ }
+private:
+ void* address_m;
+};
+
+inline bool atomic_lock_free( volatile atomic_address* target )
+{
+ assert( target != 0 );
+ return target->lock_free();
+}
+
+inline void atomic_store( volatile atomic_address* target, void* val )
+{
+ assert( target != 0 );
+ target->store( val );
+}
+
+inline void atomic_store_explicit( volatile atomic_address* target, void* val
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ target->store( val, order );
+}
+
+inline void* atomic_load( volatile atomic_address* target )
+{
+ assert( target != 0 );
+ return target->load();
+}
+
+inline void* atomic_load_explicit( volatile atomic_address* target
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->load( order );
+}
+
+inline void* atomic_swap( volatile atomic_address* target, void* val )
+{
+ assert( target != 0 );
+ return target->swap( val );
+}
+
+inline void* atomic_swap_explicit( volatile atomic_address* target, void* val
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->swap( val, order );
+}
+
+inline void* atomic_compare_swap( volatile atomic_address* target
+ , void** expected, void* new_val
+ )
+{
+ assert( target != 0 );
+ return target->compare_swap( *expected, val );
+}
+
+inline void* atomic_compare_swap_explicit( volatile atomic_address* target
+ , void** expected, void* new_val
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->compare_swap( *expected, val, order );
+}
+/*
+inline void atomic_fence( volatile atomic_address* target, memory_order order )
+{
+ assert( target != 0 );
+ // ToDo: Define
+}
+*/
+inline void* atomic_fetch_add( volatile atomic_address* target
+ , std::ptrdiff_t offset
+ )
+{
+ assert( target != 0 );
+ return target->fetch_add( offset );
+}
+
+inline void* atomic_fetch_add_explicit( volatile atomic_address* target
+ , std::ptrdiff_t offset
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->fetch_add( offset, order );
+}
+
+inline void* atomic_fetch_sub( volatile atomic_address* target
+ , std::ptrdiff_t offset
+ )
+{
+ assert( target != 0 );
+ return target->fetch_sub( offset );
+}
+
+inline void* atomic_fetch_sub_explicit( volatile atomic_address* target
+ , std::ptrdiff_t offset
+ , memory_order order
+ )
+{
+ assert( target != 0 );
+ return target->fetch_sub( offset, order );
+}
+
+template< typename T >
+struct atomic
+ : noncopyable
+{
+ bool lock_free() volatile
+ {
+ return true; // ToDo: Change when emulation is supported.
+ }
+
+ void store( T val, memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_CALL( store, order, ( val_m, val ) )
+ }
+
+ T load( memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( val_m ) )
+ }
+
+ T swap( T val, memory_order order = memory_order_seq_cst ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( val_m, val ) )
+ }
+
+ bool compare_swap( T& expected, T new_val
+ , memory_order order = memory_order_seq_cst
+ ) volatile
+ {
+ BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
+ , ( val_m, new_val, expected )
+ , T, expected
+ )
+ }
+/*
+ void fence( memory_order ) volatile
+ {
+ //ToDo: Define
+ }
+*/
+ //CPP0X(constexpr) atomic( T __v__ ) : __f__( __v__ ) { }
+
+ T operator =( T val ) volatile
+ {
+ store( val );
+ return val;
+ }
+
+ operator T() volatile
+ {
+ return load();
+ }
+private:
+ T val_m;
+};
+
+//And for each of the integral (character and integer) types listed above,
+
+/*
+#define BOOST_ACT_ATOMIC_INTEGRAL( type ) \
+struct BOOST_PP_CAT( atomic_, type ) \
+ : noncopyable \
+{ \
+ bool lock_free(); \
+ void store( integral, memory_order = memory_order_seq_cst ) volatile; \
+ integral load( memory_order = memory_order_seq_cst ) volatile; \
+ integral swap( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ bool compare_swap( integral&, integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ void fence( memory_order ) volatile;
+ integral fetch_add( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ integral fetch_sub( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ integral fetch_and( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ integral fetch_or( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+ integral fetch_xor( integral,
+ memory_order = memory_order_seq_cst ) volatile;
+
+ atomic_integral() = default;
+ constexpr atomic_integral( integral );
+ integral operator =( integral ) volatile;
+ operator integral() volatile;
+ integral operator +=( integral ) volatile;
+ integral operator -=( integral ) volatile;
+ integral operator &=( integral ) volatile;
+ integral operator |=( integral ) volatile;
+ integral operator ^=( integral ) volatile;
+private:
+ interlocked::type val_m;
+};
+
+inline bool atomic_lock_free( volatile atomic_integral* );
+inline void atomic_store( volatile atomic_integral*, integral );
+inline void atomic_store_explicit( volatile atomic_integral*, integral, memory_order );
+inline integral atomic_load( volatile atomic_integral* );
+inline integral atomic_load_explicit( volatile atomic_integral*, memory_order );
+inline integral atomic_swap( volatile atomic_integral*, integral );
+inline integral atomic_swap_explicit( volatile atomic_integral*, integral,
+ memory_order );
+inline bool atomic_compare_swap( volatile atomic_integral*, integral*, integral );
+inline bool atomic_compare_swap_explicit( volatile atomic_integral*, integral*,
+ integral, memory_order );
+inline void atomic_fence( volatile atomic_integral*, memory_order ) volatile;
+inline integral atomic_fetch_add( volatile atomic_integral*, integral );
+inline integral atomic_fetch_add_explicit( volatile atomic_integral*, integral,
+ memory_order );
+inline integral atomic_fetch_sub( volatile atomic_integral*, integral );
+inline integral atomic_fetch_sub_explicit( volatile atomic_integral*, integral,
+ memory_order );
+inline integral atomic_fetch_and( volatile atomic_integral*, integral );
+inline integral atomic_fetch_and_explicit( volatile atomic_integral*, integral,
+ memory_order );
+inline integral atomic_fetch_or( volatile atomic_integral*, integral );
+inline integral atomic_fetch_or_explicit( volatile atomic_integral*, integral,
+ memory_order );
+inline integral atomic_fetch_xor( volatile atomic_integral*, integral );
+inline integral atomic_fetch_xor_explicit( volatile atomic_integral*, integral,
+ memory_order );
+*/
+
+#undef BOOST_ACT_DETAIL_RETURN_CAS_CALL
+#undef BOOST_ACT_DETAIL_RETURN_CALL
+#undef BOOST_ACT_DETAIL_CALL
+#undef BOOST_ACT_DETAIL_CAS_CALL_MAC
+#undef BOOST_ACT_DETAIL_RETURN_CALL_MAC
+#undef BOOST_ACT_DETAIL_CALL_MAC
+#undef BOOST_ACT_DETAIL_RETURN_CALL_IMPL
+
+} } } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/cas_support.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -70,8 +70,8 @@
#else
#define BOOST_ACT_INTERLOCKED_DETAIL_CAS_SUPPORT_IMPL_INFO \
-( ( assign, ( acq_rel ) ) ) \
-( ( assign_if_was, ( acq_rel ) ) ) \
+( ( assign, ( sequential ) ) ) \
+( ( assign_if_was, ( sequential ) ) ) \
( ( load, ( acquire ) ) ) \
( ( store, ( release ) ) )
@@ -102,6 +102,7 @@
#define BOOST_ACT_INTERLOCKED_DETAIL_FUNCTION_ID_xor_assign 22
#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_0 0
+#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_thread_unsafe 1
#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_unordered 1
#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_acquire 2
#define BOOST_ACT_INTERLOCKED_DETAIL_SEMANTIC_ID_read 2
@@ -176,7 +177,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,(thread_unsafe)(unordered)(acquire)(release)(acq_rel)(sequential))) \
) \
) \
, 2 \
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/add_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/add_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/add_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/add_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign_if_was
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign_if_was (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/assign_if_was 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/assign_if_was/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitand_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitand_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitand_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/bitand_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitor_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitor_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/bitor_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/bitor_assign/detail/impl_includer.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_cage
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_cage 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/act/interlocked/compiler_cage/detail/impl_includer.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_fence
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compiler_fence 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/act/interlocked/compiler_fence/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compl_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compl_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/compl_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/compl_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/decrement
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/decrement (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/decrement 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/decrement/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/divide_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/divide_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/divide_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/divide_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/impl_includer.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/impl_includer.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/impl_includer.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1,3 +1,11 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/preprocessor/stringize.hpp>
#include BOOST_PP_STRINGIZE( BOOST_ACT_INTERLOCKED_DETAIL_IMPL_SHORT_NAME )
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/increment
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/increment (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/increment 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/increment/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/load 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/load/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/lshift_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/lshift_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/lshift_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/lshift_assign/detail/impl_includer.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_cage
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_cage 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/act/interlocked/memory_cage/detail/impl_includer.hpp>
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_fence
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/memory_fence 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/act/interlocked/memory_fence/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/mod_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/mod_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/mod_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/mod_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/multiply_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/multiply_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/multiply_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/multiply_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/negate_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/negate_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/negate_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/negate_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/retrieve
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/retrieve (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/retrieve 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/load/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/rshift_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/rshift_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/rshift_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/rshift_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/store 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/store/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/subtract_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/subtract_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/subtract_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/subtract_assign/detail/impl_includer.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/xor_assign
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/xor_assign (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/detail/impl_includer/xor_assign 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
#include <boost/act/interlocked/xor_assign/detail/impl_includer.hpp>
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -96,9 +96,9 @@
, custom_store_release \
, (( load, ( unordered ) )) \
(( store, ( release )( unordered ) )) \
- (( assign, ( acq_rel )( acquire )( release )( unordered ) ))\
- (( assign_if_was,( acq_rel ) )) \
- (( add_assign, ( acq_rel ) )) \
+ (( assign, ( acq_rel )( acquire )( release )( unordered ) )) \
+ (( assign_if_was,( acq_rel ) )) \
+ (( add_assign, ( acq_rel ) )) \
)
*/
@@ -151,37 +151,23 @@
*/
#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_RW_ORDERING_SUPPORT \
- ( acq_rel )( acquire )( release )( unordered )
+ ( sequential )( acq_rel )( acquire )( release )( unordered )
#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_LOAD_ORDERING_SUPPORT \
- ( acq_rel )( acquire )( unordered )
+ ( sequential )( acq_rel )( acquire )( unordered )
#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_STORE_ORDERING_SUPPORT \
- ( acq_rel )( release )( unordered )
+ ( sequential )( acq_rel )( release )( unordered )
#define BOOST_ACT_INTERLOCKED_DETAIL_X86_RW_ORDERING_SUPPORT \
- ( acq_rel )
+ ( sequential )
+// ToDo: Change to acquire
#define BOOST_ACT_INTERLOCKED_DETAIL_X86_LOAD_ORDERING_SUPPORT \
- ( acquire )
+ ( sequential )
#define BOOST_ACT_INTERLOCKED_DETAIL_X86_STORE_ORDERING_SUPPORT \
- ( release )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_NO_FENCE_SUPPORT \
- ( none )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_NO_FENCE_SUPPORT
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT \
- ( write )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT \
- ( full )( read )( write )
-
-#define BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_FENCE_SUPPORT \
- ( full )( read )( write )
+ ( sequential )
/******************************************************************************/
/******************************************************************************/
@@ -251,23 +237,6 @@
#define BOOST_ACT_INTERLOCKED_DETAIL_STORE_ORDERING_SUPPORT \
BOOST_ACT_INTERLOCKED_DETAIL_X86_STORE_ORDERING_SUPPORT
- #if _M_IX86_FP >= 2 // SSE2 generation is enabled
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT
-
- #elif _M_IX86_FP >= 1 // Else, if SSE generation is enabled
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT
-
- #else // Else, SSE generation not enabled
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT
-
- #endif // End detailed SSE support checks
-
#else // Else, SSE generation not enabled
#define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
@@ -290,17 +259,11 @@
#define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT \
BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_RW_ORDERING_SUPPORT
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_ITANIUM_FENCE_SUPPORT
-
#elif defined( __QMSPP_ ) // Else: if x86
#define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT \
BOOST_ACT_INTERLOCKED_DETAIL_X86_RW_ORDERING_SUPPORT
- #define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_X86_RW_ORDERING_SUPPORT
-
#else
// No support yet!
@@ -334,10 +297,10 @@
&& defined( BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT ) \
&& defined( BOOST_ACT_INTERLOCKED_DETAIL_INTERLOCKED_SIZES ) \
)
-
+/*
// ToDo: Possibly change to check for 64-bit instead
#if BOOST_ACT_INTERLOCKED_DETAIL_NONVISTA_HAS_OP_SUPPORT() // Pre-vista
-
+*/
// Note: Same name as vista windows on purpose
// ToDo: Add assembly implementation when possible even though named
// versions are not available (including 64-bit support).
@@ -347,7 +310,7 @@
, (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
(( assign_if_was, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
)
-
+/*
#elif BOOST_ACT_INTERLOCKED_DETAIL_VISTA_HAS_OP_SUPPORT() // Vista and up
// Note: Same name as pre-vista windows on purpose
@@ -358,8 +321,8 @@
, (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
(( assign_if_was, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
)
-
#endif // End WINVER checks
+*/
#elif defined( __GNUC__ ) // GCC
@@ -371,23 +334,6 @@
#define BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT ( acq_rel )
- #ifdef __SSE2__ // SSE2 support
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_SSE2_FENCE_SUPPORT
-
- #elif defined( __SSE__ ) // SSE support
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_SSE_FENCE_SUPPORT
-
- #else // Else: Neither SSE nor SSE2 support
-
- #define BOOST_ACT_INTERLOCKED_DETAIL_FENCE_SUPPORT \
- BOOST_ACT_INTERLOCKED_DETAIL_X86_FENCE_SUPPORT
-
- #endif // End SSE detection
-
#define BOOST_ACT_INTERLOCKED_DETAIL_OPERATION_SUPPORT \
( gcc_x86, (32), volatile_load_acquire, volatile_store_release \
, (( assign, BOOST_ACT_INTERLOCKED_DETAIL_RW_ORDERING_SUPPORT )) \
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/detail/load_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_LOAD_DETAIL_LOAD_SEQUENTIAL_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_DETAIL_LOAD_SEQUENTIAL_DEFAULT_IMPL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct load_sequential_default_impl
+{
+ template< typename TargetType >
+ static typename remove_cv< TargetType >::type execute( TargetType& target )
+ {
+ // ToDo: Change so that it doesn't rely on const_cast (use a memory cage)
+ return interlocked::assign_if_was< sequential >
+ ( const_cast< typename remove_cv< TargetType >::type& >( target )
+ , 0, 0
+ );
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,90 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_LOAD_LOAD_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_SEQUENTIAL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( load, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/integer/detail/interlocked_bool.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( load, sequential )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+load( TargetType& destination )
+{
+ return detail::impl_meta< detail::load_sequential_impl, TargetType >
+ ::execute( destination );
+
+}
+
+template< typename Semantics, typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+load( TargetType& destination )
+{
+ typedef typename remove_cv< TargetType >::type result_type;
+
+ return result_type
+ (
+ interlocked::load< sequential >
+ ( interlocked_bool_internal_value( destination )
+ )
+ != 0
+ );
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/load/load_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_LOAD_LOAD_SEQUENTIAL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_LOAD_LOAD_SEQUENTIAL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( load, sequential )
+
+#include <boost/act/interlocked/detail/interlocked_operand_validators.hpp>
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ , mpl::not_< detail::is_interlocked_bool< TargetType > >
+ >
+, remove_cv< TargetType >
+>
+::type
+load( TargetType const& target );
+
+template< typename Semantics, typename TargetType >
+typename lazy_enable_if
+<
+ mpl::and_
+ <
+ is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ , detail::is_interlocked_bool< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+load( TargetType& destination );
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -6,15 +6,15 @@
http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_HPP
+#ifndef BOOST_ACT_INTERLOCKED_MEMORY_FENCE_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_HPP
-#include <boost/act/interlocked/fence/fence.hpp>
-#include <boost/act/interlocked/fence/fence_thread_unsafe.hpp>
-#include <boost/act/interlocked/fence/fence_unordered.hpp>
-#include <boost/act/interlocked/fence/fence_acquire.hpp>
-#include <boost/act/interlocked/fence/fence_release.hpp>
-#include <boost/act/interlocked/fence/fence_acq_rel.hpp>
-#include <boost/act/interlocked/fence/fence_sequential.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_thread_unsafe.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_unordered.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_acquire.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_release.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_sequential.hpp>
#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_read_vc_x86
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_read_vc_x86 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,18 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_READ_VC_X86_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_READ_VC_X86_HPP
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void fence_read_impl() { __asm lfence }
-
-} } } }
-
-#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vc_x86
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vc_x86 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,18 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_VC_X86_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_VC_X86_HPP
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void fence_impl() { __asm mfence }
-
-} } } }
-
-#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vista
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_vista 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,24 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_VISTA_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_VISTA_HPP
-
-// ToDo: Don't include windows.h
-#include <windows.h>
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void fence_impl()
-{
- MemoryBarrier();
-}
-
-} } } }
-
-#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_write_vc_x86
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/fence_write_vc_x86 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,18 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_WRITE_VC_X86_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_DETAIL_FENCE_WRITE_VC_X86_HPP
-
-namespace boost { namespace act { namespace interlocked { namespace detail {
-
-inline void fence_write_impl() { __asm sfence }
-
-} } } }
-
-#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/impl_includer.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/impl_includer.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,9 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_LOCAL_INCLUDE()
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acq_rel_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acq_rel_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,27 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_DETAIL_MEM_FENCE_ACQ_REL_DEF_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_DETAIL_MEM_FENCE_ACQ_REL_DEF_HPP
+
+#include <boost/act/interlocked/memory_fence/memory_fence_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_acq_rel_default_impl
+{
+ // ToDo: Use store or load acq_rel when not dependenton explicit barriers.
+ static void execute()
+ {
+ memory_fence< sequential >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acquire_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_acquire_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,27 @@
+/*=============================================================================
+ 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_MEM_FENCE_DETAIL_MEM_FENCE_ACQ_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_MEM_FENCE_DETAIL_MEM_FENCE_ACQ_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_acquire_default_impl
+{
+ // ToDo: Use store or load acquire when not dependenton explicit barriers.
+ static void execute()
+ {
+ interlocked::memory_fence< acq_rel >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_release_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_release_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,27 @@
+/*=============================================================================
+ 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_MEM_FENCE_DETAIL_MEM_FENCE_REL_DEF_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_MEM_FENCE_DETAIL_MEM_FENCE_REL_DEF_IMPL_HPP
+
+#include <boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_release_default_impl
+{
+ // ToDo: Use store or load acquire when not dependenton explicit barriers.
+ static void execute()
+ {
+ interlocked::memory_fence< acq_rel >();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 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_MEMORY_FENCE_DETAIL_MEM_FENCE_SEQ_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_DETAIL_MEM_FENCE_SEQ_DEFAULT_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+#include <boost/act/config/interlocked/types.hpp>
+
+// ToDo: Change the order that these are selected without creating a loop
+#if BOOST_ACT_INTERLOCKED_HAS( assign_if_was, sequential )
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_default_impl
+{
+ static void execute()
+ {
+ int_fast8_t dummy;
+
+ assign_if_was< sequential >( dummy, 0, 0 );
+ }
+};
+
+} } } }
+
+#elif BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
+
+#include <boost/act/interlocked/assign/assign_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_default_impl
+{
+ static void execute()
+ {
+ int_fast8_t dummy;
+
+ assign< sequential >( dummy, 0 );
+ }
+};
+
+} } } }
+
+#elif BOOST_ACT_INTERLOCKED_HAS( store, sequential )
+
+#include <boost/act/interlocked/store/store_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_default_impl
+{
+ static void execute()
+ {
+ int_fast8_t dummy;
+
+ store< sequential >( dummy, 0 );
+ }
+};
+
+} } } }
+
+#else
+
+#error You found the gold at the end of the rainbow! rivorus_katarni_at_[hidden]
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_windows
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_sequential_windows 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,26 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_DETAIL_MEM_FENCE_SEQ_WINDOWS_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_DETAIL_MEM_FENCE_SEQ_WINDOWS_HPP
+
+#include <windows.h> // ToDo: Remove (forward declare functions)
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_sequential_impl
+{
+ static void execute()
+ {
+ MemoryBarrier();
+ }
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_thread_unsafe_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_thread_unsafe_default 2007-07-14 04:46:15 EDT (Sat, 14 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_MEMORY_FENCE_DETAIL_MEM_FENCE_UNSAFE_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_DETAIL_MEM_FENCE_UNSAFE_DEFAULT_HPP
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct memory_fence_thread_unsafe_default_impl
+{
+ static void execute() {}
+};
+
+} } } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_unordered_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/detail/memory_fence_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 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_MEMORY_FENCE_DETAIL_MEM_FENCE_UN_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_DETAIL_MEM_FENCE_UN_DEFAULT_HPP
+
+struct memory_fence_unordered_default_impl
+{
+ static void execute() {}
+};
+
+} } } }
+
+#endif
Deleted: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/fence.hpp
==============================================================================
Copied: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence.hpp (from r7409, /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/fence.hpp)
==============================================================================
--- /sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/fence.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,38 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, _ )
+
+#include <boost/act/interlocked/semantics/default.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+void memory_fence()
+{
+ return interlocked::memory_fence< sequential >();
+}
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, default_ > >::type memory_fence()
+{
+ return interlocked::memory_fence< sequential >();
+}
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_ACQ_REL_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_ACQ_REL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, acq_rel )
+
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( memory_fence, acq_rel )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, acq_rel > >::type memory_fence()
+{
+ return detail::impl_meta< detail::memory_fence_acq_rel_impl, Semantics >
+ ::execute();
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acq_rel_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_ACQ_REL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_ACQ_REL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, acq_rel )
+
+#include <boost/act/interlocked/semantics/acq_rel.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, acq_rel > >::type memory_fence();
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_ACQUIRE_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_ACQUIRE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, acquire )
+
+#include <boost/act/interlocked/semantics/acquire.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( memory_fence, acquire )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, acquire > >::type memory_fence()
+{
+ return detail::impl_meta< detail::memory_fence_acquire_impl, Semantics >
+ ::execute();
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_acquire_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_ACQUIRE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_ACQUIRE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, acquire )
+
+#include <boost/act/interlocked/semantics/acquire.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, acquire > >::type memory_fence();
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, _ )
+
+#include <boost/act/interlocked/semantics/default.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+void memory_fence();
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, default_ > >::type memory_fence();
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_RELEASE_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_RELEASE_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, release )
+
+#include <boost/act/interlocked/semantics/release.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( memory_fence, release )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, release > >::type memory_fence()
+{
+ return detail::impl_meta< detail::memory_fence_release_impl, Semantics >
+ ::execute();
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_release_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_RELEASE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_RELEASE_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, release )
+
+#include <boost/act/interlocked/semantics/release.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, release > >::type memory_fence();
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,44 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_SEQUENTIAL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/act/interlocked/detail/impl_meta.hpp>
+
+#include <boost/act/interlocked/detail/impl.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_IMPL_INFO \
+( memory_fence, sequential )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_BEGIN()
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, sequential > >::type memory_fence()
+{
+ return detail::impl_meta< detail::memory_fence_sequential_impl, Semantics >
+ ::execute();
+}
+
+} } }
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_IMPL_END()
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,29 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_SEQUENTIAL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_SEQUENTIAL_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( memory_fence, sequential )
+
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, sequential > >::type memory_fence();
+
+} } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_THREAD_UNSAFE_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_THREAD_UNSAFE_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, thread_unsafe > >::type memory_fence()
+{
+}
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_thread_unsafe_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,23 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_THREAD_UNSAFE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_THREAD_UNSAFE_FWD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/act/interlocked/semantics/thread_unsafe.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, thread_unsafe > >::type memory_fence();
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_UNORDERED_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_UNORDERED_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, unordered > >::type memory_fence()
+{
+}
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence/memory_fence_unordered_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,22 @@
+/*=============================================================================
+ 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_MEMORY_FENCE_MEMORY_FENCE_UNORDERED_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_MEMORY_FENCE_UNORDERED_FWD_HPP
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/act/interlocked/semantics/unordered.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics >
+typename enable_if< is_same< Semantics, unordered > >::type memory_fence();
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/memory_fence_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -6,15 +6,15 @@
http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-#ifndef BOOST_ACT_INTERLOCKED_FENCE_FWD_HPP
-#define BOOST_ACT_INTERLOCKED_FENCE_FWD_HPP
+#ifndef BOOST_ACT_INTERLOCKED_MEMORY_FENCE_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MEMORY_FENCE_FWD_HPP
-#include <boost/act/interlocked/fence/fence_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_thread_unsafe_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_unordered_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_acquire_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_release_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_acq_rel_fwd.hpp>
-#include <boost/act/interlocked/fence/fence_sequential_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_thread_unsafe_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_unordered_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_acquire_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_release_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_acq_rel_fwd.hpp>
+#include <boost/act/interlocked/memory_fence/memory_fence_sequential_fwd.hpp>
#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_SEQUENTIAL_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_SEQUENTIAL_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/sequential.hpp>
+#include <boost/act/interlocked/load/load_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation )
+{
+ typedef typename remove_cv< TargetType >::type unqualified_type;
+ unqualified_type old_value = interlocked::load< sequential >( destination ),
+ expected_value;
+
+ do
+ {
+ expected_value = old_value;
+
+ old_value = interlocked::assign_if_was< sequential >
+ ( destination
+ , operation( expected_value )
+ , expected_value
+ );
+ }
+ while( old_value != expected_value );
+
+ return old_value;
+}
+
+} } }
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/modify/modify_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_SEQUENTIAL_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_MODIFY_MODIFY_SEQUENTIAL_FWD_HPP
+
+#include <boost/act/interlocked/assign_if_was/assign_if_was_sequential.hpp>
+#include <boost/act/interlocked/detail/cas_support.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/act/interlocked/semantics/sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked {
+
+template< typename Semantics, typename TargetType, typename OperationType >
+typename lazy_enable_if
+<
+ mpl::and_< is_same< Semantics, sequential >
+ , detail::are_valid_store_style_params< TargetType >
+ >
+, remove_cv< TargetType >
+>
+::type
+modify( TargetType& destination, OperationType operation );
+
+} } }
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_release_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -30,41 +30,41 @@
} } } }
-#else // Else: Custom interlocked store for this system (no default)
+#else
#include <boost/act/config/interlocked/has.hpp>
-#if BOOST_ACT_INTERLOCKED_HAS( modify, release )
+#if BOOST_ACT_INTERLOCKED_HAS( assign, release )
-#include <boost/type_traits/remove_cv.hpp>
+#include <boost/act/interlocked/assign/assign_release.hpp>
namespace boost { namespace act { namespace interlocked { namespace detail {
-template< typename SourceType >
-class store_release_default_fun
+struct store_release_default_impl
{
-public:
- explicit store_release_default_fun( SourceType& source_init )
- : source_m( source_init ) {}
-public:
- template< typename TargetType >
- typename remove_cv< TargetType >::type operator ()( TargetType& ) const
+ template< typename TargetType, typename SourceType >
+ void execute( TargetType& target, SourceType& source )
{
- return static_cast< typename remove_cv< TargetType >::type >( source_m );
+ assign< release >( target, source );
}
-private:
- SourceType& source_m;
};
+} } } }
+
+#elif BOOST_ACT_INTERLOCKED_HAS( store, sequential )
+
+#include <boost/act/interlocked/store/store_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
struct store_release_default_impl
{
template< typename TargetType, typename SourceType >
- static typename remove_cv< TargetType >::type
- execute( TargetType& target, SourceType& source )
+ static void execute( TargetType& target
+ , SourceType const& source
+ )
{
- return modify< release >( target
- , store_release_default_fun< SourceType >( source )
- );
+ interlocked::store< sequential >( target, source );
}
};
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_STORE_DETAIL_STORE_SEQUENTIAL_DEFAULT_IMPL_HPP
+#define BOOST_ACT_INTERLOCKED_STORE_DETAIL_STORE_SEQUENTIAL_DEFAULT_IMPL_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+// ToDo: Possibly prefer memory barrier
+#if BOOST_ACT_INTERLOCKED_HAS( assign, sequential )
+
+#include <boost/act/interlocked/assign/assign_sequential.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_sequential_default_impl
+{
+ template< typename TargetType, typename SourceType >
+ void execute( TargetType& target, SourceType& source )
+ {
+ return assign< sequential >( target, source );
+ }
+};
+
+} } } }
+
+#else
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_sequential_default_impl
+{
+ template< typename TargetType, typename SourceType >
+ static void execute( TargetType&, SourceType& )
+ {
+ BOOST_MPL_ASSERT_MSG
+ (
+ ( mpl::apply< mpl::always< mpl::false_ >, TargetType >::type::value )
+ , NO_DEFAULT_INTERLOCKED_STORE_SEQUENTIAL_IMPLEMENTATION_FOR_THIS_SYSTEM
+ , ()
+ );
+ }
+};
+
+} } } }
+
+#endif
+
+#endif
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/store/detail/store_unordered_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -29,10 +29,26 @@
} } } }
-#else // Else: Custom interlocked store for this system (no default)
+#elif BOOST_ACT_INTERLOCKED_HAS( assign, unordered )
+
+#include <boost/act/interlocked/assign/assign_unordered.hpp>
+
+namespace boost { namespace act { namespace interlocked { namespace detail {
+
+struct store_unordered_default_impl
+{
+ template< typename TargetType, typename SourceType >
+ void execute( TargetType& target, SourceType& source )
+ {
+ assign< unordered >( target, source );
+ }
+};
+
+} } } }
+
+#else
#include <boost/act/interlocked/store/store_release.hpp>
-#include <boost/type_traits/remove_cv.hpp>
namespace boost { namespace act { namespace interlocked { namespace detail {
@@ -42,7 +58,7 @@
static typename remove_cv< TargetType >::type execute( TargetType& target )
{
// ToDo: Look ahead for store_release_support and produce error here
- return interlocked::store< release >( target );
+ interlocked::store< release >( target );
}
};
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_sequential_default
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/detail/subtract_assign_sequential_default 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_SEQ_DEFAULT_HPP
+#define BOOST_ACT_INTERLOCKED_SUB_ASSIGN_DETAIL_SUB_ASSIGN_SEQ_DEFAULT_HPP
+
+#include <boost/act/interlocked/detail/binary_default.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT_INFO \
+( subtract_assign, sequential, - )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_DEFAULT()
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_SEQ_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_SEQ_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( subtract_assign, sequential )
+
+#include <boost/act/interlocked/detail/binary_forwarder.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_INFO \
+( subtract_assign, sequential, -, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER()
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_sequential_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,25 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_SEQ_FWD_HPP
+#define BOOST_ACT_INTERLOCKED_SUBTRACT_ASSIGN_SUBTRACT_ASSIGN_SEQ_FWD_HPP
+
+#include <boost/act/config/interlocked/has.hpp>
+
+#if BOOST_ACT_INTERLOCKED_HAS( subtract_assign, sequential )
+
+#include <boost/act/interlocked/detail/binary_forwarder_fwd.hpp>
+
+#define BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD_INFO \
+( subtract_assign, sequential, additive )
+
+#include BOOST_ACT_INTERLOCKED_DETAIL_BINARY_FORWARDER_FWD()
+
+#endif
+
+#endif
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_thread_unsafe.hpp
==============================================================================
Added: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked/subtract_assign/subtract_assign_thread_unsafe_fwd.hpp
==============================================================================
Modified: sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp (original)
+++ sandbox/SOC/2006/concurrency/trunk/boost/act/interlocked_fwd.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -13,14 +13,19 @@
#include <boost/act/interlocked/assign_if_was_fwd.hpp>
#include <boost/act/interlocked/bitand_assign_fwd.hpp>
#include <boost/act/interlocked/bitor_assign_fwd.hpp>
+#include <boost/act/interlocked/compiler_cage_fwd.hpp>
+#include <boost/act/interlocked/compiler_fence_fwd.hpp>
#include <boost/act/interlocked/decrement_fwd.hpp>
#include <boost/act/interlocked/divide_assign_fwd.hpp>
#include <boost/act/interlocked/increment_fwd.hpp>
#include <boost/act/interlocked/integer_fwd.hpp>
#include <boost/act/interlocked/load_fwd.hpp>
#include <boost/act/interlocked/lshift_assign_fwd.hpp>
+#include <boost/act/interlocked/memory_cage_fwd.hpp>
+#include <boost/act/interlocked/memory_fence_fwd.hpp>
#include <boost/act/interlocked/modify_fwd.hpp>
#include <boost/act/interlocked/multiply_assign_fwd.hpp>
+#include <boost/act/interlocked/negate_assign_fwd.hpp>
#include <boost/act/interlocked/rshift_assign_fwd.hpp>
#include <boost/act/interlocked/semantics_fwd.hpp>
#include <boost/act/interlocked/store_fwd.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/act.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/act.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/act.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -15,38 +15,45 @@
]
[template concept[ name ] [^[name]]]
+[template model[ name ] [^[*[name]]]]
[template tablenote[ body ] ['Note: [body] --end note]]
[def __alert__ [$images/alert.png]]
[def __note__ [$images/note.png]]
[def __OpenMP__ [@http://www.OpenMP.org OpenMP]]
-[def __consumer_policy__ [link boost_act.concepts.consumer_concepts.consumer_policy [concept Consumer Policy]]]
-[def __consumer__ [link boost_act.concepts.consumer_concepts.consumer [concept Consumer]]]
-[def __queue_policy__ [link boost_act.concepts.queue_concepts.queue_policy [concept Queue Policy]]]
-[def __pc_queue__ [link boost_act.concepts.queue_concepts.pc_queue [concept PC Queue]]]
-[def __interlocked_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_type [concept Interlocked Type]]]
-[def __interlocked_natural_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_natural_type [concept Interlocked Natural Type]]]
-[def __interlocked_cage__ [link boost_act.interlocked.interlocked_concepts.interlocked_cage [concept Interlocked Cage]]]
-[def __interlocked_cages__ [link boost_act.interlocked.interlocked_concepts.interlocked_cage [concept Interlocked Cages]]]
-[def __interlocked_operation__ [link boost_act.interlocked.interlocked_concepts.interlocked_operation [concept Interlocked Operation]]]
-[def __interlocked_operations__ [link boost_act.interlocked.interlocked_concepts.interlocked_operation [concept Interlocked Operations]]]
-[def __interlocked_semantic_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_semantic_type [concept Interlocked Semantic Type]]]
-[def __interlocked_semantic_types__ [link boost_act.interlocked.interlocked_concepts.interlocked_semantic_type [concept Interlocked Semantic Types]]]
-[def __interlocked_semantic_models__ [link boost_act.interlocked.interlocked_semantic_models [concept Interlocked Semantic Models]]]
-[def __interlocked_cage_models__ [link boost_act.interlocked.interlocked_cage_models [concept Interlocked Cage Models]]]
+[def __consumer_policy__ [link boost_act.concepts.consumer_concepts.consumer_policy [concept Consumer Policy]]]
+[def __consumer__ [link boost_act.concepts.consumer_concepts.consumer [concept Consumer]]]
+[def __queue_policy__ [link boost_act.concepts.queue_concepts.queue_policy [concept Queue Policy]]]
+[def __pc_queue__ [link boost_act.concepts.queue_concepts.pc_queue [concept PC Queue]]]
+[def __interlocked_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_type [concept Interlocked Type]]]
+[def __interlocked_natural_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_natural_type [concept Interlocked Natural Type]]]
+[def __interlocked_cage__ [link boost_act.interlocked.interlocked_concepts.interlocked_cage [concept Interlocked Cage]]]
+[def __interlocked_cages__ [link boost_act.interlocked.interlocked_concepts.interlocked_cage [concept Interlocked Cages]]]
+[def __interlocked_fence__ [link boost_act.interlocked.interlocked_concepts.interlocked_fence [concept Interlocked Fence]]]
+[def __interlocked_fences__ [link boost_act.interlocked.interlocked_concepts.interlocked_fence [concept Interlocked Fences]]]
+[def __interlocked_operation__ [link boost_act.interlocked.interlocked_concepts.interlocked_operation [concept Interlocked Operation]]]
+[def __interlocked_operations__ [link boost_act.interlocked.interlocked_concepts.interlocked_operation [concept Interlocked Operations]]]
+[def __interlocked_semantic_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_semantic_type [concept Interlocked Semantic Type]]]
+[def __interlocked_semantic_types__ [link boost_act.interlocked.interlocked_concepts.interlocked_semantic_type [concept Interlocked Semantic Types]]]
+[def __interlocked_semantic_models__ [link boost_act.interlocked.interlocked_semantic_models [concept Interlocked Semantic Models]]]
+[def __interlocked_cage_models__ [link boost_act.interlocked.interlocked_cage_models [concept Interlocked Cage Models]]]
+[def __interlocked_fence_models__ [link boost_act.interlocked.interlocked_fence_models [concept Interlocked Fence Models]]]
[def __interlocked_arithmetic_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type [concept Interlocked Arithmetic Type]]]
[def __interlocked_integer_type__ [link boost_act.interlocked.interlocked_concepts.interlocked_integer_type [concept Interlocked Integer Type]]]
-[def __interlocked_memory_cage__ [link boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage [concept Interlocked Memory Cage]]]
-[def __interlocked_compiler_cage__ [link boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage [concept Interlocked Compiler Cage]]]
-[def __worker_policy__ [link boost_act.concepts.worker_policy [concept Worker Policy]]]
-[def __worker__ [link boost_act.concepts.worker [concept Worker]]]
-[def __threaded_worker_policy__ [link boost_act.concepts.threaded_worker_policy [concept Threaded Worker Policy]]]
-[def __threaded_worker__ [link boost_act.concepts.threaded_worker [concept Threaded Worker]]]
+[def __interlocked_memory_cage__ [link boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage [model Interlocked Memory Cage]]]
+[def __interlocked_memory_cages__ [link boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage [model Interlocked Memory Cages]]]
+[def __interlocked_compiler_cage__ [link boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage [model Interlocked Compiler Cage]]]
+[def __interlocked_compiler_cages__ [link boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage [model Interlocked Compiler Cages]]]
+[def __interlocked_memory_fence__ [link boost_act.interlocked.interlocked_fence_models.interlocked_memory_fence [model Interlocked Memory Fence]]]
+[def __interlocked_memory_fences__ [link boost_act.interlocked.interlocked_fence_models.interlocked_memory_fence [model Interlocked Memory Fences]]]
+[def __interlocked_compiler_fence__ [link boost_act.interlocked.interlocked_fence_models.interlocked_compiler_fence [model Interlocked Compiler Fence]]]
+[def __interlocked_compiler_fences__ [link boost_act.interlocked.interlocked_fence_models.interlocked_compiler_fence [model Interlocked Compiler Fence]]]
+[def __worker_policy__ [link boost_act.concepts.worker_policy [concept Worker Policy]]]
+[def __worker__ [link boost_act.concepts.worker [concept Worker]]]
+[def __threaded_worker_policy__ [link boost_act.concepts.threaded_worker_policy [concept Threaded Worker Policy]]]
+[def __threaded_worker__ [link boost_act.concepts.threaded_worker [concept Threaded Worker]]]
[include beta_warning.qbk]
-[include brief_description.qbk]
-[include introduction.qbk]
-[include compiler_setup.qbk]
[include interlocked.qbk]
[include rationale.qbk]
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1,11 +1,9 @@
index.html
boost_act/beta_warning.html
-boost_act/brief_description.html
-boost_act/introduction.html
-boost_act/compiler_setup.html
boost_act/interlocked.html
boost_act/interlocked/interlocked_concepts.html
boost_act/interlocked/interlocked_concepts/interlocked_operation.html
+boost_act/interlocked/interlocked_concepts/interlocked_fence.html
boost_act/interlocked/interlocked_concepts/interlocked_cage.html
boost_act/interlocked/interlocked_concepts/interlocked_semantic_type.html
boost_act/interlocked/interlocked_concepts/interlocked_type.html
@@ -13,6 +11,9 @@
boost_act/interlocked/interlocked_concepts/interlocked_arithmetic_type.html
boost_act/interlocked/interlocked_concepts/interlocked_integer_type.html
boost_act/interlocked/interlocked_semantic_models.html
+boost_act/interlocked/interlocked_fence_models.html
+boost_act/interlocked/interlocked_fence_models/interlocked_memory_fence.html
+boost_act/interlocked/interlocked_fence_models/interlocked_compiler_fence.html
boost_act/interlocked/interlocked_cage_models.html
boost_act/interlocked/interlocked_cage_models/interlocked_memory_cage.html
boost_act/interlocked/interlocked_cage_models/interlocked_compiler_cage.html
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/beta_warning.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/beta_warning.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/beta_warning.html 2007-07-14 04:46:15 EDT (Sat, 14 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>Beta Warning</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="../index.html" title="Boost.Act" /><link rel="next" href="brief_description.html" title="Brief Description" /><script type="text/javascript" src="../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Beta Warning</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="../index.html" title="Boost.Act" /><link rel="next" href="interlocked.html" title="Interlocked" /><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="brief_description.html">
+ <a accesskey="n" href="interlocked.html">
<div class="next-icon"></div>
</a>
</div>
@@ -143,7 +143,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="brief_description.html">
+ <a accesskey="n" href="interlocked.html">
<div class="next-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/compiler_setup.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/compiler_setup.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/compiler_setup.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -88,7 +88,7 @@
</div>
</div>
<a id="boost_act.compiler_setup.activating_openmp_support_in_visual_c___2005"></a>
- <h4><a id="id390176"></a>
+ <h4><a id="id390162"></a>
<a href="compiler_setup.html#boost_act.compiler_setup.activating_openmp_support_in_visual_c___2005">Activating
OpenMP Support in Visual C++ 2005</a>
</h4>
@@ -139,7 +139,7 @@
</div>
</div>
<div class="table">
- <a id="id390247"></a>
+ <a id="id390233"></a>
<p class="title">
<b>Table 1. OpenMP Extension Support</b>
</p>
@@ -301,7 +301,7 @@
<p>
</p>
<a id="boost_act.compiler_setup.activating_openmp_support_in_visual_c___2005"></a>
- <h4><a id="id388496"></a>
+ <h4><a id="id388482"></a>
<a href="compiler_setup.html#boost_act.compiler_setup.activating_openmp_support_in_visual_c___2005">Activating
OpenMP Support in Visual C++ 2005</a>
</h4>
@@ -315,7 +315,7 @@
get a linker error upon build.
</p>
<a id="boost_act.compiler_setup.linking_with_boost_threads"></a>
- <h4><a id="id388556"></a>
+ <h4><a id="id388542"></a>
<a href="compiler_setup.html#boost_act.compiler_setup.linking_with_boost_threads">Linking
with Boost.Threads</a>
</h4>
@@ -326,7 +326,7 @@
and Install</a>.
</p>
<a id="boost_act.compiler_setup.compiling_the_library"></a>
- <h4><a id="id388610"></a>
+ <h4><a id="id388596"></a>
<a href="compiler_setup.html#boost_act.compiler_setup.compiling_the_library">Compiling the
Library</a>
</h4>
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-14 04:46:15 EDT (Sat, 14 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</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="compiler_setup.html" title="Compiler Setup" /><link rel="next" href="interlocked/interlocked_concepts.html" title="Interlocked Concepts" /><script type="text/javascript" src="../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked</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="beta_warning.html" title="Beta Warning" /><link rel="next" href="interlocked/interlocked_concepts.html" title="Interlocked Concepts" /><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="compiler_setup.html">
+ <a accesskey="p" href="beta_warning.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -110,6 +110,12 @@
</dt>
<dt>
<span class="section">
+ <a href="interlocked/interlocked_concepts/interlocked_fence.html">Interlocked
+ Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
<a href="interlocked/interlocked_concepts/interlocked_cage.html">Interlocked
Cage</a>
</span>
@@ -154,6 +160,28 @@
</dt>
<dt>
<span class="section">
+ <a href="interlocked/interlocked_fence_models.html">Interlocked
+ Fence Models</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="section">
+ <a href="interlocked/interlocked_fence_models/interlocked_memory_fence.html">Interlocked
+ Memory Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="interlocked/interlocked_fence_models/interlocked_compiler_fence.html">Interlocked
+ Compiler Fence</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="section">
<a href="interlocked/interlocked_cage_models.html">Interlocked
Cage Models</a>
</span>
@@ -232,7 +260,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="compiler_setup.html">
+ <a accesskey="p" href="beta_warning.html">
<div class="prev-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models.html 2007-07-14 04:46:15 EDT (Sat, 14 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 Cage Models</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_semantic_models.html" title="Interlocked Semantic Models" /><link rel="next" href="interlocked_cage_models/interlocked_memory_cage.html" title="Interlocked Memory Cage" /><script type="text/javascript" src="../../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Cage Models</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_fence_models/interlocked_compiler_fence.html" title="Interlocked Compiler Fence" /><link rel="next" href="interlocked_cage_models/interlocked_memory_cage.html" title="Interlocked Memory Cage" /><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_semantic_models.html">
+ <a accesskey="p" href="interlocked_fence_models/interlocked_compiler_fence.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -121,7 +121,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="interlocked_semantic_models.html">
+ <a accesskey="p" href="interlocked_fence_models/interlocked_compiler_fence.html">
<div class="prev-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_compiler_cage.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_compiler_cage.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_compiler_cage.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -118,7 +118,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.description"></a>
- <h6><a id="id467284"></a>
+ <h6><a id="id467243"></a>
<a href="interlocked_compiler_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.description">Description</a>
</h6>
<p>
@@ -128,7 +128,7 @@
operations with respect to other threads of execution is not specified.
</p>
<a id="boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.model_of"></a>
- <h6><a id="id467335"></a>
+ <h6><a id="id467294"></a>
<a href="interlocked_compiler_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.model_of">Model
of</a>
</h6>
@@ -141,7 +141,7 @@
</ul>
</div>
<a id="boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.example"></a>
- <h6><a id="id467387"></a>
+ <h6><a id="id467346"></a>
<a href="interlocked_compiler_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_compiler_cage.example">Example</a>
</h6>
<p>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_memory_cage.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_memory_cage.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_cage_models/interlocked_memory_cage.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -118,24 +118,50 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage.description"></a>
- <h6><a id="id466283"></a>
+ <h6><a id="id466230"></a>
<a href="interlocked_memory_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage.description">Description</a>
</h6>
<p>
An <a href="../interlocked_concepts/interlocked_cage.html" title="Interlocked Cage">
<code class="literal">Interlocked Cage</code></a> whose instantiations and semantics
apply to both compiler reordering of operations as well as order of visibility
- of operations with respect to other threads of execution. Internally,
- <code class="literal">Interlocked Memory Cages</code> often imply low-level memory
- and compiler barriers during construction and/or destruction and therefore
- should be used sparingly. When given the option, one should always prefer
- to directly apply semantics to their operation rather than use a cage.
- One common use would be to implement a user-defined interlocked operation
- with strict ordering requirements when the target system does not provide
- direct support for such semantics for that particular operation.
+ of operations with respect to other threads of execution.
</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 most cases, you should avoid explicit cages and should instead favor
+ the use of <a href="../interlocked_concepts/interlocked_operation.html" title="Interlocked Operation">
+ <code class="literal">Interlocked Operations</code></a> with proper semantics
+ as they may allow for more optimized code generation and are generally
+ less prone to error.
+ </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_cage_models.interlocked_memory_cage.model_of"></a>
- <h6><a id="id466351"></a>
+ <h6><a id="id466310"></a>
<a href="interlocked_memory_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage.model_of">Model
of</a>
</h6>
@@ -148,7 +174,7 @@
</ul>
</div>
<a id="boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage.example"></a>
- <h6><a id="id466401"></a>
+ <h6><a id="id466360"></a>
<a href="interlocked_memory_cage.html#boost_act.interlocked.interlocked_cage_models.interlocked_memory_cage.example">Example</a>
</h6>
<p>
@@ -160,10 +186,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id466427">
+ <div class="style-switcher-box" id="id466385">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id466427',
+ 'id466385',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -103,6 +103,12 @@
</dt>
<dt>
<span class="section">
+ <a href="interlocked_concepts/interlocked_fence.html">Interlocked
+ Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
<a href="interlocked_concepts/interlocked_cage.html">Interlocked
Cage</a>
</span>
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.description"></a>
- <h6><a id="id460794"></a>
+ <h6><a id="id460373"></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="id461004"></a>
+ <h6><a id="id460583"></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="id461053"></a>
+ <h6><a id="id460631"></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="id461268"></a>
+ <a id="id460841"></a>
<p class="title">
<b>Table 6. Interlocked Arithmetic Type Requirements</b>
</p>
@@ -339,7 +339,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.headers"></a>
- <h6><a id="id461882"></a>
+ <h6><a id="id461448"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.headers">Headers</a>
</h6>
<p>
@@ -351,10 +351,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id461904">
+ <div class="style-switcher-box" id="id461469">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id461904',
+ 'id461469',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -400,7 +400,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.example"></a>
- <h6><a id="id462785"></a>
+ <h6><a id="id462350"></a>
<a href="interlocked_arithmetic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_arithmetic_type.example">Example</a>
</h6>
<p>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_cage.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_cage.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_cage.html 2007-07-14 04:46:15 EDT (Sat, 14 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 Cage</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_operation.html" title="Interlocked Operation" /><link rel="next" href="interlocked_semantic_type.html" title="Interlocked Semantic Type" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Cage</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_fence.html" title="Interlocked Fence" /><link rel="next" href="interlocked_semantic_type.html" title="Interlocked Semantic Type" /><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_operation.html">
+ <a accesskey="p" href="interlocked_fence.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -89,19 +89,17 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_cage.description"></a>
- <h6><a id="id456351"></a>
+ <h6><a id="id455779"></a>
<a href="interlocked_cage.html#boost_act.interlocked.interlocked_concepts.interlocked_cage.description">Description</a>
</h6>
<p>
An <code class="literal">Interlocked Cage</code> is a template whose instantiations
- are types which manage the order of visibility of read and write operations
- that occur during their objects' lifetime, effectively providing those
- operations with potentially more restrictive ordering constraints. Semantics
- for such cages may be specified by the programmer at compile-time via explicit
- template arguments.
+ are types which manage the order of read and write operations with respect
+ to construction and destruction of the cage. Semantics may be specified
+ by the programmer at compile-time via explicit template arguments.
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_cage.concept_of"></a>
- <h6><a id="id456396"></a>
+ <h6><a id="id455822"></a>
<a href="interlocked_cage.html#boost_act.interlocked.interlocked_concepts.interlocked_cage.concept_of">Concept
of</a>
</h6>
@@ -109,11 +107,11 @@
<ul>
<li>
<a href="../interlocked_cage_models/interlocked_memory_cage.html" title="Interlocked Memory Cage">
- <code class="literal">Interlocked Memory Cage</code></a>
+ <code class="literal"><span class="bold"><strong>Interlocked Memory Cage</strong></span></code></a>
</li>
<li>
<a href="../interlocked_cage_models/interlocked_compiler_cage.html" title="Interlocked Compiler Cage">
- <code class="literal">Interlocked Compiler Cage</code></a>
+ <code class="literal"><span class="bold"><strong>Interlocked Compiler Cage</strong></span></code></a>
</li>
</ul>
</div>
@@ -157,7 +155,7 @@
<dt>
<span class="term">
<code class="computeroutput">
- <span class="identifier">B</span>
+ <span class="identifier">C</span>
</code>
</span>
</dt>
@@ -168,22 +166,22 @@
<dt>
<span class="term">
<code class="computeroutput">
- <span class="identifier">b</span>
+ <span class="identifier">c</span>
</code>
</span>
</dt>
<dd>
- An object of type <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code>.
+ An object of type <code class="computeroutput"><span class="identifier">C</span><span class="special">&</span></code>.
</dd>
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_cage.expression_requirements"></a>
- <h6><a id="id456633"></a>
+ <h6><a id="id456064"></a>
<a href="interlocked_cage.html#boost_act.interlocked.interlocked_concepts.interlocked_cage.expression_requirements">Expression
Requirements</a>
</h6>
<div class="table">
- <a id="id456651"></a>
+ <a id="id456082"></a>
<p class="title">
<b>Table 3. Interlocked Operation Requirements</b>
</p>
@@ -248,12 +246,12 @@
<tr>
<td>
<p>
- <code class="computeroutput"><span class="identifier">b</span><span class="special">.~</span><span class="identifier">B</span><span class="special">()</span></code>
+ <code class="computeroutput"><span class="identifier">c</span><span class="special">.~</span><span class="identifier">C</span><span class="special">()</span></code>
</p>
</td>
<td>
<p>
- Destroys the cage <code class="computeroutput"><span class="identifier">b</span></code>.
+ Destroys the cage <code class="computeroutput"><span class="identifier">c</span></code>.
</p>
</td>
</tr>
@@ -269,7 +267,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="interlocked_operation.html">
+ <a accesskey="p" href="interlocked_fence.html">
<div class="prev-icon"></div>
</a>
</div>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_fence.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_fence.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,261 @@
+<?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 Fence</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_operation.html" title="Interlocked Operation" /><link rel="next" href="interlocked_cage.html" title="Interlocked Cage" /><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_operation.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_concepts.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_cage.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_concepts.interlocked_fence"></a><a href="interlocked_fence.html" title="Interlocked Fence">Interlocked
+ Fence</a></h4>
+ </div>
+ </div>
+ </div>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_fence.description"></a>
+ <h6><a id="id455407"></a>
+ Description
+ </h6>
+ <p>
+ An <code class="literal">Interlocked Fence</code> is a template whose instantiations
+ are functions which, when called, imply memory and/or compiler barriers
+ to guarantee order and visibility of unordered or partially ordered operations
+ relative to the call-site. Semantics may be specified by the programmer
+ at compile-time via explicit template arguments.
+ </p>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_fence.concept_of"></a>
+ <h6><a id="id455457"></a>
+ <a href="interlocked_fence.html#boost_act.interlocked.interlocked_concepts.interlocked_fence.concept_of">Concept
+ of</a>
+ </h6>
+ <div class="itemizedlist">
+ <ul>
+ <li>
+ <a href="../interlocked_fence_models/interlocked_memory_fence.html" title="Interlocked Memory Fence">
+ <code class="literal"><span class="bold"><strong>Interlocked Memory Fence</strong></span></code></a>
+ </li>
+ <li>
+ <a href="../interlocked_fence_models/interlocked_compiler_fence.html" title="Interlocked Compiler Fence">
+ <code class="literal"><span class="bold"><strong>Interlocked Compiler Fence</strong></span></code></a>
+ </li>
+ </ul>
+ </div>
+ <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>
+ An <code class="literal">Interlocked Fence</code>.
+ </dd>
+ <dt>
+ <span class="term">
+ <code class="computeroutput">
+ <span class="identifier">S</span>
+ </code>
+ </span>
+ </dt>
+ <dd>
+ An <a href="interlocked_semantic_type.html" title="Interlocked Semantic Type">
+ <code class="literal">Interlocked Semantic Type</code></a>.
+ </dd>
+ </dl>
+ </div>
+ <a id="boost_act.interlocked.interlocked_concepts.interlocked_fence.expression_requirements"></a>
+ <h6><a id="id455599"></a>
+ <a href="interlocked_fence.html#boost_act.interlocked.interlocked_concepts.interlocked_fence.expression_requirements">Expression
+ Requirements</a>
+ </h6>
+ <div class="table">
+ <a id="id455618"></a>
+ <p class="title">
+ <b>Table 2. 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">name</span><span class="special">()</span></code>
+ </p>
+ </td>
+ <td>
+ <p>
+ Creates a fence with default semantics (<code class="computeroutput"><span class="identifier">sequential</span></code>).
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <code class="computeroutput"><span class="identifier">name</span><span class="special"><</span><span class="identifier">S</span><span class="special">>()</span></code>
+ </p>
+ </td>
+ <td>
+ <p>
+ Creates a fence with the specified semantics.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <br class="table-break" />
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_operation.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_concepts.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_cage.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_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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.description"></a>
- <h6><a id="id462840"></a>
+ <h6><a id="id462406"></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="id463060"></a>
+ <h6><a id="id462624"></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="id463108"></a>
+ <h6><a id="id462672"></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="id463325"></a>
+ <a id="id462890"></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="id463964"></a>
+ <h6><a id="id463529"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.headers">Headers</a>
</h6>
<div class="programlisting">
@@ -350,10 +350,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id463983">
+ <div class="style-switcher-box" id="id463548">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id463983',
+ 'id463548',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -393,7 +393,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_integer_type.example"></a>
- <h6><a id="id464991"></a>
+ <h6><a id="id464556"></a>
<a href="interlocked_integer_type.html#boost_act.interlocked.interlocked_concepts.interlocked_integer_type.example">Example</a>
</h6>
<p>
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.description"></a>
- <h6><a id="id458925"></a>
+ <h6><a id="id458358"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.description">Description</a>
</h6>
<p>
@@ -184,7 +184,7 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.refinement_of"></a>
- <h6><a id="id459324"></a>
+ <h6><a id="id458757"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.refinement_of">Refinement
of</a>
</h6>
@@ -193,7 +193,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="id459371"></a>
+ <h6><a id="id458803"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.expression_requirements">Expression
Requirements</a>
</h6>
@@ -242,7 +242,7 @@
</div>
</div>
<div class="table">
- <a id="id459571"></a>
+ <a id="id459003"></a>
<p class="title">
<b>Table 5. Interlocked Natural Type Requirements</b>
</p>
@@ -323,7 +323,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.headers"></a>
- <h6><a id="id459931"></a>
+ <h6><a id="id459363"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_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="id459952">
+ <div class="style-switcher-box" id="id459385">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id459952',
+ 'id459385',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -353,10 +353,12 @@
<span class="comment">// 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">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">assign</span><span class="special">/</span><span class="identifier">assign_thread_unsafe</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="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_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">assign</span><span class="special">/</span><span class="identifier">assign_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">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="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_sequential</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>
@@ -377,7 +379,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_natural_type.example"></a>
- <h6><a id="id460738"></a>
+ <h6><a id="id460316"></a>
<a href="interlocked_natural_type.html#boost_act.interlocked.interlocked_concepts.interlocked_natural_type.example">Example</a>
</h6>
<p>
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-14 04:46:15 EDT (Sat, 14 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 Operation</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_concepts.html" title="Interlocked Concepts" /><link rel="next" href="interlocked_cage.html" title="Interlocked Cage" /><script type="text/javascript" src="../../../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Operation</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_concepts.html" title="Interlocked Concepts" /><link rel="next" href="interlocked_fence.html" title="Interlocked Fence" /><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="interlocked_cage.html">
+ <a accesskey="n" href="interlocked_fence.html">
<div class="next-icon"></div>
</a>
</div>
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.description"></a>
- <h6><a id="id455480"></a>
+ <h6><a id="id388710"></a>
<a href="interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.description">Description</a>
</h6>
<p>
@@ -143,14 +143,14 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.expression_requirements"></a>
- <h6><a id="id455620"></a>
+ <h6><a id="id388850"></a>
<a href="interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.expression_requirements">Expression
Requirements</a>
</h6>
<div class="table">
- <a id="id455638"></a>
+ <a id="id388869"></a>
<p class="title">
- <b>Table 2. Interlocked Operation Requirements</b>
+ <b>Table 1. Interlocked Operation Requirements</b>
</p>
<div class="table-contents">
<table class="table" summary="Interlocked Operation Requirements">
@@ -208,7 +208,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_operation.example"></a>
- <h6><a id="id455770"></a>
+ <h6><a id="id390218"></a>
<a href="interlocked_operation.html#boost_act.interlocked.interlocked_concepts.interlocked_operation.example">Example</a>
</h6>
<p>
@@ -229,10 +229,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id455814">
+ <div class="style-switcher-box" id="id390262">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id455814',
+ 'id390262',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -314,7 +314,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="interlocked_cage.html">
+ <a accesskey="n" href="interlocked_fence.html">
<div class="next-icon"></div>
</a>
</div>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_semantic_type.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_semantic_type.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_concepts/interlocked_semantic_type.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_semantic_type.description"></a>
- <h6><a id="id456944"></a>
+ <h6><a id="id456376"></a>
<a href="interlocked_semantic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_semantic_type.description">Description</a>
</h6>
<p>
@@ -99,7 +99,7 @@
<code class="literal">Interlocked Cages</code></a>.
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_semantic_type.concept_of"></a>
- <h6><a id="id457014"></a>
+ <h6><a id="id456445"></a>
<a href="interlocked_semantic_type.html#boost_act.interlocked.interlocked_concepts.interlocked_semantic_type.concept_of">Concept
of</a>
</h6>
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.description"></a>
- <h6><a id="id457086"></a>
+ <h6><a id="id456519"></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="id457369"></a>
+ <h6><a id="id456802"></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="id457567"></a>
+ <a id="id457000"></a>
<p class="title">
<b>Table 4. Interlocked Type Requirements</b>
</p>
@@ -282,7 +282,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.headers"></a>
- <h6><a id="id457843"></a>
+ <h6><a id="id457276"></a>
<a href="interlocked_type.html#boost_act.interlocked.interlocked_concepts.interlocked_type.headers">Headers</a>
</h6>
<p>
@@ -294,10 +294,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id457865">
+ <div class="style-switcher-box" id="id457298">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id457865',
+ 'id457298',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -339,7 +339,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_concepts.interlocked_type.example"></a>
- <h6><a id="id458869"></a>
+ <h6><a id="id458301"></a>
<a href="interlocked_type.html#boost_act.interlocked.interlocked_concepts.interlocked_type.example">Example</a>
</h6>
<p>
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models.html 2007-07-14 04:46:15 EDT (Sat, 14 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 Fence Models</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_semantic_models.html" title="Interlocked Semantic Models" /><link rel="next" href="interlocked_fence_models/interlocked_memory_fence.html" title="Interlocked Memory Fence" /><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_semantic_models.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_fence_models/interlocked_memory_fence.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_fence_models"></a><a href="interlocked_fence_models.html" title="Interlocked Fence Models">Interlocked
+ Fence Models</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_fence_models/interlocked_memory_fence.html">Interlocked
+ Memory Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="interlocked_fence_models/interlocked_compiler_fence.html">Interlocked
+ Compiler Fence</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_semantic_models.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_fence_models/interlocked_memory_fence.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_fence_models/interlocked_compiler_fence.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models/interlocked_compiler_fence.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,204 @@
+<?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 Compiler Fence</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_fence_models.html" title="Interlocked Fence Models" /><link rel="prev" href="interlocked_memory_fence.html" title="Interlocked Memory Fence" /><link rel="next" href="../interlocked_cage_models.html" title="Interlocked Cage Models" /><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_memory_fence.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_fence_models.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_cage_models.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_fence_models.interlocked_compiler_fence"></a><a href="interlocked_compiler_fence.html" title="Interlocked Compiler Fence">Interlocked
+ Compiler Fence</a></h4>
+ </div>
+ </div>
+ </div>
+ <div class="important">
+ <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="important-icon"></div>
+ </div>
+ </div>
+ <div class="admonition-body">
+ <div class="admonition-title">Important</div>
+ <div class="admonition-content">
+ <p>
+ </p>
+ <p>
+ The features described on this page are not yet implemented.
+ </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_fence_models.interlocked_compiler_fence.description"></a>
+ <h6><a id="id466039"></a>
+ Description
+ </h6>
+ <p>
+ An <a href="../interlocked_concepts/interlocked_fence.html" title="Interlocked Fence">
+ <code class="literal">Interlocked Fence</code></a> whose instantiations and semantics
+ apply to compiler reordering of operations only. Order of visibility of
+ operations with respect to other threads of execution is not specified.
+ </p>
+ <a id="boost_act.interlocked.interlocked_fence_models.interlocked_compiler_fence.model_of"></a>
+ <h6><a id="id466090"></a>
+ <a href="interlocked_compiler_fence.html#boost_act.interlocked.interlocked_fence_models.interlocked_compiler_fence.model_of">Model
+ of</a>
+ </h6>
+ <div class="itemizedlist">
+ <ul>
+ <li>
+ <a href="../interlocked_concepts/interlocked_fence.html" title="Interlocked Fence">
+ <code class="literal">Interlocked Fence</code></a>
+ </li>
+ </ul>
+ </div>
+ <a id="boost_act.interlocked.interlocked_fence_models.interlocked_compiler_fence.example"></a>
+ <h6><a id="id466141"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Make an example
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="interlocked_memory_fence.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_fence_models.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_cage_models.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_fence_models/interlocked_memory_fence.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_fence_models/interlocked_memory_fence.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,210 @@
+<?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 Memory Fence</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_fence_models.html" title="Interlocked Fence Models" /><link rel="prev" href="../interlocked_fence_models.html" title="Interlocked Fence Models" /><link rel="next" href="interlocked_compiler_fence.html" title="Interlocked Compiler Fence" /><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_fence_models.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_fence_models.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_compiler_fence.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_fence_models.interlocked_memory_fence"></a><a href="interlocked_memory_fence.html" title="Interlocked Memory Fence">Interlocked
+ Memory Fence</a></h4>
+ </div>
+ </div>
+ </div>
+ <a id="boost_act.interlocked.interlocked_fence_models.interlocked_memory_fence.description"></a>
+ <h6><a id="id465824"></a>
+ Description
+ </h6>
+ <p>
+ An <a href="../interlocked_concepts/interlocked_fence.html" title="Interlocked Fence">
+ <code class="literal">Interlocked Fence</code></a> whose instantiations and semantics
+ apply to both compiler reordering of operations as well as order of visibility
+ of operations with respect to other threads of execution.
+ </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 most cases, you should avoid explicit fences and should instead
+ favor the use of <a href="../interlocked_concepts/interlocked_operation.html" title="Interlocked Operation">
+ <code class="literal">Interlocked Operations</code></a> with proper semantics
+ or <a href="../interlocked_cage_models/interlocked_memory_cage.html" title="Interlocked Memory Cage">
+ <code class="literal"><span class="bold"><strong>Interlocked Memory Cages</strong></span></code></a>
+ as they may allow for more optimized code generation and are generally
+ less prone to error.
+ </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_fence_models.interlocked_memory_fence.model_of"></a>
+ <h6><a id="id465921"></a>
+ <a href="interlocked_memory_fence.html#boost_act.interlocked.interlocked_fence_models.interlocked_memory_fence.model_of">Model
+ of</a>
+ </h6>
+ <div class="itemizedlist">
+ <ul>
+ <li>
+ <a href="../interlocked_concepts/interlocked_fence.html" title="Interlocked Fence">
+ <code class="literal">Interlocked Fence</code></a>
+ </li>
+ </ul>
+ </div>
+ <a id="boost_act.interlocked.interlocked_fence_models.interlocked_memory_fence.example"></a>
+ <h6><a id="id465973"></a>
+ Example
+ </h6>
+ <p>
+ ToDo: Make an example
+ </p>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ <div class="spirit-nav">
+ <div class="spirit-nav-icon">
+ <a accesskey="p" href="../interlocked_fence_models.html">
+ <div class="prev-icon"></div>
+ </a>
+ </div>
+ <div class="spirit-nav-icon">
+ <a accesskey="u" href="../interlocked_fence_models.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_compiler_fence.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_integer_models/interlocked_integer_metafunctions.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_metafunctions.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_metafunctions.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.description"></a>
- <h6><a id="id468184"></a>
+ <h6><a id="id468142"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.description">Description</a>
</h6>
<p>
@@ -101,7 +101,7 @@
library (<span class="emphasis"><em>ToDo: insert link here</em></span>).
</p>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.header"></a>
- <h6><a id="id468290"></a>
+ <h6><a id="id468248"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.header">Header</a>
</h6>
<p>
@@ -113,10 +113,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id468312">
+ <div class="style-switcher-box" id="id468271">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id468312',
+ 'id468271',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -138,7 +138,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.synopsis"></a>
- <h6><a id="id468476"></a>
+ <h6><a id="id468435"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.synopsis">Synopsis</a>
</h6>
<div class="programlisting">
@@ -147,10 +147,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id468496">
+ <div class="style-switcher-box" id="id468455">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id468496',
+ 'id468455',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -211,7 +211,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.model_of"></a>
- <h6><a id="id469278"></a>
+ <h6><a id="id469237"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.model_of">Model
of</a>
</h6>
@@ -281,12 +281,12 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.expression_semantics"></a>
- <h6><a id="id469491"></a>
+ <h6><a id="id469450"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.expression_semantics">Expression
Semantics</a>
</h6>
<div class="table">
- <a id="id469510"></a>
+ <a id="id469470"></a>
<p class="title">
<b>Table 9. Interlocked Integer Metafunction Requirements</b>
</p>
@@ -481,7 +481,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.example"></a>
- <h6><a id="id470420"></a>
+ <h6><a id="id470381"></a>
<a href="interlocked_integer_metafunctions.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_metafunctions.example">Example</a>
</h6>
<p>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_typedefs.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_typedefs.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_integer_models/interlocked_integer_typedefs.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.description"></a>
- <h6><a id="id467470"></a>
+ <h6><a id="id467428"></a>
<a href="interlocked_integer_typedefs.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.description">Description</a>
</h6>
<p>
@@ -98,7 +98,7 @@
size and performance requirements are specified by their name.
</p>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.header"></a>
- <h6><a id="id467520"></a>
+ <h6><a id="id467478"></a>
<a href="interlocked_integer_typedefs.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.header">Header</a>
</h6>
<div class="programlisting">
@@ -107,10 +107,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id467540">
+ <div class="style-switcher-box" id="id467499">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id467540',
+ 'id467499',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -128,7 +128,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.synopsis"></a>
- <h6><a id="id467692"></a>
+ <h6><a id="id467651"></a>
<a href="interlocked_integer_typedefs.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.synopsis">Synopsis</a>
</h6>
<div class="programlisting">
@@ -137,10 +137,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id467712">
+ <div class="style-switcher-box" id="id467670">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id467712',
+ 'id467670',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -174,7 +174,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.model_of"></a>
- <h6><a id="id468076"></a>
+ <h6><a id="id468035"></a>
<a href="interlocked_integer_typedefs.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.model_of">Model
of</a>
</h6>
@@ -183,7 +183,7 @@
<code class="literal">Interlocked Integer Type</code></a>.
</p>
<a id="boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.example"></a>
- <h6><a id="id468125"></a>
+ <h6><a id="id468083"></a>
<a href="interlocked_integer_typedefs.html#boost_act.interlocked.interlocked_integer_models.interlocked_integer_typedefs.example">Example</a>
</h6>
<p>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_semantic_models.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_semantic_models.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_semantic_models.html 2007-07-14 04:46:15 EDT (Sat, 14 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 Semantic Models</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_cage_models.html" title="Interlocked Cage Models" /><script type="text/javascript" src="../../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interlocked Semantic Models</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_fence_models.html" title="Interlocked Fence Models" /><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="interlocked_cage_models.html">
+ <a accesskey="n" href="interlocked_fence_models.html">
<div class="next-icon"></div>
</a>
</div>
@@ -88,47 +88,19 @@
</div>
</div>
</div>
- <div class="important">
- <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="important-icon"></div>
- </div>
- </div>
- <div class="admonition-body">
- <div class="admonition-title">Important</div>
- <div class="admonition-content">
- <p>
- </p>
- <p>
- The <code class="computeroutput"><span class="identifier">sequential</span></code> and <code class="computeroutput"><span class="identifier">thread_unsafe</span></code> semantics described on
- this page are not yet implemented.
- </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_semantic_models.description"></a>
- <h5><a id="id465080"></a>
+ <h5><a id="id464610"></a>
<a href="interlocked_semantic_models.html#boost_act.interlocked.interlocked_semantic_models.description">Description</a>
</h5>
<p>
The types detailed in this section are the <a href="interlocked_concepts/interlocked_semantic_type.html" title="Interlocked Semantic Type">
<code class="literal">Interlocked Semantic Types</code></a> for use with <a href="interlocked_concepts/interlocked_operation.html" title="Interlocked Operation">
- <code class="literal">Interlocked Operations</code></a> and __interlocked<span class="underline">barriers</span>_.
+ <code class="literal">Interlocked Operations</code></a>, <a href="interlocked_concepts/interlocked_cage.html" title="Interlocked Cage">
+ <code class="literal">Interlocked Cages</code></a>, and <a href="interlocked_concepts/interlocked_fence.html" title="Interlocked Fence">
+ <code class="literal">Interlocked Fences</code></a>.
</p>
<a id="boost_act.interlocked.interlocked_semantic_models.model_of"></a>
- <h5><a id="id465148"></a>
+ <h5><a id="id464700"></a>
<a href="interlocked_semantic_models.html#boost_act.interlocked.interlocked_semantic_models.model_of">Model
of</a>
</h5>
@@ -170,7 +142,7 @@
</div>
</div>
<div class="table">
- <a id="id465203"></a>
+ <a id="id464755"></a>
<p class="title">
<b>Table 8. Semantic Types</b>
</p>
@@ -333,7 +305,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_semantic_models.headers"></a>
- <h5><a id="id465553"></a>
+ <h5><a id="id465105"></a>
<a href="interlocked_semantic_models.html#boost_act.interlocked.interlocked_semantic_models.headers">Headers</a>
</h5>
<p>
@@ -353,10 +325,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id465598">
+ <div class="style-switcher-box" id="id465150">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id465598',
+ 'id465150',
'../../../../doc/style/html/syntax.xml',
'../../../../doc/style/html'
);
@@ -384,7 +356,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_semantic_models.example"></a>
- <h5><a id="id466197"></a>
+ <h5><a id="id465750"></a>
<a href="interlocked_semantic_models.html#boost_act.interlocked.interlocked_semantic_models.example">Example</a>
</h5>
<p>
@@ -412,7 +384,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="interlocked_cage_models.html">
+ <a accesskey="n" href="interlocked_fence_models.html">
<div class="next-icon"></div>
</a>
</div>
Modified: 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/checking_support.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/interlocked/interlocked_support/checking_support.html 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -89,7 +89,7 @@
</div>
</div>
<a id="boost_act.interlocked.interlocked_support.checking_support.description"></a>
- <h6><a id="id470497"></a>
+ <h6><a id="id470457"></a>
<a href="checking_support.html#boost_act.interlocked.interlocked_support.checking_support.description">Description</a>
</h6>
<p>
@@ -135,12 +135,12 @@
</dl>
</div>
<a id="boost_act.interlocked.interlocked_support.checking_support.expression_requirements"></a>
- <h6><a id="id470651"></a>
+ <h6><a id="id470611"></a>
<a href="checking_support.html#boost_act.interlocked.interlocked_support.checking_support.expression_requirements">Expression
Requirements</a>
</h6>
<div class="table">
- <a id="id470670"></a>
+ <a id="id470630"></a>
<p class="title">
<b>Table 10. Interlocked Operation Requirements</b>
</p>
@@ -185,7 +185,7 @@
</div>
<br class="table-break" />
<a id="boost_act.interlocked.interlocked_support.checking_support.headers"></a>
- <h6><a id="id470804"></a>
+ <h6><a id="id470765"></a>
<a href="checking_support.html#boost_act.interlocked.interlocked_support.checking_support.headers">Headers</a>
</h6>
<p>
@@ -197,10 +197,10 @@
<div class="box-top-right"></div>
<div class="box-top"></div>
<div class="box-inner-wrapper">
- <div class="style-switcher-box" id="id470825">
+ <div class="style-switcher-box" id="id470785">
<script type="text/javascript" > <!--
boostscript.call( boostscript.style_switcher, 'insert_style_selector',
- 'id470825',
+ 'id470785',
'../../../../../doc/style/html/syntax.xml',
'../../../../../doc/style/html'
);
@@ -224,7 +224,7 @@
<p>
</p>
<a id="boost_act.interlocked.interlocked_support.checking_support.example"></a>
- <h6><a id="id470933"></a>
+ <h6><a id="id470894"></a>
<a href="checking_support.html#boost_act.interlocked.interlocked_support.checking_support.example">Example</a>
</h6>
<p>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/introduction.html
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/introduction.html (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/html/boost_act/introduction.html 2007-07-14 04:46:15 EDT (Sat, 14 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>Introduction</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="brief_description.html" title="Brief Description" /><link rel="next" href="compiler_setup.html" title="Compiler Setup" /><script type="text/javascript" src="../../../doc/javascript/main.js"></script>
+ <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Introduction</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="beta_warning.html" title="Beta Warning" /><link rel="next" href="interlocked.html" title="Interlocked" /><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="brief_description.html">
+ <a accesskey="p" href="beta_warning.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -71,7 +71,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="compiler_setup.html">
+ <a accesskey="n" href="interlocked.html">
<div class="next-icon"></div>
</a>
</div>
@@ -111,7 +111,7 @@
strategy on a case-by-case basis with potentially no runtime cost to the application.
</p>
<a id="boost_act.introduction.interlocked_types"></a>
- <h4><a id="id388718"></a>
+ <h4><a id="id388699"></a>
<a href="introduction.html#boost_act.introduction.interlocked_types">Interlocked Types</a>
</h4>
<p>
@@ -124,7 +124,7 @@
thread-safe operations with semantics specified by the user at the call-site.
</p>
<a id="boost_act.introduction.polymorphic_algorithms"></a>
- <h4><a id="id388778"></a>
+ <h4><a id="id388764"></a>
<a href="introduction.html#boost_act.introduction.polymorphic_algorithms">Polymorphic Algorithms</a>
</h4>
<p>
@@ -146,7 +146,7 @@
of the creation of user-defined polymorphic algorithms.
</p>
<a id="boost_act.introduction.algorithm_models"></a>
- <h4><a id="id388825"></a>
+ <h4><a id="id388811"></a>
<a href="introduction.html#boost_act.introduction.algorithm_models">Algorithm Models</a>
</h4>
<p>
@@ -159,7 +159,7 @@
library.
</p>
<a id="boost_act.introduction.actions"></a>
- <h4><a id="id388850"></a>
+ <h4><a id="id388836"></a>
<a href="introduction.html#boost_act.introduction.actions">Actions</a>
</h4>
<p>
@@ -178,7 +178,7 @@
and which execute in the same thread as the original call.
</p>
<a id="boost_act.introduction.active_objects"></a>
- <h4><a id="id390131"></a>
+ <h4><a id="id390117"></a>
<a href="introduction.html#boost_act.introduction.active_objects">Active Objects</a>
</h4>
<p>
@@ -199,7 +199,7 @@
</div>
<div class="spirit-nav">
<div class="spirit-nav-icon">
- <a accesskey="p" href="brief_description.html">
+ <a accesskey="p" href="beta_warning.html">
<div class="prev-icon"></div>
</a>
</div>
@@ -214,7 +214,7 @@
</a>
</div>
<div class="spirit-nav-icon">
- <a accesskey="n" href="compiler_setup.html">
+ <a accesskey="n" href="interlocked.html">
<div class="next-icon"></div>
</a>
</div>
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -88,111 +88,42 @@
decisions.
</p>
<a id="boost_act.rationale.interlocked_operation_names"></a>
- <h4><a id="id471168"></a>
+ <h4><a id="id471129"></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.
+ Those familiar with lock-free programming may have noticed that the traditional
+ "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. Note that this is very different from an atomic std::swap.
+ Rather than keep this conflict in terms, it was decided that the term "assign"
+ was a more accurate name, despite the fact that it is generally refered to
+ as "swap," since the operation is actually just an atomic 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"
+ traditional C++ "swap" and is again more of an assignment operation
+ which just yields the old value. 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.
+ ambiguously from its name and the operation that is implied is much more clear
+ from the 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="id471368"></a>
- Policy-Based Design
- </h4>
- <p>
- Boost.Act offers programmers customizability through two kinds of policies
- which control algorithm execution and active qualification implementation.
- These policies allow one to adjust whether algorithms run in parallel when
- possible or always serially, and allow one to adjust whether active types create
- their own thread or operate in the master thread. Default policies used can
- be overriden at a global level or individually at points of instantiation.
- The reason this may be considered controversial is that some may argue that
- the use of policies here adds needless complexity at little gain. <span class="emphasis"><em>In
- short, why not just use the STL in cases where algorithms need to be run serially
- and why not just not use active objects in places where you do not need your
- object to exist in its own thread?</em></span>
- </p>
- <p>
- The reasons for choosing policies stem mostly from the fact that they provide
- an easy way to switch execution models for arbitrary amounts of code with very
- few changes to the code using the library. Reasons one may wish to switch policies
- at the call-site range from reasons of optimization to reasons of debugging.
- In terms of optimization, using active objects and parallel algorithms may
- have a negative impact on performance in single-core systems, therefore the
- ability to toggle the execution model by merely changing the default policy
- used allows a programmer to target both single-core and multicore processors
- by simply rebuilding after changing the policy being used. In theory, using
- policies which target single-core sytems can be optimized to the same code
- as a project which avoided the abstraction entirely.
- </p>
- <p>
- As an example of switching policies for debugging, single-threaded algorithms
- can often be more simple to debug than multi-threaded algorithms. If a bug
- is narrowed down to a single algorithm which runs in parallel, one may easily
- switch execution for that call to be serial, making it much easier to step
- through in order to find the problem. This also helps in figuring out if certain
- unwanted behavior is being caused by multi-threading issues or if there is
- a more simple logical problem which exists at a higher-level in the algorithm's
- design.
- </p>
- <a id="boost_act.rationale.actions_vs__futures"></a>
- <h4><a id="id471720"></a>
- Actions vs. Futures
- </h4>
- <p>
- Another fairly controversial design decision is the absence of futures, or
- at least futures as they are commonly known. Rather than returning futures
- from asynchronous function calls and function calls queued on active objects,
- <code class="literal">actions</code> are yielded which represent the running function
- and provide an indirect interface to an instance of the active qualified form
- of the return type. This choice was made for a variety of reasons. First and
- foremost, this allows a programmer to work with the results of such function
- calls without losing concurrency by default, as functions upon them are queued
- rather than performed immediately after implicitly or explicitly forcing the
- function to complete. The traditional blocking form of futures, while can potentially
- be implemented in such a way that is [slightly] more optimized for single-core
- processors, implies an unnecessary loss of concurrency and becomes less efficient
- if multiple cores are available. Still, the traditional behavior of futures
- can be forced through actions by simply copying the active result to an active-unqualified
- form of the result type using <code class="literal">inactive_value</code>, forcing a
- wait for the function to complete. This gives actions of Boost.Act a superset
- of the functionality provided by futures meaning that those who wish to use
- actions in a future-like manner may do so.
+ is generally returned (from which you may obtain the new value). Because of
+ this, in future releases the names may be changed to have the traditional "fetch<span class="underline">and</span>" prefix, or possibly the return type will
+ just be changed to an object with an "old_value()" member function,
+ such that the function name itself is not verbous, and you only have to be
+ explicit when you require the return value.
</p>
</div>
</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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -109,21 +109,6 @@
</dt>
<dt>
<span class="section">
- Brief Description
- </span>
- </dt>
- <dt>
- <span class="section">
- Introduction
- </span>
- </dt>
- <dt>
- <span class="section">
- Compiler Setup
- </span>
- </dt>
- <dt>
- <span class="section">
<a href="boost_act/interlocked.html">Interlocked</a>
</span>
</dt>
@@ -145,6 +130,12 @@
</dt>
<dt>
<span class="section">
+ <a href="boost_act/interlocked/interlocked_concepts/interlocked_fence.html">Interlocked
+ Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
<a href="boost_act/interlocked/interlocked_concepts/interlocked_cage.html">Interlocked
Cage</a>
</span>
@@ -189,6 +180,28 @@
</dt>
<dt>
<span class="section">
+ <a href="boost_act/interlocked/interlocked_fence_models.html">Interlocked
+ Fence Models</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="section">
+ <a href="boost_act/interlocked/interlocked_fence_models/interlocked_memory_fence.html">Interlocked
+ Memory Fence</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="section">
+ <a href="boost_act/interlocked/interlocked_fence_models/interlocked_compiler_fence.html">Interlocked
+ Compiler Fence</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="section">
<a href="boost_act/interlocked/interlocked_cage_models.html">Interlocked
Cage Models</a>
</span>
@@ -281,7 +294,7 @@
</div>
<div id="footer">
<div id="footer-left">
- <div id="revised">Revised: July 12, 2007 at 00:15:27 GMT</div>
+ <div id="revised">Revised: July 14, 2007 at 07:34:26 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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -2,6 +2,7 @@
[include interlocked/concepts.qbk]
[include interlocked/interlocked_semantic_models.qbk]
+[include interlocked/interlocked_fence_models.qbk]
[include interlocked/interlocked_cage_models.qbk]
[include interlocked/integer_models.qbk]
[include interlocked/support.qbk]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1,6 +1,7 @@
[section Interlocked Concepts]
[include concepts/interlocked_operation.qbk]
+[include concepts/interlocked_fence.qbk]
[include concepts/interlocked_cage.qbk]
[include concepts/interlocked_semantic_type.qbk]
[include concepts/interlocked_type.qbk]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_cage.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_cage.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_cage.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -3,10 +3,9 @@
[heading Description]
An [concept Interlocked Cage] is a template whose instantiations are types which
-manage the order of visibility of read and write operations that occur during
-their objects' lifetime, effectively providing those operations with potentially
-more restrictive ordering constraints. Semantics for such cages may be specified
-by the programmer at compile-time via explicit template arguments.
+manage the order of read and write operations with respect to construction and
+destruction of the cage. Semantics may be specified by the programmer at
+compile-time via explicit template arguments.
[heading Concept of]
@@ -17,10 +16,10 @@
[[[~name]] [An [concept Interlocked Cage].] ]
[[`S1`] [An __interlocked_semantic_type__.] ]
[[`S2`] [An __interlocked_semantic_type__.] ]
-[[`B`] [A type which is an instantiation of `name` with or without
+[[`C`] [A type which is an instantiation of `name` with or without
additional /cv-qualification/.
] ]
-[[`b`] [An object of type `B&`.] ]
+[[`c`] [An object of type `C&`.] ]
]
[heading Expression Requirements]
@@ -37,7 +36,7 @@
semantic requirements of `S1` which
are not already specified by `S2`.
] ]
-[[`b.~B()`] [Destroys the cage `b`.] ]
+[[`c.~C()`] [Destroys the cage `c`.] ]
]
[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_fence.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/concepts/interlocked_fence.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,33 @@
+[section Interlocked Fence]
+
+[heading Description]
+
+An [concept Interlocked Fence] is a template whose instantiations are functions
+which, when called, imply memory and/or compiler barriers to guarantee order and
+visibility of unordered or partially ordered operations relative to the
+call-site. Semantics may be specified by the programmer at compile-time via
+explicit template arguments.
+
+[heading Concept of]
+
+* __interlocked_memory_fence__
+* __interlocked_compiler_fence__
+
+[variablelist Notation
+[[[~name]] [An [concept Interlocked Fence].] ]
+[[`S`] [An __interlocked_semantic_type__.] ]
+]
+
+[heading Expression Requirements]
+
+[table Interlocked Operation Requirements
+[[Expression] [Pre/Post-Condition] ]
+[[`name()`] [Creates a fence with default
+ semantics (`sequential`).
+ ] ]
+[[`name<S>()`] [Creates a fence with the specified
+ semantics.
+ ] ]
+]
+
+[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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -55,10 +55,12 @@
// assign headers.
#include <boost/act/interlocked/assign.hpp>
+ #include <boost/act/interlocked/assign/assign_thread_unsafe.hpp>
+ #include <boost/act/interlocked/assign/assign_unordered.hpp>
#include <boost/act/interlocked/assign/assign_acquire.hpp>
#include <boost/act/interlocked/assign/assign_release.hpp>
#include <boost/act/interlocked/assign/assign_acq_rel.hpp>
- #include <boost/act/interlocked/assign/assign_unordered.hpp>
+ #include <boost/act/interlocked/assign/assign_sequential.hpp>
// Forward declarations.
#include <boost/act/interlocked/assign_fwd.hpp>
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_cage_models/interlocked_memory_cage.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_cage_models/interlocked_memory_cage.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_cage_models/interlocked_memory_cage.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -6,14 +6,12 @@
An __interlocked_cage__ whose instantiations and semantics apply to both
compiler reordering of operations as well as order of visibility of operations
-with respect to other threads of execution. Internally, [concept Interlocked
-Memory Cages] often imply low-level memory and compiler barriers during
-construction and/or destruction and therefore should be used sparingly. When
-given the option, one should always prefer to directly apply semantics to their
-operation rather than use a cage. One common use would be to implement a
-user-defined interlocked operation with strict ordering requirements when the
-target system does not provide direct support for such semantics for that
-particular operation.
+with respect to other threads of execution.
+
+[note In most cases, you should avoid explicit cages and should instead favor
+ the use of __interlocked_operations__ with proper semantics as they may allow
+ for more optimized code generation and are generally less prone to error.
+]
[heading Model of]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,6 @@
+[section Interlocked Fence Models]
+
+[include interlocked_fence_models/interlocked_memory_fence.qbk]
+[include interlocked_fence_models/interlocked_compiler_fence.qbk]
+
+[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_compiler_fence.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_compiler_fence.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,19 @@
+[section Interlocked Compiler Fence]
+
+[important The features described on this page are not yet implemented.]
+
+[heading Description]
+
+An __interlocked_fence__ whose instantiations and semantics apply to
+compiler reordering of operations only. Order of visibility of operations with
+respect to other threads of execution is not specified.
+
+[heading Model of]
+
+* __interlocked_fence__
+
+[heading Example]
+
+ToDo: Make an example
+
+[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_memory_fence.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_fence_models/interlocked_memory_fence.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,23 @@
+[section Interlocked Memory Fence]
+
+[heading Description]
+
+An __interlocked_fence__ whose instantiations and semantics apply to both
+compiler reordering of operations as well as order of visibility of operations
+with respect to other threads of execution.
+
+[note In most cases, you should avoid explicit fences and should instead favor
+ the use of __interlocked_operations__ with proper semantics or
+ __interlocked_memory_cages__ as they may allow for more optimized code
+ generation and are generally less prone to error.
+]
+
+[heading Model of]
+
+* __interlocked_fence__
+
+[heading Example]
+
+ToDo: Make an example
+
+[endsect]
Modified: sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_semantic_models.qbk
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_semantic_models.qbk (original)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/doc/interlocked/interlocked_semantic_models.qbk 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -1,13 +1,10 @@
[section Interlocked Semantic Models]
-[important The `sequential` and `thread_unsafe` semantics described on this page
- are not yet implemented.
-]
-
[heading Description]
The types detailed in this section are the __interlocked_semantic_types__ for
-use with __interlocked_operations__ and __interlocked_barriers__.
+use with __interlocked_operations__, __interlocked_cages__, and
+__interlocked_fences__.
[heading Model of]
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-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -6,38 +6,37 @@
[heading Interlocked Operation Names]
-Those familiar with lock-free programming may have noticed that the
+Those familiar with lock-free programming may have noticed that the traditional
"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.
+programming means to set the value of a variable and yield the old value. Note
+that this is very different from an atomic std::swap. Rather than keep this
+conflict in terms, it was decided that the term "assign" was a more accurate
+name, despite the fact that it is generally refered to as "swap," since the
+operation is actually just an atomic 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."
+Similarly, the "swap" in "compare-and-swap" is not the traditional C++ "swap"
+and is again more of an assignment operation which just yields the old value.
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.
+can be determined much less ambiguously from its name and the operation that is
+implied is much more clear from the 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.
+the object is generally returned (from which you may obtain the new value).
+Because of this, in future releases the names may be changed to have the
+traditional "fetch_and_" prefix, or possibly the return type will just be
+changed to an object with an "old_value()" member function, such that the
+function name itself is not verbous, and you only have to be explicit when you
+require the return value.
+[/
[heading Policy-Based Design]
Boost.Act offers programmers customizability through two kinds of policies which
@@ -93,5 +92,5 @@
wait for the function to complete. This gives actions of Boost.Act a superset of
the functionality provided by futures meaning that those who wish to use actions
in a future-like manner may do so.
-
+]
[endsect]
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_sequential.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_sequential.cpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
@@ -0,0 +1,17 @@
+/*=============================================================================
+ Copyright (c) 2006, 2007 Matthew Calabrese
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+// Note: These tests could be a better. Currently testing is done by
+// forcing compound CAS operations to use their default implementation
+// (which is to internally use assign_if_was).
+
+#include <boost/test/minimal.hpp>
+
+#define BOOST_ACT_INTERLOCKED_FORCE_DEFAULTS
+
+#include "../add_assign/add_assign_sequential.cpp"
Added: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/assign_if_was/assign_if_was_thread_unsafe.h
==============================================================================
Deleted: sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/cstdatomic.hpp
==============================================================================
--- sandbox/SOC/2006/concurrency/trunk/libs/act/test/interlocked/cstdatomic.hpp 2007-07-14 04:46:15 EDT (Sat, 14 Jul 2007)
+++ (empty file)
@@ -1,564 +0,0 @@
-/*=============================================================================
- Copyright (c) 2006, 2007 Matthew Calabrese
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-
-#ifndef BOOST_ACT_INTERLOCKED_CSTDATOMIC_HPP
-#define BOOST_ACT_INTERLOCKED_CSTDATOMIC_HPP
-
-#include <boost/act/interlocked/store.hpp>
-#include <boost/act/interlocked/load.hpp>
-#include <boost/act/interlocked/add_assign.hpp>
-#include <boost/act/interlocked/subtract_assign.hpp>
-#include <boost/act/interlocked/and_assign.hpp>
-#include <boost/act/interlocked/or_assign.hpp>
-#include <boost/act/interlocked/xor_assign.hpp>
-#include <boost/act/interlocked/integer/types.hpp>
-#include <boost/act/interlocked/flag.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/preprocessor/tuple/elem.hpp>
-#include <cassert>
-#include <cstddef>
-
-namespace boost { namespace act { namespace interlocked { namespace std_atomic {
-
-enum memory_order
-{ memory_order_relaxed
-, memory_order_acquire
-, memory_order_release
-, memory_order_acq_rel
-, memory_order_seq_cst
-};
-
-#define BOOST_ACT_DETAIL_RETURN_CALL_IMPL( macro, name, order, args, data ) \
-switch( order ) \
-{ \
-case memory_order_relaxed: \
- macro( interlocked::name< unordered > args, data ) \
- break; \
-case memory_order_acquire: \
- macro( interlocked::name< acquire > args, data ) \
- break; \
-case memory_order_release: \
- macro( interlocked::name< release > args, data ) \
- break; \
-case memory_order_acq_rel: \
- macro( interlocked::name< acq_rel > args, data ) \
- break; \
-case memory_order_seq_cst: \
- macro( interlocked::name< sequential > args, data ) \
- break; \
-}
-
-#define BOOST_ACT_DETAIL_CALL_MAC( expression, dummy ) result;
-
-#define BOOST_ACT_DETAIL_RETURN_CALL_MAC( expression, dummy ) return result;
-
-#define BOOST_ACT_DETAIL_CAS_CALL_MAC( expression, type_and_old_val ) \
-BOOST_PP_TUPLE_ELEM( 2, 0 ) expected_val = BOOST_PP_TUPLE_ELEM( 2, 1 ); \
-BOOST_PP_TUPLE_ELEM( 2, 1 ) = expression; \
-return expected_val == BOOST_PP_TUPLE_ELEM( 2, 1 );
-
-#define BOOST_ACT_DETAIL_CALL( name, order, args ) \
-BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_CALL_MAC \
- , name, order, args \
- )
-
-#define BOOST_ACT_DETAIL_RETURN_CALL( name, order, args ) \
-BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_RETURN_CALL_MAC \
- , name, order, args \
- )
-
-#define BOOST_ACT_DETAIL_RETURN_CAS_CALL( name, order, args, type, expected ) \
-BOOST_ACT_DETAIL_RETURN_CALL_IMPL( BOOST_ACT_DETAIL_CAS_CALL_MAC \
- , name, order, args, ( type, expected ) \
- )
-
-// ToDo: Initialize in constructor to clear (figure out how to guarantee order)
-struct atomic_flag
- : noncopyable
-{
-public:
- bool test_and_set( memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( set_if_was_clear, order, ( flag_m ) )
- }
-
- void clear( memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_CALL( clear, order, ( flag_m ) )
- }
-private:
- interlocked::flag_fast_t flag_m;
-}
-
-inline bool atomic_flag_test_and_set( volatile atomic_flag* target )
-{
- assert( target != 0 );
- return target->test_and_set( memory_order_seq_cst );
-}
-
-inline bool atomic_flag_test_and_set_explicit( volatile atomic_flag* target
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->test_and_set( order );
-}
-
-inline void atomic_flag_clear( volatile atomic_flag* target )
-{
- assert( target != 0 );
- target->clear( memory_order_seq_cst );
-}
-
-inline void atomic_flag_clear_explicit( volatile atomic_flag* target
- , memory_order order
- )
-{
- assert( target != 0 );
- target->clear( order );
-}
-
-struct atomic_bool
- : noncopyable
-{
-public:
- bool lock_free()
- {
- return true; // ToDo: Change when emulation is supported.
- }
-
- void store( bool val, memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_CALL( store, order, ( bool_m, val ) )
- }
-
- bool load( memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( bool_m ) )
- }
-
- bool swap( bool val, memory_order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( bool_m, val ) )
- }
-
- bool compare_swap( bool& expected, bool new_val
- , memory_order order = memory_order_seq_cst
- ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
- , ( bool_m, new_val, expected )
- , bool, expected
- )
- }
-/*
- void fence( memory_order ) volatile
- {
- // ToDo: Define
- }
-*/
- //constexpr atomic_bool( bool __v__ );
-
- bool operator =( bool val ) volatile
- {
- store( val );
- return val;
- }
-
- operator bool() volatile
- {
- return load();
- }
-private:
- interlocked::bool_fast_t bool_m;
-};
-
-inline bool atomic_lock_free( volatile atomic_bool* target )
-{
- assert( target != 0 );
- return target->lock_free();
-}
-
-inline void atomic_store( volatile atomic_bool* target, bool val )
-{
- assert( target != 0 );
- target->store( val );
-}
-
-inline void atomic_store_explicit( volatile atomic_bool* target, bool val
- , memory_order order
- )
-{
- assert( target != 0 );
- target->store( val, order );
-}
-
-inline bool atomic_load( volatile atomic_bool* target )
-{
- assert( target != 0 );
- return target->load();
-}
-
-inline bool atomic_load_explicit( volatile atomic_bool* target, memory_order order )
-{
- assert( target != 0 );
- return target->load( order );
-}
-
-inline bool atomic_swap( volatile atomic_bool* target, bool val )
-{
- assert( target != 0 );
- return target->swap( val );
-}
-
-inline bool atomic_swap_explicit( volatile atomic_bool* target, bool val
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->swap( val, order );
-}
-
-inline bool atomic_compare_swap( volatile atomic_bool* target
- , bool* expected, bool val
- )
-{
- assert( target != 0 );
- return target->compare_swap( *expected, val );
-}
-
-inline bool atomic_compare_swap_explicit( volatile atomic_bool* target
- , bool*, bool val, memory_order order
- )
-{
- assert( target != 0 );
- return target->compare_swap( *expected, val, order );
-}
-
-inline void atomic_fence( volatile atomic_bool* target, memory_order order )
-{
- assert( target != 0 );
- // ToDo: Define
-}
-
-struct atomic_address
- : noncopyable
-{
- bool lock_free()
- {
- return true; // ToDo: Change when emulation is supported.
- }
- void store( void* val, memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_CALL( store, order, ( address_m, val ) )
- }
-
- void* load( memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( address_m ) )
- }
-
- void* swap( void* val, memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( address_m, val ) )
- }
-
- void* compare_swap( void*& expected, void*, new_val
- , memory_order order = memory_order_seq_cst
- ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
- , ( address_m, new_val, expected )
- , void*, expected
- )
- }
-/*
- void fence( memory_order ) volatile
- {
- // ToDo: Define
- }
-*/
- void* fetch_add( std::ptrdiff_t offset
- , memory_order order = memory_order_seq_cst
- ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( add_assign, order, ( address_m, offset ) )
- }
-
- void* fetch_sub( std::ptrdiff_t offset
- , memory_order order = memory_order_seq_cst
- ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( subtract_assign, order, ( address_m,offset ) )
- }
-
- //constexpr atomic_address( void* );
-
- void* operator =( void* address ) volatile
- {
- store( address );
- return address;
- }
-
- operator void*() volatile
- {
- return load();
- }
-
- void* operator +=( std::ptrdiff_t offset ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( add_assign, order, ( address_m,offset ) )
- }
-
- void* operator -=( std::ptrdiff_t offset ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( subtract_assign, order, ( address_m,offset ) )
- }
-private:
- void* address_m;
-};
-
-inline bool atomic_lock_free( volatile atomic_address* target )
-{
- assert( target != 0 );
- return target->lock_free();
-}
-
-inline void atomic_store( volatile atomic_address* target, void* val )
-{
- assert( target != 0 );
- target->store( val );
-}
-
-inline void atomic_store_explicit( volatile atomic_address* target, void* val
- , memory_order order
- )
-{
- assert( target != 0 );
- target->store( val, order );
-}
-
-inline void* atomic_load( volatile atomic_address* target )
-{
- assert( target != 0 );
- return target->load();
-}
-
-inline void* atomic_load_explicit( volatile atomic_address* target
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->load( order );
-}
-
-inline void* atomic_swap( volatile atomic_address* target, void* val )
-{
- assert( target != 0 );
- return target->swap( val );
-}
-
-inline void* atomic_swap_explicit( volatile atomic_address* target, void* val
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->swap( val, order );
-}
-
-inline void* atomic_compare_swap( volatile atomic_address* target
- , void** expected, void* new_val
- )
-{
- assert( target != 0 );
- return target->compare_swap( *expected, val );
-}
-
-inline void* atomic_compare_swap_explicit( volatile atomic_address* target
- , void** expected, void* new_val
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->compare_swap( *expected, val, order );
-}
-/*
-inline void atomic_fence( volatile atomic_address* target, memory_order order )
-{
- assert( target != 0 );
- // ToDo: Define
-}
-*/
-inline void* atomic_fetch_add( volatile atomic_address* target
- , std::ptrdiff_t offset
- )
-{
- assert( target != 0 );
- return target->fetch_add( offset );
-}
-
-inline void* atomic_fetch_add_explicit( volatile atomic_address* target
- , std::ptrdiff_t offset
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->fetch_add( offset, order );
-}
-
-inline void* atomic_fetch_sub( volatile atomic_address* target
- , std::ptrdiff_t offset
- )
-{
- assert( target != 0 );
- return target->fetch_sub( offset );
-}
-
-inline void* atomic_fetch_sub_explicit( volatile atomic_address* target
- , std::ptrdiff_t offset
- , memory_order order
- )
-{
- assert( target != 0 );
- return target->fetch_sub( offset, order );
-}
-
-template< typename T >
-struct atomic
- : noncopyable
-{
- bool lock_free() volatile
- {
- return true; // ToDo: Change when emulation is supported.
- }
-
- void store( T val, memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_CALL( store, order, ( val_m, val ) )
- }
-
- T load( memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( load, order, ( val_m ) )
- }
-
- T swap( T val, memory_order order = memory_order_seq_cst ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CALL( assign, order, ( val_m, val ) )
- }
-
- bool compare_swap( T& expected, T new_val
- , memory_order order = memory_order_seq_cst
- ) volatile
- {
- BOOST_ACT_DETAIL_RETURN_CAS_CALL( assign_if_was, order
- , ( val_m, new_val, expected )
- , T, expected
- )
- }
-/*
- void fence( memory_order ) volatile
- {
- //ToDo: Define
- }
-*/
- //CPP0X(constexpr) atomic( T __v__ ) : __f__( __v__ ) { }
-
- T operator =( T val ) volatile
- {
- store( val );
- return val;
- }
-
- operator T() volatile
- {
- return load();
- }
-private:
- T val_m;
-};
-
-//And for each of the integral (character and integer) types listed above,
-
-/*
-#define BOOST_ACT_ATOMIC_INTEGRAL( type ) \
-struct BOOST_PP_CAT( atomic_, type ) \
- : noncopyable \
-{ \
- bool lock_free(); \
- void store( integral, memory_order = memory_order_seq_cst ) volatile; \
- integral load( memory_order = memory_order_seq_cst ) volatile; \
- integral swap( integral,
- memory_order = memory_order_seq_cst ) volatile;
- bool compare_swap( integral&, integral,
- memory_order = memory_order_seq_cst ) volatile;
- void fence( memory_order ) volatile;
- integral fetch_add( integral,
- memory_order = memory_order_seq_cst ) volatile;
- integral fetch_sub( integral,
- memory_order = memory_order_seq_cst ) volatile;
- integral fetch_and( integral,
- memory_order = memory_order_seq_cst ) volatile;
- integral fetch_or( integral,
- memory_order = memory_order_seq_cst ) volatile;
- integral fetch_xor( integral,
- memory_order = memory_order_seq_cst ) volatile;
-
- atomic_integral() = default;
- constexpr atomic_integral( integral );
- integral operator =( integral ) volatile;
- operator integral() volatile;
- integral operator +=( integral ) volatile;
- integral operator -=( integral ) volatile;
- integral operator &=( integral ) volatile;
- integral operator |=( integral ) volatile;
- integral operator ^=( integral ) volatile;
-private:
- interlocked::type val_m;
-};
-
-inline bool atomic_lock_free( volatile atomic_integral* );
-inline void atomic_store( volatile atomic_integral*, integral );
-inline void atomic_store_explicit( volatile atomic_integral*, integral, memory_order );
-inline integral atomic_load( volatile atomic_integral* );
-inline integral atomic_load_explicit( volatile atomic_integral*, memory_order );
-inline integral atomic_swap( volatile atomic_integral*, integral );
-inline integral atomic_swap_explicit( volatile atomic_integral*, integral,
- memory_order );
-inline bool atomic_compare_swap( volatile atomic_integral*, integral*, integral );
-inline bool atomic_compare_swap_explicit( volatile atomic_integral*, integral*,
- integral, memory_order );
-inline void atomic_fence( volatile atomic_integral*, memory_order ) volatile;
-inline integral atomic_fetch_add( volatile atomic_integral*, integral );
-inline integral atomic_fetch_add_explicit( volatile atomic_integral*, integral,
- memory_order );
-inline integral atomic_fetch_sub( volatile atomic_integral*, integral );
-inline integral atomic_fetch_sub_explicit( volatile atomic_integral*, integral,
- memory_order );
-inline integral atomic_fetch_and( volatile atomic_integral*, integral );
-inline integral atomic_fetch_and_explicit( volatile atomic_integral*, integral,
- memory_order );
-inline integral atomic_fetch_or( volatile atomic_integral*, integral );
-inline integral atomic_fetch_or_explicit( volatile atomic_integral*, integral,
- memory_order );
-inline integral atomic_fetch_xor( volatile atomic_integral*, integral );
-inline integral atomic_fetch_xor_explicit( volatile atomic_integral*, integral,
- memory_order );
-*/
-
-#undef BOOST_ACT_DETAIL_RETURN_CAS_CALL
-#undef BOOST_ACT_DETAIL_RETURN_CALL
-#undef BOOST_ACT_DETAIL_CALL
-#undef BOOST_ACT_DETAIL_CAS_CALL_MAC
-#undef BOOST_ACT_DETAIL_RETURN_CALL_MAC
-#undef BOOST_ACT_DETAIL_CALL_MAC
-#undef BOOST_ACT_DETAIL_RETURN_CALL_IMPL
-
-} } } }
-
-#endif
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk