Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r54470 - in sandbox/luid: . boost/luid boost/luid/dsl boost/luid/generator boost/luid/iccl doc doc/html doc/html/images doc/html/images/callouts libs/luid/doc libs/luid/doc/concepts libs/luid/doc/html libs/luid/doc/html/toward_boost_luid libs/luid/doc/html/toward_boost_luid/appendices libs/luid/doc/html/toward_boost_luid/dsl libs/luid/doc/html/toward_boost_luid/generator libs/luid/doc/html/toward_boost_luid/reference libs/luid/test libs/luid/test/compile_fail libs/luid/test/inclusion/dsl
From: vicente.botet_at_[hidden]
Date: 2009-06-28 15:33:38


Author: viboes
Date: 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
New Revision: 54470
URL: http://svn.boost.org/trac/boost/changeset/54470

Log:
Boost.Luid
Added:
   sandbox/luid/boost.png (contents, props changed)
   sandbox/luid/boost/luid/dsl.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/coherency.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/error_handling.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/lifetime.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/numeric_type.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/on_overflow.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/on_release.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/optimization.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/scope.hpp (contents, props changed)
   sandbox/luid/boost/luid/dsl/thread_model.hpp (contents, props changed)
   sandbox/luid/boost/luid/generator.hpp (contents, props changed)
   sandbox/luid/boost/luid/generator/assemble_components.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/backdoor.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/base.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/coherency_bitset.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/constructor.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/counter.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/counter2.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/discard.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/dynamic_lower_bound.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/externally_locked.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/facade.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/fifo.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/internally_locked.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/on_overflow.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/posix_time_traits.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/rec_fifo_delay.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/recoverable_distance.h (contents, props changed)
   sandbox/luid/boost/luid/iccl/set.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/set2.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/static_lower_bound.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/storage.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/thread_locking_traits.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/timestamped.hpp (contents, props changed)
   sandbox/luid/boost/luid/iccl/upper_bound.hpp (contents, props changed)
   sandbox/luid/boost/luid/todo.hpp (contents, props changed)
   sandbox/luid/doc/
   sandbox/luid/doc/html/
   sandbox/luid/doc/html/boostbook.css (contents, props changed)
   sandbox/luid/doc/html/images/
   sandbox/luid/doc/html/images/alert.png (contents, props changed)
   sandbox/luid/doc/html/images/blank.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/
   sandbox/luid/doc/html/images/callouts/1.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/10.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/11.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/12.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/13.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/14.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/15.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/2.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/3.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/4.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/5.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/6.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/7.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/8.png (contents, props changed)
   sandbox/luid/doc/html/images/callouts/9.png (contents, props changed)
   sandbox/luid/doc/html/images/caution.png (contents, props changed)
   sandbox/luid/doc/html/images/draft.png (contents, props changed)
   sandbox/luid/doc/html/images/home.png (contents, props changed)
   sandbox/luid/doc/html/images/important.png (contents, props changed)
   sandbox/luid/doc/html/images/next.png (contents, props changed)
   sandbox/luid/doc/html/images/next_disabled.png (contents, props changed)
   sandbox/luid/doc/html/images/note.png (contents, props changed)
   sandbox/luid/doc/html/images/prev.png (contents, props changed)
   sandbox/luid/doc/html/images/prev_disabled.png (contents, props changed)
   sandbox/luid/doc/html/images/smiley.png (contents, props changed)
   sandbox/luid/doc/html/images/tip.png (contents, props changed)
   sandbox/luid/doc/html/images/toc-blank.png (contents, props changed)
   sandbox/luid/doc/html/images/toc-minus.png (contents, props changed)
   sandbox/luid/doc/html/images/toc-plus.png (contents, props changed)
   sandbox/luid/doc/html/images/up.png (contents, props changed)
   sandbox/luid/doc/html/images/up_disabled.png (contents, props changed)
   sandbox/luid/doc/html/images/warning.png (contents, props changed)
   sandbox/luid/doc/html/reference.css (contents, props changed)
   sandbox/luid/libs/luid/doc/Jamfile.v2 (contents, props changed)
   sandbox/luid/libs/luid/doc/acknowledgements.qbk (contents, props changed)
   sandbox/luid/libs/luid/doc/concepts/
   sandbox/luid/libs/luid/doc/history.qbk (contents, props changed)
   sandbox/luid/libs/luid/doc/html/
   sandbox/luid/libs/luid/doc/html/index.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/acknowledgements.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/ext_references.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/history.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/implementation.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/rationale.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/default.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/dsl_features.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/fearure_model.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/functional_model.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assemble_components.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assign_default.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_parser.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/iccl.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/install.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/intro.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_macros.html (contents, props changed)
   sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_types.html (contents, props changed)
   sandbox/luid/libs/luid/doc/implementation.qbk (contents, props changed)
   sandbox/luid/libs/luid/doc/index.html (contents, props changed)
   sandbox/luid/libs/luid/doc/luid.qbk (contents, props changed)
   sandbox/luid/libs/luid/doc/rationale.qbk (contents, props changed)
   sandbox/luid/libs/luid/doc/references.qbk (contents, props changed)
   sandbox/luid/libs/luid/test/Jamfile.v2 (contents, props changed)
   sandbox/luid/libs/luid/test/compile_fail/
   sandbox/luid/libs/luid/test/compile_fail/luidg_multi_process_externally_locked.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/default_luidg.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/expr_pp_test.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/inclusion/dsl/include_error_handling.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/inclusion/dsl/include_thread_model.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_check.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_discard_kernel.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_recover_delay.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_recover_fifo_throw_on_error.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_recover_immediate.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_throw_on_error.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_unsigned_char.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_unsigned_int_recove_undefined.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/luidg_unsigned_short_recover_delay_throw_on_error.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/multi_process.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/multi_process_externally_locked.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/multi_process_internally_locked.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/multi_threaded_externally_locked_process_traits.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/multi_threaded_internally_locked_process_traits.cpp (contents, props changed)
   sandbox/luid/libs/luid/test/test.hpp (contents, props changed)

Added: sandbox/luid/boost.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/boost/luid/dsl.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,149 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/luid for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_LUID_DSL_HPP_
+#define BOOST_LUID_DSL_HPP_
+
+#if !defined(BOOST_PARAMETER_EXT_EXPR_ARITY)
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 8
+#elif BOOST_PARAMETER_EXT_EXPR_ARITY < 8
+# undef BOOST_PARAMETER_EXT_EXPR_ARITY
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 8
+#endif
+
+#include "boost/parameter_ext/expr.hpp"
+#include "boost/luid/dsl/numeric_type.hpp"
+#include "boost/luid/dsl/on_release.hpp"
+#include "boost/luid/dsl/on_overflow.hpp"
+#include "boost/luid/dsl/scope.hpp"
+#include "boost/luid/dsl/lifetime.hpp"
+#include "boost/luid/dsl/coherency.hpp"
+#include "boost/luid/dsl/optimization.hpp"
+#include "boost/unspecified.hpp"
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+// introspection
+struct introspection_marker{};
+
+template<typename T>
+struct is_introspection:is_base_and_derived<introspection_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct introspection: parameter::template_keyword<introspection<>,T>
+ , introspection_marker {};
+
+template <typename dummy=parameter::void_>
+struct none: introspection_marker {
+};
+
+template <typename dummy=parameter::void_>
+struct count: introspection_marker {
+};
+
+
+// luidg
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_,
+ typename Arg3=parameter::void_,
+ typename Arg4=parameter::void_,
+ typename Arg5=parameter::void_,
+ typename Arg6=parameter::void_,
+ typename Arg7=parameter::void_,
+ typename Arg8=parameter::void_
+ >
+ struct luidg
+{
+ typedef boost::parameter_ext::expr<luidg<>,
+ mpl::vector<
+ boost::parameter_ext::optional<numeric_type<>, is_numeric_type<mpl::_>, dsl::dynamic_lower_bound<> >,
+ boost::parameter_ext::optional<on_overflow<>, is_on_overflow<mpl::_>, dsl::ignore_error<> >,
+ boost::parameter_ext::optional<on_release<>, is_on_release<mpl::_>, dsl::discard<> >,
+ boost::parameter_ext::optional<scope<>, is_scope<mpl::_>, mono_threaded<> >,
+ boost::parameter_ext::optional<lifetime<>, is_lifetime<mpl::_>, process<> >,
+ boost::parameter_ext::optional<coherency<>, is_coherency<mpl::_>, ignore<> >,
+ boost::parameter_ext::optional<introspection<>, is_introspection<mpl::_>, none<> >,
+ boost::parameter_ext::optional<optimization<>, is_optimization<mpl::_>, speed<> >
+ >,
+ mpl::vector<Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7,Arg8>
+ > base_type;
+
+ typedef typename base_type::template get<dsl::numeric_type<> >::type numeric_type_kind_;
+ typedef typename base_type::template get<dsl::on_release<> >::type on_release;
+ typedef typename base_type::template get<dsl::on_overflow<> >::type on_overflow;
+ typedef typename base_type::template get<dsl::scope<> >::type scope;
+ typedef typename base_type::template get<dsl::lifetime<> >::type lifetime;
+ typedef typename base_type::template get<dsl::coherency<> >::type coherency;
+ typedef typename base_type::template get<dsl::introspection<> >::type introspection;
+ typedef typename base_type::template get<dsl::optimization<> >::type optimization;
+
+// typedef typename numeric_type_kind__::numeric_type numeric_type;
+// typedef typename numeric_type_kind__::lower_bound_type_ lower_bound_type_;
+ typedef typename mpl::if_<boost::is_unsigned<numeric_type_kind_>,
+ numeric_type_kind_,
+ typename numeric_type_kind_::numeric_type >::type numeric_type;
+ typedef typename mpl::if_<boost::is_unsigned<numeric_type_kind_>,
+ mpl::size_t<boost::integer_traits<numeric_type_kind_>::const_min >,
+ mpl::size_t<numeric_type_kind_::lower_bound> >::type lower_bound_type_;
+ typedef typename mpl::eval_if<boost::is_unsigned<numeric_type_kind_>,
+ mpl::identity<dsl::dynamic_lower_bound<numeric_type> >,
+ mpl::identity<numeric_type_kind_> >::type numeric_type_kind;
+
+
+ static const numeric_type lower_bound = lower_bound_type_::value;
+ typedef typename mpl::if_<dsl::is_recover<on_release>,
+ on_release,
+ dsl::recover<> >::type recover;
+ typedef typename recover::template get<dsl::recovery_when<> >::type recovery_when;
+ typedef typename recover::template get<dsl::recovery_how<> >::type recovery_how;
+ typedef typename mpl::if_<dsl::is_freeze<recovery_when>,
+ recovery_when,
+ dsl::freeze<> >::type freeze;
+ typedef typename mpl::if_<dsl::is_delay<recovery_when>,
+ recovery_when,
+ dsl::delay<> >::type delay;
+ typedef typename delay::time_traits time_traits;
+
+ typedef typename scope::locking_strategy locking_strategy;
+
+ typedef typename locking_strategy::locking_traits locking_traits_;
+ typedef typename mpl::if_<boost::is_unspecified<locking_traits_>,
+ typename mpl::if_<
+ boost::luid::dsl::is_mono_threaded<scope>,
+ boost::luid::iccl::null_locking_traits,
+ typename mpl::if_<
+ boost::luid::dsl::is_multi_threaded<scope>,
+ boost::luid::iccl::thread_locking_traits,
+ boost::luid::iccl::process_locking_traits
+ >::type
+ >::type,
+ locking_traits_
+ >::type locking_traits;
+
+
+ typedef typename lifetime::template get<dsl::void_pointer<> >::type
+ void_pointer_type;
+ typedef typename lifetime::template get<dsl::allocator_type<> >::type
+ allocator_type;
+ };
+
+ BOOST_DETAIL_IS_XXX_DEF(luidg, luidg, 4);
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_HPP_

Added: sandbox/luid/boost/luid/dsl/coherency.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/coherency.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,43 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_COHERENCY_HPP_
+#define BOOST_LUID_DSL_COHERENCY_HPP_
+
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+struct coherency_marker{};
+
+template<typename T>
+struct is_coherency: is_base_and_derived<coherency_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct coherency: parameter::template_keyword<coherency<>,T>
+{};
+
+template <typename dummy=parameter::void_>
+struct ensure : coherency_marker {
+};
+BOOST_DETAIL_IS_XXX_DEF(ensure, ensure, 1);
+
+template <typename dummy=parameter::void_>
+struct ignore : coherency_marker {
+};
+BOOST_DETAIL_IS_XXX_DEF(ignore, ignore, 1);
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_COHERENCY_HPP_

Added: sandbox/luid/boost/luid/dsl/error_handling.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/error_handling.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,38 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_ERROR_HANDLING_HPP_
+#define BOOST_LUID_DSL_ERROR_HANDLING_HPP_
+
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+template <typename dummy=parameter::void_>
+struct throw_on_error {};
+BOOST_DETAIL_IS_XXX_DEF(throw_on_error, throw_on_error, 1)
+
+template <typename dummy=parameter::void_>
+struct errno_on_error {};
+BOOST_DETAIL_IS_XXX_DEF(errno_on_error, errno_on_error, 1)
+
+template <typename dummy=parameter::void_>
+struct ignore_error {};
+BOOST_DETAIL_IS_XXX_DEF(ignore_error, ignore_error, 1)
+
+template <typename dummy=parameter::void_>
+struct user_error {};
+BOOST_DETAIL_IS_XXX_DEF(user_error, user_error, 1)
+
+}
+} // luid
+}
+#endif /*BOOST_LUID_DSL_ERROR_HANDLING_HPP_*/

Added: sandbox/luid/boost/luid/dsl/lifetime.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/lifetime.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,122 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_LIFETIME_HPP_
+#define BOOST_LUID_DSL_LIFETIME_HPP_
+
+#if !defined(BOOST_PARAMETER_EXT_EXPR_ARITY)
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 2
+#elif BOOST_PARAMETER_EXT_EXPR_ARITY < 2
+# undef BOOST_PARAMETER_EXT_EXPR_ARITY
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 2
+#endif
+
+
+#include "boost/parameter_ext/expr.hpp"
+#include <memory>
+#include <boost/detail/is_xxx.hpp>
+#include "boost/interprocess/allocators/allocator.hpp"
+#include "boost/interprocess/managed_shared_memory.hpp"
+#include "boost/interprocess/managed_mapped_file.hpp"
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+struct lifetime_marker{};
+
+template<typename T>
+struct is_lifetime:is_base_and_derived<lifetime_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct lifetime: parameter::template_keyword<lifetime<>,T>,lifetime_marker {};
+
+struct void_pointer_marker{};
+
+template<typename T>
+struct is_void_pointer:is_base_and_derived<void_pointer_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct void_pointer: parameter::template_keyword<void_pointer<>,T>
+ , void_pointer_marker {};
+
+struct allocator_marker{};
+
+template<typename T>
+struct is_allocator_type:is_base_and_derived<allocator_marker,T> {};
+
+template<typename T=parameter::void_>
+struct allocator_type: parameter::template_keyword<allocator_type<>,T>,allocator_marker
+{};
+
+
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_
+>
+struct process : lifetime_marker,
+ boost::parameter_ext::expr<process<>,
+ mpl::vector<
+ boost::parameter_ext::optional<void_pointer<>, is_void_pointer<mpl::_>,
+ void* >,
+ boost::parameter_ext::optional<allocator_type<>, is_allocator_type<mpl::_>,
+ std::allocator<int> >
+ >,
+ mpl::vector<Arg1, Arg2>
+ >
+ {};
+
+BOOST_DETAIL_IS_XXX_DEF(process, process, 2);
+
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_
+>
+struct kernel : lifetime_marker,
+ boost::parameter_ext::expr<kernel<>,
+ mpl::vector<
+ boost::parameter_ext::optional<void_pointer<>, is_void_pointer<mpl::_>,
+ boost::interprocess::offset_ptr<void> >,
+ boost::parameter_ext::optional<allocator_type<>, is_allocator_type<mpl::_>,
+ boost::interprocess::allocator
+ <int, boost::interprocess::managed_shared_memory::segment_manager> >
+ >,
+ mpl::vector<Arg1, Arg2>
+ >
+ {};
+
+BOOST_DETAIL_IS_XXX_DEF(kernel, kernel, 2);
+
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_
+>
+struct filesystem : lifetime_marker,
+ boost::parameter_ext::expr<filesystem<>,
+ mpl::vector<
+ boost::parameter_ext::optional<void_pointer<>, is_void_pointer<mpl::_>,
+ boost::interprocess::offset_ptr<void> >,
+ boost::parameter_ext::optional<allocator_type<>, is_allocator_type<mpl::_>,
+ boost::interprocess::allocator
+ <int, boost::interprocess::managed_mapped_file::segment_manager> >
+ >,
+ mpl::vector<Arg1, Arg2>
+ >
+ {};
+
+BOOST_DETAIL_IS_XXX_DEF(filesystem, filesystem, 2);
+
+
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_LIFETIME_HPP_

Added: sandbox/luid/boost/luid/dsl/numeric_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/numeric_type.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,81 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_NUMERIC_TYPE_HPP_
+#define BOOST_LUID_DSL_NUMERIC_TYPE_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+#include <boost/type_traits.hpp>
+
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+#if 0
+template<typename T=parameter::void_>
+struct numeric_type: dsl::terminal<numeric_type<>,T>
+{};
+
+#endif
+
+
+struct numeric_type_marker{};
+
+template<typename T>
+struct is_numeric_type: mpl::or_<is_base_and_derived<numeric_type_marker,T>,
+ boost::is_unsigned<T> >
+{
+};
+
+template<typename T=parameter::void_>
+struct numeric_type: parameter::template_keyword<numeric_type<>,T>
+{};
+
+
+template <typename T=unsigned int, T lower_bound_=boost::integer_traits<T>::const_min>
+struct static_lower_bound : numeric_type_marker {
+ typedef T numeric_type;
+ static const T lower_bound = lower_bound_;
+};
+
+template <typename T>
+struct is_static_lower_bound: mpl::false_ {};
+
+template <typename T, T lower_bound_>
+struct is_static_lower_bound<static_lower_bound<T, lower_bound_> >: mpl::true_ {};
+
+
+template <typename T=unsigned int, T lower_bound_=boost::integer_traits<T>::const_min>
+struct dynamic_lower_bound : numeric_type_marker{
+ typedef T numeric_type;
+ static const T lower_bound = lower_bound_;
+};
+
+template <typename T>
+struct is_dynamic_lower_bound: mpl::false_ {};
+
+template <typename T, T lower_bound_>
+struct is_dynamic_lower_bound<dynamic_lower_bound<T, lower_bound_> >: mpl::true_ {};
+
+
+
+} // dsl
+} // luid
+
+template <typename T, T lower_bound_>
+struct integer_traits<luid::dsl::static_lower_bound<T, lower_bound_> > : integer_traits<T> {};
+
+template <typename T, T lower_bound_>
+struct integer_traits<luid::dsl::dynamic_lower_bound<T, lower_bound_> > : integer_traits<T> {};
+
+}// boost
+#endif // BOOST_LUID_DSL_NUMERIC_TYPE_HPP_

Added: sandbox/luid/boost/luid/dsl/on_overflow.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/on_overflow.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,49 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_ON_OVERFLOW_HPP_
+#define BOOST_LUID_DSL_ON_OVERFLOW_HPP_
+
+#include "boost/luid/dsl/error_handling.hpp"
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+struct on_overflow_marker{};
+
+template<typename T>
+struct is_on_overflow:is_base_and_derived<on_overflow_marker,T> {};
+
+template<typename T=parameter::void_>
+struct on_overflow: parameter::template_keyword<on_overflow<>,T> {};
+
+//using ::boost::luid::dsl::errno_on_error;
+//using ::boost::luid::dsl::is_errno_on_error;
+//using ::boost::luid::dsl::ignore_error;
+//using ::boost::luid::dsl::is_ignore_error;
+//using ::boost::luid::dsl::throw_on_error;
+//using ::boost::luid::dsl::is_throw_on_error;
+
+template<typename T>
+struct is_on_overflow<errno_on_error<T> >: mpl::true_ {};
+
+template<typename T>
+struct is_on_overflow<ignore_error<T> >: mpl::true_ {};
+
+template<typename T>
+struct is_on_overflow<throw_on_error<T> >: mpl::true_ {};
+
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_ON_OVERFLOW_HPP_

Added: sandbox/luid/boost/luid/dsl/on_release.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/on_release.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,110 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_ON_RELEASE_HPP_
+#define BOOST_LUID_DSL_ON_RELEASE_HPP_
+
+#if !defined(BOOST_PARAMETER_EXT_EXPR_ARITY)
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 2
+#elif BOOST_PARAMETER_EXT_EXPR_ARITY < 2
+# undef BOOST_PARAMETER_EXT_EXPR_ARITY
+# define BOOST_PARAMETER_EXT_EXPR_ARITY 2
+#endif
+
+#include "boost/parameter_ext/expr.hpp"
+#include "boost/luid/iccl/posix_time_traits.hpp"
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+struct on_release_marker{};
+
+template<typename T>
+struct is_on_release:is_base_and_derived<on_release_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct on_release: parameter::template_keyword<on_release<>,T>
+{};
+
+// Recovery When
+struct recovery_when_marker{};
+
+template<typename T>
+struct is_recovery_when: is_base_and_derived<recovery_when_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct recovery_when: parameter::template_keyword<recovery_when<>,T>
+{};
+
+
+template <typename dummy=parameter::void_>
+struct discard : on_release_marker {};
+BOOST_DETAIL_IS_XXX_DEF(discard, discard, 1);
+
+
+template <typename dummy=parameter::void_>
+struct immediate : recovery_when_marker {};
+BOOST_DETAIL_IS_XXX_DEF(immediate, immediate, 1);
+
+template <typename TimeTraits=iccl::posix_time_traits>
+struct delay : recovery_when_marker{
+ typedef TimeTraits time_traits;
+};
+BOOST_DETAIL_IS_XXX_DEF(delay, delay, 1);
+
+template <typename dummy=parameter::void_>
+struct freeze : recovery_when_marker {};
+BOOST_DETAIL_IS_XXX_DEF(freeze, freeze, 1);
+
+// Recovery How
+struct recovery_how_marker{};
+
+template<typename T>
+struct is_recovery_how: is_base_and_derived<recovery_how_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct recovery_how: parameter::template_keyword<recovery_how<>,T>
+{};
+
+template <typename dummy=parameter::void_>
+struct fifo : recovery_how_marker {};
+ BOOST_DETAIL_IS_XXX_DEF(fifo, fifo, 1);
+
+template <typename dummy=parameter::void_>
+struct undefined : recovery_how_marker {};
+ BOOST_DETAIL_IS_XXX_DEF(undefined, undefined, 1);
+
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_
+>
+struct recover : on_release_marker,
+ boost::parameter_ext::expr<recover<>,
+ mpl::vector<
+ boost::parameter_ext::optional<recovery_when<>, is_recovery_when<mpl::_>, immediate<> >,
+ boost::parameter_ext::optional<recovery_how<>, is_recovery_how<mpl::_>, fifo<> >
+ >,
+ mpl::vector<Arg1, Arg2>
+ >
+{};
+
+BOOST_DETAIL_IS_XXX_DEF(recover, recover, 2);
+
+
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_ON_RELEASE_HPP_

Added: sandbox/luid/boost/luid/dsl/optimization.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/optimization.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,60 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_OPTIMIZATION_HPP_
+#define BOOST_LUID_DSL_OPTIMIZATION_HPP_
+
+//#include "boost/dsl/thread_model.hpp"
+//#include "boost/dsl/error_handling.hpp"
+//#include "boost/dsl/expr.hpp"
+//#include "boost/luid/iccl/posix_time_traits.hpp"
+//
+//#include <memory>
+#include <boost/detail/is_xxx.hpp>
+//#include "boost/mpl/bool.hpp"
+//#include "boost/interprocess/allocators/allocator.hpp"
+//#include "boost/interprocess/managed_shared_memory.hpp"
+//#include "boost/interprocess/managed_mapped_file.hpp"
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+//#include <boost/parameter/binding.hpp>
+
+
+namespace boost
+{
+namespace luid
+{
+namespace dsl
+{
+
+
+// Optimization
+struct optimization_marker{};
+
+template<typename T>
+struct is_optimization:is_base_and_derived<optimization_marker,T>
+{};
+
+template<typename T=parameter::void_>
+struct optimization: parameter::template_keyword<optimization<>,T>
+ , optimization_marker
+{};
+
+template <typename dummy=parameter::void_>
+struct speed: optimization_marker {};
+BOOST_DETAIL_IS_XXX_DEF(speed, speed, 1);
+
+template <typename dummy=parameter::void_>
+struct space: optimization_marker {};
+BOOST_DETAIL_IS_XXX_DEF(space, space, 1);
+
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_OPTIMIZATION_HPP_

Added: sandbox/luid/boost/luid/dsl/scope.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/scope.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,58 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_SCOPE_HPP
+#define BOOST_LUID_DSL_SCOPE_HPP
+
+#include "boost/luid/dsl/thread_model.hpp"
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/parameters.hpp>
+
+namespace boost {
+namespace luid {
+namespace dsl {
+
+// Scope
+struct scope_marker{};
+
+template<typename T>
+struct is_scope:is_base_and_derived<scope_marker,T> {};
+
+template<typename T=parameter::void_>
+struct scope: parameter::template_keyword<scope<>,T> {};
+
+//using ::boost::dsl::mono_threaded;
+//using ::boost::dsl::is_mono_threaded;
+//using ::boost::dsl::multi_threaded;
+//using ::boost::dsl::is_multi_threaded;
+//using ::boost::dsl::multi_process;
+//using ::boost::dsl::is_multi_process;
+//using ::boost::dsl::internally_locked;
+//using ::boost::dsl::is_internally_locked;
+//using ::boost::dsl::externally_locked;
+//using ::boost::dsl::is_externally_locked;
+
+template<typename T>
+struct is_scope<mono_threaded<T> >: mpl::true_
+{};
+
+template<typename T>
+struct is_scope<multi_threaded<T> >: mpl::true_
+{};
+
+template<typename T>
+struct is_scope<multi_process<T> >: mpl::true_
+{};
+
+
+
+} // dsl
+} // luid
+} // boost
+#endif // BOOST_LUID_DSL_SCOPE_HPP

Added: sandbox/luid/boost/luid/dsl/thread_model.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/dsl/thread_model.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,70 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_DSL_THREAD_MODEL_HPP_
+#define BOOST_LUID_DSL_THREAD_MODEL_HPP_
+
+#include <boost/detail/is_xxx.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include "boost/luid/iccl/thread_locking_traits.hpp"
+//#include "boost/iccl/process_locking_traits.hpp"
+
+/* DSL:
+ *
+ * ThreadModel: mono_threaded | multi_threaded[LockingStrategy]
+ * ScopeModel: thread | inter_threads[LockingStrategy] | inter_process[LockingStrategy]
+ * LockingStrategy: externally_locked[MutexType] | internally_locked[MutexType, ScopedLockType]
+ *
+ */
+
+namespace boost {
+namespace luid {
+namespace dsl {
+// LockingStrategy
+template <typename LockingTraits=parameter::void_>
+struct externally_locked {
+ typedef LockingTraits locking_traits;
+};
+BOOST_DETAIL_IS_XXX_DEF(externally_locked, externally_locked, 1)
+
+template <typename LockingTraits=parameter::void_>
+struct internally_locked {
+ typedef LockingTraits locking_traits;
+};
+BOOST_DETAIL_IS_XXX_DEF(internally_locked, internally_locked, 1)
+
+template <typename LockingTraits=parameter::void_>
+struct no_locking {
+ typedef LockingTraits locking_traits;
+};
+BOOST_DETAIL_IS_XXX_DEF(no_locking, no_locking, 1)
+
+
+template <typename LockingStrategy=no_locking<iccl::null_locking_traits> >
+struct mono_threaded {
+ typedef LockingStrategy locking_strategy;
+};
+BOOST_DETAIL_IS_XXX_DEF(mono_threaded, mono_threaded, 1)
+
+template <typename LockingStrategy=internally_locked<iccl::thread_locking_traits> >
+struct multi_threaded {
+ typedef LockingStrategy locking_strategy;
+};
+BOOST_DETAIL_IS_XXX_DEF(multi_threaded, multi_threaded, 1)
+
+template <typename LockingStrategy=internally_locked<iccl::process_locking_traits> >
+struct multi_process {
+ typedef LockingStrategy locking_strategy;
+};
+BOOST_DETAIL_IS_XXX_DEF(multi_process, multi_process, 1)
+
+
+} // dsl
+} // luid
+} // boost
+#endif /*BOOST_LUID_DSL_THREAD_MODEL_HPP_*/

Added: sandbox/luid/boost/luid/generator.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/generator.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,110 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/luid for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_LUID_GENERATOR_HPP_
+#define BOOST_LUID_GENERATOR_HPP_
+
+#include "boost/luid/dsl.hpp"
+#include "boost/luid/iccl.hpp"
+
+//#include "boost/luid/generator/dsl_parser.hpp"
+//#include "boost/luid/generator/dsl_assign_defaults.hpp"
+#include "boost/luid/generator/assemble_components.hpp"
+#include "boost/mpl/if.hpp"
+
+namespace boost { namespace luid {
+//enum to_do{
+// do_all,
+// default_and_assemble,
+// assemble_the_components
+//};
+
+/*
+InputDsl is based on a Boost.Parameter
+
+*/
+
+template< typename InputDsl = dsl::luidg<>
+//, to_do WhatToDo = do_all
+>
+struct generator {
+
+// typedef typename mpl::if_c<(WhatToDo==do_all)
+// , InputDsl
+// , dsl::luidg<>
+// >::type dsl_description;
+
+// typedef typename detail::dsl_parser<InputDsl>::type parsed_dsl__;
+
+// typedef typename mpl::if_c<WhatToDo==default_and_assemble
+// , InputDsl
+// , parsed_dsl__
+// >::type parsed_dsl_;
+//
+// typedef typename dsl_assign_defaults<parsed_dsl_>::type complete_dsl__;
+
+// typedef typename mpl::if_c<WhatToDo==assemble_the_components
+// , InputDsl
+// , parsed_dsl__
+// >::type complete_dsl_;
+
+ typedef typename detail::assemble_components<InputDsl>::type result;
+ public:
+ typedef result type;
+
+};
+
+template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_,
+ typename Arg3=parameter::void_,
+ typename Arg4=parameter::void_,
+ typename Arg5=parameter::void_,
+ typename Arg6=parameter::void_,
+ typename Arg7=parameter::void_,
+ typename Arg8=parameter::void_
+ >
+ struct make_luidg {
+ typedef dsl::luidg<Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7,Arg8> luidg;
+ typedef typename generator<luidg>::type type;
+ };
+
+ template <
+ typename Arg1=parameter::void_,
+ typename Arg2=parameter::void_,
+ typename Arg3=parameter::void_,
+ typename Arg4=parameter::void_,
+ typename Arg5=parameter::void_,
+ typename Arg6=parameter::void_,
+ typename Arg7=parameter::void_,
+ typename Arg8=parameter::void_
+ >
+ struct luidg : make_luidg<Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7,Arg8>::type
+ {
+ typedef typename make_luidg<Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7,Arg8>::type super_type;
+ template <typename ArgsParam>
+ luidg(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+// //! constructor with name parameters
+// BOOST_PARAMETER_CONSTRUCTOR(
+// luidg, (super_type), tag
+// , (optional (low,*)) (optional (high,*))
+// (optional (delay,*))
+// (optional (shm_name,*)) (optional (shm_size,*))
+// (optional (ext_mtx,*))
+// ) // no semicolon
+ };
+}
+}
+
+#endif // BOOST_LUID_GENERATOR_HPP_

Added: sandbox/luid/boost/luid/generator/assemble_components.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/generator/assemble_components.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,170 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_NUIDG_ASSEMBLE_COMPONENTS_HPP_
+#define BOOST_NUIDG_ASSEMBLE_COMPONENTS_HPP_
+
+#include "boost/luid/dsl.hpp"
+#include "boost/luid/iccl.hpp"
+#include <memory>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/intrusive/detail/pointer_to_other.hpp>
+#include "boost/mpl/eval_if.hpp"
+
+namespace boost
+{
+namespace luid
+{
+namespace detail
+{
+template< typename CompleteDSLDescription>
+struct assemble_components {
+ typedef assemble_components<CompleteDSLDescription> generator;
+ typedef CompleteDSLDescription dsl_features;
+
+ typedef typename dsl_features::numeric_type numeric_type_;
+ static const numeric_type_ lower_bound_ = dsl_features::lower_bound;
+ typedef typename dsl_features::time_traits time_traits_;
+ typedef typename dsl_features::allocator_type allocator_type_;
+// typedef typename dsl_features::node_type node_type_;
+
+ typedef iccl::base<generator> base;
+ typedef typename mpl::if_<dsl::is_process<typename dsl_features::lifetime>,
+ iccl::raw_storage<base>,
+ typename mpl::if_<dsl::is_kernel<typename dsl_features::lifetime>,
+ iccl::shm_storage<base>,
+ iccl::shm_storage<base>
+ >::type
+ >::type alt_stortage;
+
+ typedef iccl::storage<alt_stortage> storage;
+
+ typedef typename mpl::if_<
+ dsl::is_dynamic_lower_bound<typename dsl_features::numeric_type_kind>,
+ iccl::dynamic_lower_bound<iccl::upper_bound<storage> >,
+ iccl::static_lower_bound<iccl::upper_bound<storage> >
+ >::type bounds_type;
+
+ typedef iccl::counter<bounds_type> counter;
+
+ typedef typename mpl::if_<
+ dsl::is_discard<typename dsl_features::on_release>,
+ counter,
+ typename mpl::if_<
+ dsl::is_delay<typename dsl_features::recovery_when>,
+ iccl::rec_fifo_delay<iccl::fifo<counter> >,
+ typename mpl::if_<
+ dsl::is_freeze<typename dsl_features::recovery_when>,
+ iccl::rec_fifo_delay<iccl::fifo<counter> >,
+ typename mpl::if_<
+ dsl::is_fifo<typename dsl_features::recovery_how>,
+ iccl::fifo<counter>,
+ iccl::set<bounds_type>
+ >::type
+ >::type
+ >::type
+ >::type on_release;
+
+ typedef typename mpl::if_<
+ dsl::is_ignore<typename dsl_features::coherency>,
+ on_release,
+ typename mpl::if_<
+ dsl::is_discard<typename dsl_features::on_release>,
+ iccl::coherency<iccl::coherency_bitset<on_release> >,
+ typename mpl::if_<
+ dsl::is_delay<typename dsl_features::recovery_when>,
+ iccl::coherency<iccl::coherency_bitset<on_release> >,
+ typename mpl::if_<
+ dsl::is_freeze<typename dsl_features::recovery_when>,
+ iccl::coherency<iccl::coherency_bitset<on_release> >,
+ typename mpl::if_<
+ dsl::is_fifo<typename dsl_features::recovery_how>,
+ iccl::coherency<iccl::coherency_bitset<on_release> >,
+ on_release
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type opt_coherency;
+
+
+ typedef typename mpl::if_<
+ boost::luid::dsl::is_ignore_error<typename dsl_features::on_overflow>,
+ iccl::return_error_value_on_overflow<opt_coherency>,
+ typename mpl::if_<
+ boost::luid::dsl::is_errno_on_error<typename dsl_features::on_overflow>,
+ luid::iccl::errno_on_overflow<opt_coherency>,
+ luid::iccl::throw_exception_on_overflow<opt_coherency>
+ >::type
+ >::type alt_on_overflow;
+
+ typedef alt_on_overflow reentrant;
+
+ typedef typename mpl::if_<
+ boost::luid::dsl::is_mono_threaded<typename dsl_features::scope>,
+ alt_on_overflow,
+ typename mpl::if_<
+ boost::luid::dsl::is_externally_locked<typename dsl_features::locking_strategy>,
+ alt_on_overflow,
+ iccl::internally_locked<alt_on_overflow>
+ >::type
+ >::type opt_locking;
+
+ typedef iccl::facade<opt_locking> facade;
+
+ typedef typename mpl::if_<
+ boost::luid::dsl::is_mono_threaded<typename dsl_features::scope>,
+ facade,
+ typename mpl::if_<
+ boost::luid::dsl::is_externally_locked<typename dsl_features::locking_strategy>,
+ iccl::externally_locked<facade>,
+ facade
+ >::type
+ >::type opt_external_locking;
+
+ typedef iccl::constructor<opt_external_locking> luidg_type;
+
+public:
+ struct config {
+ typedef numeric_type_ numeric_type;
+ static const numeric_type lower_bound = lower_bound_;
+ typedef time_traits_ time_traits;
+// typedef multi_threaded_locking_traits_ multi_threaded_locking_traits;
+ // typedef externally_locked_mutex_type_ externally_locked_mutex_type;
+ typedef typename dsl_features::allocator_type allocator_type;
+
+ typedef typename luidg_type::node_type node_type;
+ typedef typename luidg_type::header_type header_type;
+
+// typedef typename boost::detail::allocator::rebind_to<
+// allocator_type,
+// node_type
+// >::type node_allocator_type;
+// typedef node_allocator_type node_allocator;
+
+ typedef typename dsl_features::void_pointer_type void_pointer_type;
+// typedef typename dsl_features::internally_locking_traits internally_locking_traits;
+ typedef typename dsl_features::locking_traits locking_traits;
+
+
+// typedef typename mpl::if_<
+// matches<typename dsl_features::lifetime, dsl::process<> >,
+// node_type*,
+// boost::interprocess::offset_ptr<node_type>
+// >::type node_pointer_type;
+
+ typedef typename boost::pointer_to_other<void_pointer_type, node_type>
+ ::type node_pointer_type;
+
+ typedef typename luidg_type::type final;
+ };
+ typedef typename luidg_type::type type;
+};
+
+}}}
+#endif /*ASSEMBLE_COMPONENTS_HPP_*/

Added: sandbox/luid/boost/luid/iccl.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,271 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/luid for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_LUID_ICCL_HPP_
+#define BOOST_LUID_ICCL_HPP_
+
+#include "boost/luid/iccl/base.hpp"
+#include "boost/luid/iccl/storage.hpp"
+//#include "boost/luid/iccl/counter.hpp"
+#include "boost/luid/iccl/upper_bound.hpp"
+#include "boost/luid/iccl/static_lower_bound.hpp"
+#include "boost/luid/iccl/dynamic_lower_bound.hpp"
+#include "boost/luid/iccl/counter2.hpp"
+#include "boost/luid/iccl/discard.hpp"
+#include "boost/luid/iccl/fifo.hpp"
+#include "boost/luid/iccl/rec_fifo_delay.hpp"
+#include "boost/luid/iccl/on_overflow.hpp"
+#include "boost/luid/iccl/coherency_bitset.hpp"
+#include "boost/luid/iccl/set.hpp"
+#include "boost/luid/iccl/internally_locked.hpp"
+#include "boost/luid/iccl/externally_locked.hpp"
+#include "boost/luid/iccl/facade.hpp"
+#include "boost/luid/iccl/constructor.hpp"
+
+/*
+
+Functional
+ make a luid
+ recover a luid
+ resize
+
+Feature model
+ + The unsigned integer type
+ + numeric_type
+ - The lower bound value : the first value
+ + max
+ - The upper bound value : the fact the generator bounds until a given value
+ + max
+
+ - An error policy used when there are no more free uid
+ - throw_exception
+ - return_invalid_value
+
+ + A releasing policy which control whether identifiers are discarded or
+ recovered when they are released
+ - discard: the released luid are not reusable
+ - recover: the generator can recover identifiers that are released.
+ This has two features
+ + when the released values become reusable
+ - immediate: the released luid is immediatelly reusable
+ - delay: the luid is reusable after given a time.
+ This needs the following parameters
+ + time_type: the time type
+ + duration_type: the duration type
+ + now: how to get the current time
+ + duration: the delay after which the luid is reusable.
+ - freeze: the luid is reusable once some minimal number of new luid
+ have been taken
+ + distance: the
+ + how the reusable values are reused
+ - fifo: reusable values are reused on fifo order
+ - undefined: no constraint is added
+
+ + the scope of the luid generator
+ - mono_threaded: only one single thread access the luid generator
+ - multi_threaded: several threads in a single process share the luid generator
+ + A locking policy
+ - inter_process: several process share the luid generator
+ + A locking policy
+
+ + A locking policy determining the synchronization mechanisms for internal
+ access to shared resources.
+ - internally: the generator ensure that the make and release operations
+ are syncronized on its scope
+ - externally: the user needs to provide the needed synchronization.
+
+ + The lifetime of the information identified by this luids
+ - process: the information is lost once the process exits or shuts down
+ - node: the information is lost once the node process exits or shuts down.
+ If a process on the scope restarts it will recover the information.
+ - persistent: the information is preserved using some persistent mechanism.
+
+ + An optimization policy
+ - speed: the used algorithms are efficient even if a lot of space is used
+ - space: the needed space is minimazed even if this has as consequance a
+ lost of efficiency.
+ + extendability
+
+
+
+Which feature must to be in th DCL
+==================================
+. Should the lower, upper bound be static or given at construction time?
+ I think that these values must be given at construction time.
+
+. Should the low value be 0?
+???
+
+. Can the upper bound be changed? And how?
+ The upper bound should be changed following the same algorithm as a vector.
+
+. Should the duration be static, given at construction time or when releasing
+ the uid?
+ I think that this must be given at construction time.
+ This simplify the algorithm.
+
+. Configurability versus extendability
+In order to manage with all this variations this library propose the use of a
+luidg generator with a high degree of configurablity using a domain specific
+language (DSL). The DSL expressions are transformed to a Genvoca stack of
+Implemntation Components Configuration Language(ICCL) by the generator.
+
+Each IC is a mixin and all of them have same form
+
+template <typename INNER>
+class IC : public/protected/private INNER {
+ ...
+};
+
+This DSL can not be extended without modifying the library. In order to make
+extensions we need to modify how these implementation components are
+arranged. An Extending DSL language could be provided to this concern.
+The language could consider replacing an IC by a user IC, removing an IC or
+inserting over a IC a user IC. This has as consequence that the implementation
+components must be defined as concepts.
+Another posibility is to let the user extend the DSL, and provide a another
+generator.
+In any case the IC must be provided and the concep behind this concept must be
+explicit.
+
+. Do we need to use Boost.Parameters
+As the number of parameters is quite big the parameter should be given by name.
+The use of the Boost.Parameter seams to help to achieve that.
+
+DSL
+ luidg( [uint_type],
+ on_overflow(throw_exception|return_invalid_value),
+ on_release(
+ discard
+ | recover(
+ when (
+ immediate
+ | frozen(uint_type)
+ | delayed(time_type, duration_type, time_type now())
+ ),
+ how (
+ fifo
+ | undefined
+ )
+ ),
+ scope(
+ mono_threaded
+ | multi_threaded(locking(internally|externally))
+ | inter_process(locking(internally|externally))
+ ),
+ lifetime(
+ process
+ | node
+ | persistent
+ ),
+ optimization(speed|space),
+ extension (
+ | insert_over_synch(NewImpl)
+ | replace_synch(NewImpl)
+ | insert_over_error(NewImpl)
+ | replace_error(NewImpl)
+ | insert_over_recover(NewImpl)
+ | replace_recover(NewImpl)
+ | insert_over_counter(NewImpl)
+ | replace_counter(NewImpl)
+ | insert_over_holder(NewImpl)
+ | replace_holder(NewImpl)
+ | insert_over_base(NewImpl)
+ )*
+ Level(
+ )
+
+
+ICCL: GenVoca Grammar for the Locally Unique Identifier Generator LUIDG
+ _________________________________________________________________________
+ LUIDG = luidg[OptLocking]
+ _________________________________________________________________________
+ OptLocking =
+ | internally_locked[InternallyLockingContext]
+ | AltOnOverflow
+ InternallyLockingContext:
+ multi_threaded[AltOnOverflow]
+ | multi_process[AltOnOverflow]
+ _________________________________________________________________________
+ AltOnOverflow:
+ return_error_value[AltReleasing]
+ | throw_exception[AltReleasing]
+ _________________________________________________________________________
+ AltReleasing:
+ delay[Recoverable]
+ | freeze[Recoverable]
+ | Counter
+ Recoverable: recoverable[QueueContext]
+ QueueContext:
+ raw_queue[Counter]
+ | shm_queue[Counter]
+ | mmfile_queue[Counter]
+ _________________________________________________________________________
+ Counter: counter[CounterContext]
+ CounterContext:
+ raw_counter[Holder]
+ | shm_counter[Holder]
+ | mmfile_counter[Holder]
+ _________________________________________________________________________
+ Holder :
+ raw[Base]
+ | shm[Base]
+ | mmfile[Base]
+ _________________________________________________________________________
+ Base: base[Config]
+ _________________________________________________________________________
+ Config: [numeric_type] LUIDG
+
+ luidg[throw_exception[counter[raw_counter[raw[base[Config]]]]]]
+ luidg[throw_exception[counter[shm_counter[shm[base[Config]]]]]]
+ luidg[throw_exception[counter[mmfile_counter[mmfile[base[Config]]]]]]
+
+ luidg[throw_exception[recover[raw_queue[
+ counter[raw_counter[raw[base[Config]]]]]]]]
+ luidg[throw_exception[recover[shm_queue[
+ counter[shm_counter[shm[base[Config]]]]]]]]
+ luidg[throw_exception[recover[mmfile_queue[
+ counter[mmfile_counter[mmfile[base[Config]]]]]]]]
+
+ luidg[throw_exception[delay[recover[raw_queue[
+ counter[raw_counter[raw[base[Config]]]]]]]]]
+ luidg[throw_exception[delay[recover[shm_queue[
+ counter[shm_counter[shm[base[Config]]]]]]]]]
+ luidg[throw_exception[delay[recover[mmfile_queue[
+ counter[mmfile_counter[mmfile[base[Config]]]]]]]]]
+
+ luidg[throw_exception[freeze[recover[raw_queue[
+ counter[raw_counter[raw[base[Config]]]]]]]]]
+ luidg[throw_exception[freeze[recover[shm_queue[
+ counter[shm_counter[shm[base[Config]]]]]]]]]
+ luidg[throw_exception[freeze[recover[mmfile_queue[
+ counter[mmfile_counter[mmfile[base[Config]]]]]]]]]
+
+ luidg[internally_locked[multi_treaded[
+ throw_exception[freeze[recover[raw_queue[
+ counter[raw[counter[raw[base[Config]]]]]]]]]]]
+ luidg[internally_locked[multi_treaded[
+ throw_exception[freeze[recover[shm_queue[
+ counter[shm_counter[shm[base[Config]]]]]]]]]]]
+ luidg[internally_locked[multi_treaded[
+ throw_exception[freeze[recover[mmfile_queue[
+ counter[mmfile_counter[mmfile[base[Config]]]]]]]]]]]
+
+ luidg[internally_locked[interprocess[
+ throw_exception[freeze[recover[shm_queue[
+ counter[shm_counter[shm[base[Config]]]]]]]]]]]
+ luidg[internally_locked[interprocess[
+ throw_exception[freeze[recover[mmfile_queue[
+ counter[mmfile_counter[mmfile[base[Config]]]]]]]]]]]
+
+24+24+16
+ * */
+
+#endif /*ICCL_HPP_*/

Added: sandbox/luid/boost/luid/iccl/backdoor.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/backdoor.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,36 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/luid for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef BOOST_LUID_BACKDOOR_HPP_
+#define BOOST_LUID_BACKDOOR_HPP_
+
+namespace boost { namespace luid { namespace iccl {
+
+/**
+ */
+
+struct backdoor {
+
+ template <typename node_pointer_type, typename FINAL, typename numeric_type>
+ static node_pointer_type make_node(FINAL& f, numeric_type e) {
+ return f.make_node(e);
+ }
+
+ template <typename FINAL, typename node_pointer_type>
+ static bool valid_node(const FINAL& f, const node_pointer_type e) {
+ return f.valid_node(e);
+ }
+
+
+};
+
+} } }
+#endif // BOOST_LUID_BACKDOOR_HPP_

Added: sandbox/luid/boost/luid/iccl/base.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/base.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/luid for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef BOOST_LUID_BASE_HPP_
+#define BOOST_LUID_BASE_HPP_
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+/**
+ * This is the base template on the GenVoca hierarchy. It must define
+ * the config type
+ * constructor from the args parameter
+ */
+
+template <typename Generator>
+struct base {
+ typedef typename Generator::config config;
+ struct node_type {};
+ struct header_type {
+ typedef typename config::allocator_type allocator_type;
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo) {}
+ };
+ struct type {
+ typedef typename config::final final_type;
+ template <typename ArgsParam>
+ type(const ArgsParam& args) {}
+
+ final_type& final() {
+ return *static_cast<final_type*>(this);
+ }
+ const final_type& final() const {
+ return *static_cast<const final_type*>(this);
+ }
+ };
+};
+
+
+} // iccl
+} // luid
+} // boost
+#endif // BOOST_LUID_BASE_HPP_
+
+
+

Added: sandbox/luid/boost/luid/iccl/coherency_bitset.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/coherency_bitset.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,158 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_COHERENCY_BITSET_HPP_
+#define BOOST_LUID_ICCL_COHERENCY_BITSET_HPP_
+
+#include "boost/dynamic_bitset.hpp"
+#include <exception>
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+struct already_used : std::exception {
+ virtual ~already_used() throw() {}
+ virtual const char* what() const throw() {
+ return "already_used";
+ }
+};
+
+template <typename Inner>
+struct coherency_bitset
+{
+ typedef Inner lower_layer;
+ typedef typename lower_layer::config config;
+
+ typedef typename lower_layer::node_type node_type;
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+ typedef dynamic_bitset<unsigned long,
+ typename boost::detail::allocator::rebind_to<
+ typename config::allocator_type,
+ unsigned long
+ >::type> bitset;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , used_(super_type::upper_bound(), 0, allo)
+ {
+ }
+ bitset& used() { return used_;}
+ const bitset& used() const { return used_;}
+ bitset used_;
+
+ };
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+// typedef dynamic_bitset<unsigned long,
+// typename boost::detail::allocator::rebind_to<
+// typename config::allocator_type,
+// unsigned long
+// >::type> bitset;
+ typedef typename config::header_type::bitset bitset;
+
+ bitset& used() { return super_type::header().used();}
+ const bitset& used() const { return super_type::header().used();}
+ bitset* used_;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ // std::cout << " coherency_bitset" << std::endl;
+
+ }
+
+// ~type() {
+// used_->bitset::~bitset();
+// super_type::template deallocate<bitset, bitset*>(used_);
+// }
+
+ bool is_in(numeric_type n) const {
+ return used().test(n);
+ }
+
+ void remove(numeric_type n) {
+ used().reset(n);
+ }
+
+ void insert(numeric_type n) {
+ std::cout << " insert coherency_bitset " << n << std::endl;
+ used().set(n);
+ }
+
+ //!reset the upper bound
+ //!return the new upper bound
+ numeric_type set_upper_bound(numeric_type upper) {
+ numeric_type n = super_type::set_upper_bound(upper);
+// std::cout << " set_upper_bound coherency_bitset b" << used().size() << std::endl;
+ used().resize(n);
+// std::cout << " set_upper_bound coherency_bitset a" << used().size() << std::endl;
+// BOOSt_CHECK(used().size()==n);
+ return n;
+ }
+
+ void clear() {
+ super_type::clear();
+ used().reset();
+ }
+
+ numeric_type number_of_reusable() {
+ return used().count();
+ }
+ };
+};
+
+template <typename Inner>
+struct coherency : public Inner
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {}
+
+ numeric_type make() {
+ numeric_type n = super_type::make();
+ super_type::remove(n);
+ return n;
+ }
+
+ void release(numeric_type n) {
+ if(super_type::is_in(n)) {
+ throw already_used();
+ }
+
+ super_type::release(n);
+ super_type::insert(n);
+ }
+ };
+};
+
+
+} } }
+#endif // BOOST_LUID_ICCL_COHERENCY_BITSET_HPP_

Added: sandbox/luid/boost/luid/iccl/constructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/constructor.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,51 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_CONSTRUCTOR_HPP_
+#define BOOST_LUID_ICCL_CONSTRUCTOR_HPP_
+
+#include "boost/parameter.hpp"
+
+namespace boost { namespace luid { namespace iccl {
+
+/**
+ * This is the outer most mixin class on the genvoca stack.
+ * It provides the public interface.
+ * */
+
+
+template <typename Inner>
+struct constructor
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+
+ //! constructor with name parameters
+ BOOST_PARAMETER_CONSTRUCTOR(
+ type, (super_type), tag
+ , (optional (low,*)) (optional (high,*))
+ (optional (delay,*))
+ (optional (shm_name,*)) (optional (shm_size,*))
+ (optional (ext_mtx,*))
+ ) // no semicolon
+
+// template <typename ArgsParam>
+// luidg(const ArgsParam& args)
+// : super_type(args)
+// {
+// }
+ };
+};
+
+} } }
+#endif // BOOST_LUID_ICCL_CONSTRUCTOR_HPP_

Added: sandbox/luid/boost/luid/iccl/counter.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/counter.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,152 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_AUTO_INCREMENT_HPP_
+#define BOOST_LUID_AUTO_INCREMENT_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/math/policies/error_handling.hpp>
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+
+BOOST_PARAMETER_NAME(low)
+BOOST_PARAMETER_NAME(high)
+
+namespace boost { namespace luid {
+
+namespace iccl
+{
+
+/**
+ * This is class implements the simple way to obtain a unique identifier,
+ * i.e. maintain a counter which will be increased each time a uid is made.
+ * The uid could range on the possible values on the numeric_type, but the
+ * application can reduce this range, giving the low value on the low parameter
+ * and the high value.
+ * The single problem with this approach is the uid which are no more used are
+ * discarded.
+ * As a consequence, the limit will be reached at some time.
+ * This can be only a useful strategy if the limit is enough big related to the
+ * lifetime of the application.
+ * In any case when this limit is reached, there are two possibilities:
+ * either return a invalid value representing that no more uid are available or
+ * throw an exception. This decision is not the responsability of this class,
+ * so this class delegates to the function on_overflow on the final
+ * instance which will do the rigth strategy.
+ * A default implementation consists in returning the invalid value, which is
+ * equal to the limit.
+ */
+
+template <typename LowerLayer>
+struct counter
+{
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ typedef typename lower_layer::node_type node_type;
+
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::void_pointer_type void_pointer_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo)
+ : super_type(args, allo)
+ , current_(args[_low|boost::integer_traits<numeric_type>::const_min])
+ , lower_bound_(current_)
+ , upper_bound_(args[_high|boost::integer_traits<numeric_type>::const_max])
+ {
+ }
+
+ numeric_type current_;
+ numeric_type lower_bound_;
+ numeric_type upper_bound_;
+ // accesors
+ numeric_type& current() {return current_;}
+ numeric_type current() const {return current_;}
+ numeric_type& lower_bound() {return lower_bound_;}
+ numeric_type lower_bound() const {return lower_bound_;}
+ numeric_type& upper_bound() {return upper_bound_;}
+ numeric_type upper_bound() const {return upper_bound_;}
+
+ };
+
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ // forward construction to super type
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ // accesors
+ numeric_type& current() {return super_type::header().current();}
+ numeric_type current() const {return super_type::header().current();}
+ numeric_type count() const {return super_type::header().current();}
+ numeric_type& upper_bound() {return super_type::header().upper_bound();}
+ numeric_type upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type lower_bound() const {return super_type::header().lower_bound();}
+ numeric_type get_upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type error() const {
+ return std::numeric_limits<numeric_type>::has_infinity
+ ? std::numeric_limits<numeric_type>::infinity()
+ : boost::math::tools::max_value<numeric_type>();
+ }
+
+ numeric_type make(numeric_type& d) {
+ if (upper_bound()-current()>d) {
+ d=upper_bound()-current();
+ }
+ current() +=d;
+ return current();
+ }
+
+ // monotonic counter
+ numeric_type make() {
+ return current()++;
+// return super_type::header_->current_++;
+ }
+
+ void release(numeric_type n) {
+ // n must be less that the current value
+ // assert(n< value());
+ }
+
+ bool on_overflow() const {
+ return (current()==upper_bound());
+// return (super_type::header_->current_==super_type::header_->upper_bound_);
+ }
+
+ numeric_type set_upper_bound(numeric_type upper) {
+ if (upper > current()) {
+ upper_bound()=upper;
+ }
+ return upper_bound();
+
+ }
+
+ void clear() {
+ current() = lower_bound();
+// super_type::header_->current_ = super_type::header_->lower_bound_;
+ }
+
+ };
+};
+
+} } }
+
+
+
+#endif /*AUTO_INCREMENT_H_*/

Added: sandbox/luid/boost/luid/iccl/counter2.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/counter2.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,128 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_COUNTER_HPP_
+#define BOOST_LUID_ICCL_COUNTER_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/math/policies/error_handling.hpp>
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+
+namespace boost { namespace luid {
+
+namespace iccl
+{
+
+/**
+ * This is class implements the simple way to obtain a unique identifier,
+ * i.e. maintain a counter which will be increased each time a uid is made.
+ * The uid could range on the possible values on the numeric_type, but the
+ * application can reduce this range, giving the low value on the low parameter
+ * and the high value.
+ * The single problem with this approach is the uid which are no more used are
+ * discarded.
+ * As a consequence, the limit will be reached at some time.
+ * This can be only a useful strategy if the limit is enough big related to the
+ * lifetime of the application.
+ * In any case when this limit is reached, there are two possibilities:
+ * either return a invalid value representing that no more uid are available or
+ * throw an exception. This decision is not the responsability of this class,
+ * so this class delegates to the function on_overflow on the final
+ * instance which will do the rigth strategy.
+ * A default implementation consists in returning the invalid value, which is
+ * equal to the limit.
+ */
+
+template <typename LowerLayer>
+struct counter
+{
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ typedef typename lower_layer::node_type node_type;
+
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::void_pointer_type void_pointer_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo)
+ : super_type(args, allo)
+ , current_(super_type::lower_bound())
+ {
+ }
+
+ numeric_type current_;
+ // accesors
+ numeric_type& current() {return current_;}
+ numeric_type current() const {return current_;}
+ };
+
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ // forward construction to super type
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ // accesors
+ numeric_type& current() {return super_type::header().current();}
+ numeric_type current() const {return super_type::header().current();}
+ numeric_type count() const {return super_type::header().current();}
+
+ numeric_type make(numeric_type& d) {
+ if (super_type::upper_bound()-current()>d) {
+ d=super_type::upper_bound()-current();
+ }
+ current() +=d;
+ return current();
+ }
+
+ // monotonic counter
+ numeric_type make() {
+ return current()++;
+ }
+
+ void release(numeric_type n) {
+ // n must be less that the current value
+ // assert(n< value());
+ }
+
+ bool on_overflow() const {
+ return (current()==super_type::upper_bound());
+ }
+
+ numeric_type set_upper_bound(numeric_type upper) {
+ if (upper > current()) {
+ super_type::upper_bound()=upper;
+ }
+ return super_type::upper_bound();
+
+ }
+
+ void clear() {
+ current() = super_type::lower_bound();
+ }
+
+ };
+};
+
+} } }
+
+
+
+#endif // BOOST_LUID_ICCL_COUNTER_HPP_

Added: sandbox/luid/boost/luid/iccl/discard.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/discard.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,32 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_DISCARD_HPP_
+#define BOOST_LUID_ICCL_DISCARD_HPP_
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+template <typename Inner>
+struct discard
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ typedef typename inner_type::type type;
+};
+
+}
+}
+}
+#endif // BOOST_LUID_ICCL_DISCARD_HPP_

Added: sandbox/luid/boost/luid/iccl/dynamic_lower_bound.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/dynamic_lower_bound.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,76 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_DYNAMIC_LOWER_BOUND_HPP_
+#define BOOST_LUID_ICCL_DYNAMIC_LOWER_BOUND_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/math/policies/error_handling.hpp>
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+
+#ifndef BOOST_LUID_ICCL_LOW
+#define BOOST_LUID_ICCL_LOW
+BOOST_PARAMETER_NAME(low)
+#endif
+namespace boost { namespace luid {
+
+namespace iccl
+{
+
+template <typename LowerLayer>
+struct dynamic_lower_bound
+{
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ typedef typename lower_layer::node_type node_type;
+
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo)
+ : super_type(args, allo)
+ , lower_bound_(args[_low|boost::integer_traits<numeric_type>::const_min])
+ {
+ }
+
+ const numeric_type lower_bound_;
+ // accesors
+// numeric_type& lower_bound() {return lower_bound_;}
+ numeric_type lower_bound() const {return lower_bound_;}
+
+ };
+
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ // forward construction to super type
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ // accesors
+ numeric_type lower_bound() const {return super_type::header().lower_bound();}
+
+ };
+};
+
+} } }
+
+
+
+#endif // BOOST_LUID_ICCL_DYNAMIC_LOWER_BOUND_HPP_

Added: sandbox/luid/boost/luid/iccl/externally_locked.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/externally_locked.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,101 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUIDG_ICCL_EXTERNALLY_LOCKED_HPP_
+#define BOOST_LUIDG_ICCL_EXTERNALLY_LOCKED_HPP_
+
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+#include "boost/thread/mutex.hpp"
+// declare the tag for the mtx named parameter
+BOOST_PARAMETER_NAME(ext_mtx) // Note: no semicolon
+
+namespace boost
+{
+ template <typename Lock>
+ class strict_lock {
+ public:
+ bool same_lock(Lock& mtx) { return true;}
+
+ };
+namespace luid
+{
+
+struct bad_lock : std::exception {
+ virtual ~bad_lock() throw() {}
+ virtual const char* what() const throw() {
+ return "bad_lock";
+ }
+};
+
+namespace iccl
+{
+
+template <typename Inner>
+struct externally_locked
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+
+ struct header_type : inner_type::header_type
+ {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::locking_traits locking_traits;
+ typedef typename locking_traits::mutex_type mutex_type;
+ typedef typename config::allocator_type allocator_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , mutex_(args[_ext_mtx])
+ {}
+
+ mutex_type& mutex() { return mutex_;}
+ const mutex_type& mutex() const { return mutex_;}
+ mutex_type& mutex_;
+
+ };
+
+ struct type : protected inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename super_type::type facade_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::locking_traits locking_traits;
+ typedef typename locking_traits::mutex_type mutex_type;
+ typedef typename locking_traits::scoped_lock scoped_lock;
+
+ mutex_type& mutex() { return super_type::header().mutex();}
+ const mutex_type& mutex() const { return super_type::header().mutex();}
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {}
+
+ facade_type& get(scoped_lock& locker) {
+ if (locker && (locker.mutex()==&mutex())) {
+ return super_type::facade();
+ } else {
+ throw bad_lock();
+ }
+ }
+ const facade_type& get(scoped_lock& locker) const {
+ if (locker && (locker.mutex()==&mutex())) {
+ return super_type::facade();
+ } else {
+ throw bad_lock();
+ }
+ }
+ };
+};
+
+}
+}
+}
+#endif // BOOST_LUIDG_ICCL_EXTERNALLY_LOCKED_HPP_

Added: sandbox/luid/boost/luid/iccl/facade.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/facade.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,98 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_FACADE_HPP_
+#define BOOST_LUID_ICCL_FACADE_HPP_
+
+#include "boost/parameter.hpp"
+#include <iostream>
+namespace boost { namespace luid { namespace iccl {
+
+/**
+ * This is the outer most mixin class on the genvoca stack.
+ * It provides the public interface.
+ * */
+
+
+template <typename Inner>
+struct facade
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : protected inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef type facade_type;
+ typedef typename super_type::node_type node_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {}
+
+ // public operations
+ type& facade() {
+ return *this;
+ }
+ const type& facade() const {
+ return *this;
+ }
+
+ //!makes a new luid
+ //!Returns end() if no more luid available ot throw an exception
+ //! depending on on_overflow policy.
+ numeric_type make() {
+ return super_type::make();
+ }
+
+ //!release a luid
+ //!this luid could be reused by the make function
+ //! depending on the on_release policy
+ //!Could throws an exception if the luid was already released
+ //! depending on check_is_free policy.
+ void release(numeric_type n) {
+ super_type::release(n);
+ }
+
+ //!return the non valid numeric value
+ numeric_type error() const {
+ return super_type::error();
+ }
+
+ //!return the non valid numeric value
+ numeric_type upper_bound() const {
+ return super_type::upper_bound();
+ }
+ //!return the non valid numeric value
+ numeric_type lower_bound() const {
+ return super_type::lower_bound();
+ }
+
+ //!reset the upper bound
+ //!return the new upper bound
+ numeric_type set_upper_bound(numeric_type upper) {
+ std::cout << " set_upper_bound facade b" << upper << std::endl;
+ return super_type::set_upper_bound(upper);
+ }
+
+ //!reinit the luid generator as it was after construction
+ void clear() {
+ super_type::clear();
+ }
+
+ numeric_type count() const {
+ return super_type::count();
+ }
+
+ };
+};
+
+} } }
+#endif // BOOST_LUID_FACADE_HPP_

Added: sandbox/luid/boost/luid/iccl/fifo.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/fifo.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,163 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_FIFO_HPP_
+#define BOOST_LUID_ICCL_FIFO_HPP_
+
+#include "boost/luid/iccl/backdoor.hpp"
+
+#include <boost/intrusive/list.hpp>
+#include <boost/mpl/assert.hpp>
+
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+/**
+ * This class implements the recoverable strategy.
+ * It store on a queue the uid which are no more needed by the application.
+ * It not store realy the uid, but an element_type which could be redefined by
+ * other layers, and that is obtained using the factory method make_element.
+ * When the application request an uid, the take function forwards the call to
+ * the lower layer when the queue is empty.
+ * When non empty, and before to return the front element on the queue, the
+ * take function check if the element stored on the front of the queue is valid.
+ * When not valid the take function forwards the call to the lower layer.
+ */
+template <typename Inner>
+struct fifo
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+
+ struct node_type :
+ inner_type::node_type,
+ boost::intrusive::make_list_base_hook<
+ boost::intrusive::void_pointer<
+ typename config::void_pointer_type
+ >
+ >::type
+ {
+ typedef typename inner_type::node_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ node_type(numeric_type v):val_(v) {}
+ operator numeric_type() const {
+ return val_;
+ }
+ numeric_type val_;
+ };
+
+ struct header_type : inner_type::header_type {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::allocator_type allocator_type;
+// typedef typename boost::intrusive::list<node_type, boost::intrusive::constant_time_size<false> > queue_type;
+ typedef typename boost::intrusive::make_list<node_type>::type queue_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , queue_()
+ {}
+
+ queue_type& queue() { return queue_;}
+ const queue_type& queue() const { return queue_;}
+ queue_type queue_;
+ };
+
+ struct type : inner_type::type
+ {
+ friend class backdoor;
+ typedef typename inner_type::type super_type;
+ typedef typename config::final final_type;
+ typedef typename config::numeric_type numeric_type;
+
+ typedef typename config::node_type node_type;
+ typedef typename config::node_pointer_type node_pointer_type;
+
+ template <typename FINAL>
+ struct disposer
+ {
+ FINAL& final;
+ disposer(FINAL& f) : final(f) {}
+ void operator()(node_pointer_type delete_this)
+ { final.dispose_node(delete_this); }
+ };
+
+ typedef typename config::header_type::queue_type queue_type;
+
+ queue_type& queue() { return super_type::header().queue(); }
+ const queue_type& queue() const { return super_type::header().queue(); }
+
+ public:
+ bool valid_node(node_pointer_type n) const {
+ return true;
+ }
+
+ node_pointer_type make_node(typename config::numeric_type e) {
+
+// TODO void* n =super_type::allocate_node();
+// return new(n) node_type(e);
+// boost::detail::allocator::construct(&x->value(),v);
+ node_pointer_type n = new node_type(e);
+ return n;
+// return new node_type(e);
+
+ }
+
+ void dispose_node(node_pointer_type n) {
+ n->~node_type();
+ super_type::deallocate_node(n);
+ }
+
+
+ // forwards construction
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {}
+
+ ~type() {
+ clear();
+ }
+
+ numeric_type make() {
+ if (queue().empty()) return super_type::make();
+
+ node_pointer_type head = &queue().front();
+ if (!backdoor::valid_node(super_type::final(),head)) {
+ return super_type::make();
+ }
+ queue().pop_front();
+ numeric_type res = head->val_;
+ dispose_node(head);
+ return res;
+ }
+ void release(numeric_type n) {
+ queue().push_back(*backdoor::make_node<node_pointer_type>(
+ super_type::final(), n));
+ }
+
+ void clear() {
+ queue().clear_and_dispose(disposer<final_type>(super_type::final()));
+ super_type::clear();
+ }
+
+ numeric_type count() const {
+ return super_type::count()-queue().size();
+ }
+ };
+};
+
+}
+}
+}
+#endif // BOOST_LUID_ICCL_FIFO_HPP_

Added: sandbox/luid/boost/luid/iccl/internally_locked.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/internally_locked.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,85 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_INTERNALLY_LOCKED_HPP_
+#define BOOST_LUID_INTERNALLY_LOCKED_HPP_
+
+#include "boost/thread/mutex.hpp"
+
+namespace boost {
+namespace luid {
+namespace iccl {
+
+template <typename Inner>
+struct internally_locked
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+
+ struct header_type : inner_type::header_type
+ {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::locking_traits locking_traits;
+ typedef typename locking_traits::mutex_type mutex_type;
+ typedef typename config::allocator_type allocator_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , mutex_()
+ {}
+
+ mutex_type& mutex() { return mutex_;}
+ const mutex_type& mutex() const { return mutex_;}
+ mutable mutex_type mutex_;
+ };
+
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::locking_traits
+ locking_traits;
+ typedef typename locking_traits::mutex_type mutex_type;
+ typedef typename locking_traits::scoped_lock scoped_lock;
+
+ mutex_type& mutex() { return super_type::header().mutex();}
+ const mutex_type& mutex() const { return super_type::header().mutex();}
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {}
+
+ numeric_type make() {
+ scoped_lock g(mutex());
+ return super_type::make();
+ }
+ void release(numeric_type n) {
+ scoped_lock g(mutex());
+ super_type::release(n);
+ }
+ numeric_type set_upper_bound(numeric_type upper) {
+ scoped_lock g(mutex());
+ return super_type::set_upper_bound(upper);
+ }
+
+ numeric_type count() const {
+ scoped_lock g(mutex());
+ return super_type::count();
+ }
+
+ void clear() {
+ scoped_lock g(mutex());
+ super_type::clear();
+ }
+ };
+};
+
+} } }
+#endif // BOOST_LUID_INTERNALLY_LOCKED_HPP_

Added: sandbox/luid/boost/luid/iccl/on_overflow.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/on_overflow.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,116 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ON_OVERFLOW_HPP_
+#define BOOST_LUID_ON_OVERFLOW_HPP_
+
+#include <exception>
+#include <ostream>
+#include <boost/math/policies/error_handling.hpp>
+
+namespace boost { namespace luid {
+
+struct overflow : std::exception {
+ virtual ~overflow() throw() {}
+ virtual const char* what() const throw() {
+ return "overflow";
+ }
+};
+
+namespace iccl {
+
+template <typename Inner>
+struct return_error_value_on_overflow
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+// friend class backdoor;
+ typedef typename config::numeric_type numeric_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ numeric_type make() {
+ if (super_type::on_overflow()) {
+ return super_type::error();
+ } else {
+ return super_type::make();
+ }
+ }
+ };
+};
+
+template <typename Inner>
+struct errno_on_overflow
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+// friend class backdoor;
+ typedef typename config::numeric_type numeric_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ numeric_type make() {
+ if (super_type::on_overflow()) {
+ errno = ERANGE;
+ return super_type::error();
+ } else {
+ return super_type::make();
+ }
+ }
+ };
+};
+
+
+template <typename Inner>
+struct throw_exception_on_overflow
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {}
+
+ numeric_type make() {
+ if (super_type::on_overflow()) {
+ throw overflow();
+ } else {
+ return super_type::make();
+ }
+ }
+ };
+};
+
+} } }
+
+#endif // BOOST_LUID_ON_OVERFLOW_HPP_

Added: sandbox/luid/boost/luid/iccl/posix_time_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/posix_time_traits.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,30 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_POSIC_TIME_TRAITS_HPP_
+#define BOOST_LUID_POSIC_TIME_TRAITS_HPP_
+
+#include "boost/date_time/posix_time/posix_time_types.hpp"
+
+namespace boost {
+namespace luid {
+namespace iccl {
+
+struct posix_time_traits {
+ typedef boost::posix_time::ptime time_type;
+ typedef boost::posix_time::time_duration duration_type;
+ static time_type now() {
+ return boost::posix_time::second_clock::local_time();
+ }
+ static const duration_type def() { return duration_type(0,0,0,1);}
+};
+
+}
+}
+}
+#endif /*BOOST_LUID_POSIC_TIME_TRAITS_HPP_*/

Added: sandbox/luid/boost/luid/iccl/rec_fifo_delay.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/rec_fifo_delay.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,95 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_REC_DELAY_HPP_
+#define BOOST_LUID_ICCL_REC_DELAY_HPP_
+
+#include <queue>
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/luid/iccl/timestamped.hpp"
+
+
+BOOST_PARAMETER_NAME(delay) // Note: no semicolon
+
+namespace boost { namespace luid {
+
+
+namespace iccl {
+
+template <typename Inner>
+struct rec_fifo_delay
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ struct node_type
+ : timestamped<typename config::time_traits,
+ typename inner_type::node_type>
+ {
+ typedef timestamped<
+ typename config::time_traits,
+ typename inner_type::node_type> super_type;
+ typedef typename config::time_traits time_traits;
+ typedef typename time_traits::duration_type duration_type;
+ typedef typename config::numeric_type numeric_type;
+
+ node_type(const duration_type delay, const numeric_type e)
+ : super_type(delay, e)
+ {
+ }
+ };
+
+ struct header_type : inner_type::header_type
+ {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::time_traits time_traits;
+ typedef typename time_traits::duration_type duration_type;
+ typedef typename config::allocator_type allocator_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , delay_(args[_delay|time_traits::def()])
+ {}
+
+ duration_type delay() { return delay_;}
+ duration_type delay_;
+ };
+ struct type : inner_type::type
+ {
+ friend class backdoor;
+ typedef typename inner_type::type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::time_traits time_traits;
+ typedef typename time_traits::duration_type duration_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::node_pointer_type node_pointer_type;
+
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ node_type* make_node(numeric_type e) {
+ //std::cout << "**** make_node" << std::endl;
+ // TODO threre is a problems with this new expression
+ return new node_type(super_type::header().delay(), e);
+
+// return new(super_type::allocate_node())
+// node_type(super_type::header().delay(), e);
+ }
+
+ bool valid_node(node_pointer_type e) const {
+ return !e->alive() && super_type::valid_node(e);
+ }
+ };
+};
+
+} } }
+
+#endif // BOOST_LUID_ICCL_REC_DELAY_HPP_

Added: sandbox/luid/boost/luid/iccl/recoverable_distance.h
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/recoverable_distance.h 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,59 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_NUIDG_RECOVERABLE_HPP_
+#define BOOST_NUIDG_RECOVERABLE_HPP_
+
+//#include <queue>
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+/**
+ */
+template <typename Inner>
+class recoverable_distance : public Inner
+{
+public:
+ typedef Inner super_type;
+ typedef typename super_type::config config;
+ typedef typename config::final final;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::distance_type distance_type;
+
+ typedef typename config::void_pointer_type void_pointer_type;
+
+ // forwards construction
+ template <typename ArgsParam>
+ recoverable_distance(const ArgsParam& args)
+ : super_type(args)
+ , distance_(args[distance|0])
+ {}
+
+ void release(numeric_type n) {
+ if (distance_>queue_.size()) {
+ distance_type required = distance_-queue_.size();
+ numeric_type r = super_type::make(required);
+ for (std::size_t d=required; d>0; --d) {
+ super_type::release(r-d+1);
+ }
+ }
+ super_type::release(n);
+ }
+private:
+ std::size_t distance_;
+};
+
+}
+}
+}
+#endif /*RECOVERABLE_HPP_*/

Added: sandbox/luid/boost/luid/iccl/set.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/set.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,206 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_SET_HPP_
+#define BOOST_LUID_ICCL_SET_HPP_
+
+#include "boost/luid/iccl/backdoor.hpp"
+
+#include <boost/intrusive/set.hpp>
+#include <boost/mpl/assert.hpp>
+
+#ifndef BOOST_LUID_ICCL_LOW
+#define BOOST_LUID_ICCL_LOW
+BOOST_PARAMETER_NAME(low)
+#endif
+
+#ifndef BOOST_LUID_ICCL_HIGH
+#define BOOST_LUID_ICCL_HIGH
+
+BOOST_PARAMETER_NAME(high)
+
+#endif
+
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+/**
+ * This class implements the recoverable strategy.
+ * It store on a queue the uid which are no more needed by the application.
+ * It not store realy the uid, but an element_type which could be redefined by
+ * other layers, and that is obtained using the factory method make_element.
+ * When the application request an uid, the take function forwards the call to
+ * the lower layer when the queue is empty.
+ * When non empty, and before to return the front element on the queue, the
+ * take function check if the element stored on the front of the queue is valid.
+ * When not valid the take function forwards the call to the lower layer.
+ */
+template <typename Inner>
+struct set
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+
+ struct node_type :
+ inner_type::node_type,
+ boost::intrusive::set_base_hook<
+ boost::intrusive::void_pointer<
+ typename config::void_pointer_type
+ >
+ >
+ {
+ typedef typename inner_type::node_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ node_type(numeric_type v):val_(v) {}
+ operator numeric_type() const {
+ return val_;
+ }
+ numeric_type val_;
+ };
+
+ struct header_type : inner_type::header_type {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::allocator_type allocator_type;
+// typedef typename boost::intrusive::make_set<node_type, boost::intrusive::constant_time_size<false> > queue_type;
+ typedef typename boost::intrusive::make_set<node_type>::type set_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , set_()
+ {
+ }
+
+ set_type& set() { return set_;}
+ const set_type& set() const { return set_;}
+ // accesors
+ set_type set_;
+ };
+
+ struct type : inner_type::type
+ {
+ friend class backdoor;
+ typedef typename inner_type::type super_type;
+ typedef typename config::final final_type;
+ typedef typename config::numeric_type numeric_type;
+
+ typedef typename config::node_type node_type;
+ typedef typename config::node_pointer_type node_pointer_type;
+
+ template <typename FINAL>
+ struct disposer
+ {
+ FINAL& final;
+ disposer(FINAL& f) : final(f) {}
+ void operator()(node_pointer_type delete_this)
+ { final.dispose_node(delete_this); }
+ };
+
+ typedef typename config::header_type::set_type set_type;
+
+ set_type& set() { return super_type::header().set(); }
+ const set_type& set() const { return super_type::header().set(); }
+
+ public:
+ node_pointer_type make_node(typename config::numeric_type e) {
+ std::cout << "BEGIN recoverable make_node" << std::endl;
+
+// TODO void* n =super_type::allocate_node();
+// return new(n) node_type(e);
+// boost::detail::allocator::construct(&x->value(),v);
+ node_pointer_type n = new node_type(e);
+ std::cout << "END recoverable make_node" << std::endl;
+ return n;
+// return new node_type(e);
+
+ }
+
+ void dispose_node(node_pointer_type n) {
+ n->~node_type();
+ super_type::deallocate_node(n);
+ }
+
+
+ // forwards construction
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {
+ for (numeric_type i = super_type::lower_bound(); i<super_type::upper_bound(); ++i) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), i);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ }
+ }
+ ~type() {
+ clear();
+ }
+ // accesors
+// numeric_type get_upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type error() const {
+ return std::numeric_limits<numeric_type>::has_infinity
+ ? std::numeric_limits<numeric_type>::infinity()
+ : boost::math::tools::max_value<numeric_type>();
+ }
+
+ bool on_overflow() const {
+ return (set().empty());
+ }
+
+ numeric_type make() {
+ typename set_type::iterator head = set().begin();
+ numeric_type res = head->val_;
+ set().erase_and_dispose(head, disposer<final_type>(super_type::final()));
+ return res;
+ }
+
+ void release(numeric_type n) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), n);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ if (!res.second) {
+ throw already_used();
+ } else {
+ super_type::final().dispose_node(ptr);
+ }
+ }
+
+ void clear() {
+ set().clear_and_dispose(disposer<final_type>(super_type::final()));
+// super_type::clear();
+ }
+
+ numeric_type set_upper_bound(numeric_type upper) {
+ if (upper > super_type::upper_bound()) {
+ for (numeric_type i = super_type::upper_bound(); i<upper; ++i) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), i);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ }
+ super_type::upper_bound()=upper;
+ }
+ return super_type::upper_bound();
+
+ }
+
+ numeric_type count() const {
+ return set().size();
+ }
+ };
+};
+
+}
+}
+}
+#endif // BOOST_LUID_ICCL_FIFO_HPP_

Added: sandbox/luid/boost/luid/iccl/set2.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/set2.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,218 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_SET_HPP_
+#define BOOST_LUID_ICCL_SET_HPP_
+
+#include "boost/luid/iccl/backdoor.hpp"
+
+#include <boost/intrusive/set.hpp>
+#include <boost/mpl/assert.hpp>
+
+#ifndef BOOST_LUID_ICCL_LOW
+#define BOOST_LUID_ICCL_LOW
+BOOST_PARAMETER_NAME(low)
+#endif
+
+#ifndef BOOST_LUID_ICCL_HIGH
+#define BOOST_LUID_ICCL_HIGH
+
+BOOST_PARAMETER_NAME(high)
+
+#endif
+
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+/**
+ * This class implements the recoverable strategy.
+ * It store on a queue the uid which are no more needed by the application.
+ * It not store realy the uid, but an element_type which could be redefined by
+ * other layers, and that is obtained using the factory method make_element.
+ * When the application request an uid, the take function forwards the call to
+ * the lower layer when the queue is empty.
+ * When non empty, and before to return the front element on the queue, the
+ * take function check if the element stored on the front of the queue is valid.
+ * When not valid the take function forwards the call to the lower layer.
+ */
+template <typename Inner>
+struct set
+{
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+
+ struct node_type :
+ inner_type::node_type,
+ boost::intrusive::set_base_hook<
+ boost::intrusive::void_pointer<
+ typename config::void_pointer_type
+ >
+ >
+ {
+ typedef typename inner_type::node_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ node_type(numeric_type v):val_(v) {}
+ operator numeric_type() const {
+ return val_;
+ }
+ numeric_type val_;
+ };
+
+ struct header_type : inner_type::header_type {
+ typedef typename inner_type::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::allocator_type allocator_type;
+// typedef typename boost::intrusive::make_set<node_type, boost::intrusive::constant_time_size<false> > queue_type;
+ typedef typename boost::intrusive::make_set<node_type>::type set_type;
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, allocator_type& allo)
+ : super_type(args, allo)
+ , lower_bound_(args[_low|boost::integer_traits<numeric_type>::const_min])
+ , upper_bound_(args[_high|boost::integer_traits<numeric_type>::const_max])
+ , set_()
+ {
+ }
+
+ set_type& set() { return set_;}
+ const set_type& set() const { return set_;}
+ // accesors
+ numeric_type& lower_bound() {return lower_bound_;}
+ numeric_type lower_bound() const {return lower_bound_;}
+ numeric_type& upper_bound() {return upper_bound_;}
+ numeric_type upper_bound() const {return upper_bound_;}
+
+ numeric_type lower_bound_;
+ numeric_type upper_bound_;
+ set_type set_;
+ };
+
+ struct type : inner_type::type
+ {
+ friend class backdoor;
+ typedef typename inner_type::type super_type;
+ typedef typename config::final final_type;
+ typedef typename config::numeric_type numeric_type;
+
+ typedef typename config::node_type node_type;
+ typedef typename config::node_pointer_type node_pointer_type;
+
+ template <typename FINAL>
+ struct disposer
+ {
+ FINAL& final;
+ disposer(FINAL& f) : final(f) {}
+ void operator()(node_pointer_type delete_this)
+ { final.dispose_node(delete_this); }
+ };
+
+ typedef typename config::header_type::set_type set_type;
+
+ set_type& set() { return super_type::header().set(); }
+ const set_type& set() const { return super_type::header().set(); }
+
+ public:
+ node_pointer_type make_node(typename config::numeric_type e) {
+ std::cout << "BEGIN recoverable make_node" << std::endl;
+
+// TODO void* n =super_type::allocate_node();
+// return new(n) node_type(e);
+// boost::detail::allocator::construct(&x->value(),v);
+ node_pointer_type n = new node_type(e);
+ std::cout << "END recoverable make_node" << std::endl;
+ return n;
+// return new node_type(e);
+
+ }
+
+ void dispose_node(node_pointer_type n) {
+ n->~node_type();
+ super_type::deallocate_node(n);
+ }
+
+
+ // forwards construction
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {
+ for (numeric_type i = lower_bound(); i<upper_bound(); ++i) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), i);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ }
+ }
+ ~type() {
+ clear();
+ }
+ // accesors
+ numeric_type& upper_bound() {return super_type::header().upper_bound();}
+ numeric_type upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type lower_bound() const {return super_type::header().lower_bound();}
+ numeric_type get_upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type error() const {
+ return std::numeric_limits<numeric_type>::has_infinity
+ ? std::numeric_limits<numeric_type>::infinity()
+ : boost::math::tools::max_value<numeric_type>();
+ }
+
+ bool on_overflow() const {
+ return (set().empty());
+ }
+
+ numeric_type make() {
+ typename set_type::iterator head = set().begin();
+ numeric_type res = head->val_;
+ set().erase_and_dispose(head, disposer<final_type>(super_type::final()));
+ return res;
+ }
+
+ void release(numeric_type n) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), n);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ if (!res.second) {
+ throw already_used();
+ } else {
+ super_type::final().dispose_node(ptr);
+ }
+ }
+
+ void clear() {
+ set().clear_and_dispose(disposer<final_type>(super_type::final()));
+// super_type::clear();
+ }
+
+ numeric_type set_upper_bound(numeric_type upper) {
+ if (upper > upper_bound()) {
+ for (numeric_type i = upper_bound(); i<upper; ++i) {
+ node_pointer_type ptr = backdoor::make_node<node_pointer_type>(
+ super_type::final(), i);
+ std::pair< typename set_type::iterator, bool > res = set().insert(*ptr);
+ }
+ upper_bound()=upper;
+ }
+ return upper_bound();
+
+ }
+
+ numeric_type count() const {
+ return set().size();
+ }
+ };
+};
+
+}
+}
+}
+#endif // BOOST_LUID_ICCL_FIFO_HPP_

Added: sandbox/luid/boost/luid/iccl/static_lower_bound.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/static_lower_bound.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,72 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_STATIC_LOWER_BOUND_HPP_
+#define BOOST_LUID_ICCL_STATIC_LOWER_BOUND_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/math/policies/error_handling.hpp>
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+
+#ifndef BOOST_LUID_ICCL_LOW
+#define BOOST_LUID_ICCL_LOW
+BOOST_PARAMETER_NAME(low)
+#endif
+
+namespace boost { namespace luid {
+
+namespace iccl
+{
+
+template <typename LowerLayer>
+struct static_lower_bound
+{
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ typedef typename lower_layer::node_type node_type;
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo)
+ : super_type(args, allo)
+ {
+ }
+
+ // accesors
+ numeric_type lower_bound() const {return config::lower_bound;}
+
+ };
+
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ // forward construction to super type
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ // accesors
+ numeric_type lower_bound() const {return config::lower_bound;}
+ };
+};
+
+} } }
+
+
+
+#endif // BOOST_LUID_ICCL_STATIC_LOWER_BOUND_HPP_

Added: sandbox/luid/boost/luid/iccl/storage.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/storage.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,184 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_STORAGE_HPP_
+#define BOOST_LUID_STORAGE_HPP_
+
+#include "boost/pointee.hpp"
+#include <boost/detail/allocator_utilities.hpp>
+#include "boost/interprocess/managed_shared_memory.hpp"
+#include "boost/interprocess/allocators/allocator.hpp"
+#include "boost/mpl/void.hpp"
+#include "boost/parameter.hpp"
+#include <boost/utility/base_from_member.hpp>
+
+BOOST_PARAMETER_NAME(shm_size) // Note: no semicolon
+BOOST_PARAMETER_NAME(shm_name) // Note: no semicolon
+
+namespace boost
+{
+namespace luid
+{
+namespace iccl
+{
+
+template <typename Inner>
+struct shm_storage {
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::allocator_type allocator_type;
+ typedef typename config::header_type header_type;
+//TODO typedef typename allocator_type::segment_manager segment_manager_type;
+ typedef interprocess::managed_shared_memory segment_manager_type;
+
+ // forwards construction
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ , shm_size_(args[_shm_size|1000])
+ , shm_name_(args[_shm_name|"aa"])
+ , segment_(interprocess::open_or_create, shm_name_, shm_size_)
+ , allocator_(segment_.get_segment_manager())
+ , header_(segment_.construct<header_type>("header")(args, allocator_))
+ //TODO , header_(segment_.construct<Header>(interprocess::anonymous_instance)(args))
+ {}
+
+ ~type() {
+ // if the lifetime is process
+ segment_.destroy<header_type>("header");
+ //TODO segment_.destroy<header_type>(header_);
+ interprocess::shared_memory_object::remove(shm_name_);
+ }
+ header_type& header() {
+ return *header_;
+ }
+ const header_type& header() const {
+ return *header_;
+ }
+
+ // allocator functions
+ allocator_type& allocator() {
+ return allocator_;
+ }
+
+
+// private:
+ const unsigned int shm_size_;
+ const char *shm_name_;
+
+ segment_manager_type segment_;
+ allocator_type allocator_;
+ header_type* header_;
+ };
+};
+template <typename Inner>
+struct raw_storage {
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::allocator_type allocator_type;
+ typedef typename config::header_type header_type;
+
+ // forwards construction
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ , allocator_()
+ , header_(new header_type(args, allocator_))
+ {}
+
+ ~type() {
+ delete header_;
+ }
+
+ header_type& header() {
+ return *header_;
+ }
+ const header_type& header() const {
+ return *header_;
+ }
+
+ // allocator functions
+ allocator_type& allocator() {
+ return allocator_;
+ }
+
+// private:
+ allocator_type allocator_;
+ header_type* header_;
+ };
+};
+template <typename Inner>
+struct storage {
+ typedef Inner inner_type;
+ typedef typename inner_type::config config;
+ typedef typename inner_type::node_type node_type;
+ typedef typename inner_type::header_type header_type;
+ struct type : inner_type::type
+ {
+ typedef typename inner_type::type super_type;
+ typedef typename config::allocator_type allocator_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::node_pointer_type node_pointer_type;
+ typedef typename config::node_type node_type;
+ typedef typename config::allocator_type allocator_type;
+ typedef typename config::header_type header_type;
+
+
+ // constructor
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args) {}
+
+ template <typename TPTR>
+ TPTR allocate() {
+ typedef typename boost::pointee<TPTR>::type T;
+ typedef typename boost::detail::allocator::rebind_to<
+ allocator_type,T>::type allocator_type;
+ allocator_type allo(super_type::allocator());
+ return allo.allocate(1);
+ }
+
+ template <typename TPTR>
+ void deallocate(TPTR t) {
+ typedef typename boost::pointee<TPTR>::type T;
+ typedef typename boost::detail::allocator::rebind_to<
+ allocator_type, T>::type allocator_type;
+ typedef typename allocator_type::pointer node_pointer;
+ allocator_type allo(super_type::allocator());
+ allo.deallocate(static_cast<node_pointer>(t), 1);
+ }
+
+ void deallocate_node(node_pointer_type n) {
+ deallocate<node_pointer_type>(n);
+ }
+
+ node_pointer_type allocate_node() {
+ return allocate<node_pointer_type>();
+ }
+
+ };
+};
+
+
+
+} // iccl
+} // luid
+} // boost
+#endif // BOOST_LUID_STORAGE_HPP_

Added: sandbox/luid/boost/luid/iccl/thread_locking_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/thread_locking_traits.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,54 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_THREAD_LOCKING_TRAITS_HPP_
+#define BOOST_LUID_ICCL_THREAD_LOCKING_TRAITS_HPP_
+
+#include "boost/thread/mutex.hpp"
+#include "boost/thread/locks.hpp"
+#include "boost/interprocess/sync/interprocess_mutex.hpp"
+#include "boost/interprocess/sync/scoped_lock.hpp"
+
+namespace boost {
+namespace luid {
+namespace iccl {
+
+namespace detail {
+struct null_tag{
+ template <typename T> null_tag(T&) {}
+};
+
+}
+struct null_locking_traits {
+ typedef detail::null_tag mutex_type;
+ typedef detail::null_tag scoped_lock;
+ static const int try_to_lock() {return 0;}
+};
+
+
+struct thread_locking_traits {
+ typedef boost::mutex mutex_type;
+ typedef boost::mutex::scoped_lock scoped_lock;
+ static const boost::try_to_lock_t try_to_lock() {return boost::try_to_lock;}
+};
+
+struct process_locking_traits {
+ typedef boost::interprocess::interprocess_mutex mutex_type;
+ typedef boost::interprocess::scoped_lock<mutex_type> scoped_lock;
+ static boost::interprocess::try_to_lock_type try_to_lock()
+ {
+ return boost::interprocess::try_to_lock;
+ }
+};
+
+
+
+}
+}
+}
+#endif // BOOST_LUID_THREAD_LOCKING_TRAITS_HPP_

Added: sandbox/luid/boost/luid/iccl/timestamped.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/timestamped.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,37 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_TIMESTAMPED_HPP_
+#define BOOST_LUID_TIMESTAMPED_HPP_
+
+namespace boost { namespace luid { namespace iccl {
+
+template <typename time_traits, typename super_element_type>
+class timestamped : public super_element_type {
+public:
+ typedef typename time_traits::time_type time_type;
+ typedef typename time_traits::duration_type duration_type;
+ timestamped(const duration_type delay,
+ const typename super_element_type::numeric_type e)
+ : super_element_type(e)
+ , dead_on_(time_traits::now()+delay)
+ {
+ }
+
+ bool alive() const {
+// std::cout << "now=" << time_traits::now() << " dead_on=" << dead_on_ << std::endl;
+ return time_traits::now() < dead_on_;
+ }
+ time_type dead_on() const {
+ return dead_on_;
+ }
+private:
+ const time_type dead_on_;
+};
+} } }
+#endif /*BOOST_LUID_TIMESTAMPED_HPP_*/

Added: sandbox/luid/boost/luid/iccl/upper_bound.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/iccl/upper_bound.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,88 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#ifndef BOOST_LUID_ICCL_UPPER_BOUND_HPP_
+#define BOOST_LUID_ICCL_UPPER_BOUND_HPP_
+
+#include "boost/integer_traits.hpp"
+#include <boost/math/policies/error_handling.hpp>
+#include "boost/mpl/push_front.hpp"
+#include "boost/parameter.hpp"
+
+#ifndef BOOST_LUID_ICCL_HIGH
+#define BOOST_LUID_ICCL_HIGH
+
+BOOST_PARAMETER_NAME(high)
+
+#endif
+
+namespace boost { namespace luid {
+
+namespace iccl
+{
+
+
+template <typename LowerLayer>
+struct upper_bound
+{
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ typedef typename lower_layer::node_type node_type;
+
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ typedef typename config::numeric_type numeric_type;
+ typedef typename config::allocator_type allocator_type;
+
+
+ template <typename ArgsParam>
+ header_type(const ArgsParam& args, const allocator_type& allo)
+ : super_type(args, allo)
+ , upper_bound_(args[_high|boost::integer_traits<numeric_type>::const_max])
+ {
+ }
+
+ numeric_type upper_bound_;
+ // accesors
+ numeric_type& upper_bound() {return upper_bound_;}
+ numeric_type upper_bound() const {return upper_bound_;}
+
+ };
+
+ struct type : lower_layer::type
+ {
+ typedef typename lower_layer::type super_type;
+ typedef typename config::numeric_type numeric_type;
+
+ // forward construction to super type
+ template <typename ArgsParam>
+ type(const ArgsParam& args)
+ : super_type(args)
+ {
+ }
+
+ // accesors
+ numeric_type& upper_bound() {return super_type::header().upper_bound();}
+ numeric_type upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type get_upper_bound() const {return super_type::header().upper_bound();}
+ numeric_type error() const {
+ return std::numeric_limits<numeric_type>::has_infinity
+ ? std::numeric_limits<numeric_type>::infinity()
+ : boost::math::tools::max_value<numeric_type>();
+ }
+
+
+ };
+};
+
+} } }
+
+
+
+#endif // BOOST_LUID_ICCL_UPPER_BOUND_HPP_

Added: sandbox/luid/boost/luid/todo.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/boost/luid/todo.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,60 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+ #ifndef TODO_HPP_
+#define TODO_HPP_
+/// Test
+/// DONE test fifo
+/// DONE test resize
+/// DONE do not compile access to facade functions with external polymorphism
+/// DONE test or_seq
+/// DONE test and_seq
+/// DONE test the multi_process internal locking
+/// DONE test the multi_thread internal locking with the process_locking_traits
+/// TODO do not compile access to protected functions
+/// TODO test static/dynamic bounds
+/// TODO test standalone include files
+/// TODO test freeze
+/// TODO test multithreaded scope
+/// TODO test kernel lifetime
+/// TODO test filesystem lifetime
+/// TODO add load tests
+
+/// Code
+/// DONE add inheritance
+/// DONE replace luidg with dsl::expr
+/// DONE rename check, no_check
+/// DONE add licence in c++ files
+/// TODO add static/dynamic bounds
+/// TODO manage with lower_bound != 0
+/// TODO manage with MACROS ARITY
+/// TODO armonize with the math error handling
+/// TODO adapt rec freeze
+/// TODO add reentrant
+/// TODO user_error on overflow
+/// TODO user_provided
+/// TODO file system storage
+/// TODO add concepts
+/// TODO define dsl::expr using variadic templates
+/// DONE replace preprocesor macros the variadic part of dsl::expr
+
+/// Problems
+/// TODO dsl::matches
+/// TODO solve the inheritance constructor problem with several parameters
+
+/// Examples
+/// TODO example vector
+/// TODO example user on_overflow resize using the reentrant layer
+
+/// Doc
+/// TODO add static/dynamic bounds
+/// TODO explain backdoor
+/// TODO explain reentrant
+/// TODO explain facade
+
+#endif /*TODO_HPP_*/

Added: sandbox/luid/doc/html/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/luid/doc/html/boostbook.css 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,538 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+/*=============================================================================
+ Body defaults
+=============================================================================*/
+
+ body
+ {
+ margin: 1em;
+ font-family: sans-serif;
+ }
+
+/*=============================================================================
+ Paragraphs
+=============================================================================*/
+
+ p
+ {
+ text-align: left;
+ font-size: 10pt;
+ line-height: 1.15;
+ }
+
+/*=============================================================================
+ Program listings
+=============================================================================*/
+
+ /* Code on paragraphs */
+ p tt.computeroutput
+ {
+ font-size: 10pt;
+ }
+
+ pre.synopsis
+ {
+ font-size: 10pt;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ .programlisting,
+ .screen
+ {
+ font-size: 10pt;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+/*=============================================================================
+ Headings
+=============================================================================*/
+
+ h1, h2, h3, h4, h5, h6
+ {
+ text-align: left;
+ margin: 1em 0em 0.5em 0em;
+ font-weight: bold;
+ }
+
+ h1 { font: 140% }
+ h2 { font: bold 140% }
+ h3 { font: bold 130% }
+ h4 { font: bold 120% }
+ h5 { font: italic 110% }
+ h6 { font: italic 100% }
+
+ /* Top page titles */
+ title,
+ h1.title,
+ h2.title
+ h3.title,
+ h4.title,
+ h5.title,
+ h6.title,
+ .refentrytitle
+ {
+ font-weight: bold;
+ margin-bottom: 1pc;
+ }
+
+ h1.title { font-size: 140% }
+ h2.title { font-size: 140% }
+ h3.title { font-size: 130% }
+ h4.title { font-size: 120% }
+ h5.title { font-size: 110% }
+ h6.title { font-size: 100% }
+
+ .section h1
+ {
+ margin: 0em 0em 0.5em 0em;
+ font-size: 140%;
+ }
+
+ .section h2 { font-size: 140% }
+ .section h3 { font-size: 130% }
+ .section h4 { font-size: 120% }
+ .section h5 { font-size: 110% }
+ .section h6 { font-size: 100% }
+
+ /* Code on titles */
+ h1 tt.computeroutput { font-size: 140% }
+ h2 tt.computeroutput { font-size: 140% }
+ h3 tt.computeroutput { font-size: 130% }
+ h4 tt.computeroutput { font-size: 120% }
+ h5 tt.computeroutput { font-size: 110% }
+ h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+ Author
+=============================================================================*/
+
+ h3.author
+ {
+ font-size: 100%
+ }
+
+/*=============================================================================
+ Lists
+=============================================================================*/
+
+ li
+ {
+ font-size: 10pt;
+ line-height: 1.3;
+ }
+
+ /* Unordered lists */
+ ul
+ {
+ text-align: left;
+ }
+
+ /* Ordered lists */
+ ol
+ {
+ text-align: left;
+ }
+
+/*=============================================================================
+ Links
+=============================================================================*/
+
+ a
+ {
+ text-decoration: none; /* no underline */
+ }
+
+ a:hover
+ {
+ text-decoration: underline;
+ }
+
+/*=============================================================================
+ Spirit style navigation
+=============================================================================*/
+
+ .spirit-nav
+ {
+ text-align: right;
+ }
+
+ .spirit-nav a
+ {
+ color: white;
+ padding-left: 0.5em;
+ }
+
+ .spirit-nav img
+ {
+ border-width: 0px;
+ }
+
+/*=============================================================================
+ Table of contents
+=============================================================================*/
+
+ .toc
+ {
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.1pc 1pc 0.1pc 1pc;
+ font-size: 10pt;
+ line-height: 1.15;
+ }
+
+ .toc-main
+ {
+ width: 600;
+ text-align: center;
+ margin: 1pc 1pc 1pc 10%;
+ padding: 2pc 1pc 3pc 1pc;
+ line-height: 0.1;
+ }
+
+ .boost-toc
+ {
+ float: right;
+ padding: 0.5pc;
+ }
+
+/*=============================================================================
+ Tables
+=============================================================================*/
+
+ .table-title,
+ div.table p.title
+ {
+ margin-left: 4%;
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ width: 92%;
+ margin-left: 4%;
+ margin-right: 4%;
+ }
+
+ div.informaltable table,
+ div.table table
+ {
+ padding: 4px;
+ }
+
+ /* Table Cells */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ padding: 0.5em;
+ text-align: left;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ border: 1pt solid white;
+ font-size: 120%;
+ }
+
+/*=============================================================================
+ Blurbs
+=============================================================================*/
+
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ font-size: 10pt;
+ line-height: 1.2;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ p.blurb img
+ {
+ padding: 1pt;
+ }
+
+/*=============================================================================
+ Variable Lists
+=============================================================================*/
+
+ span.term
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td
+ {
+ text-align: left;
+ vertical-align: top;
+ padding: 0em 2em 0em 0em;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td p
+ {
+ margin: 0em 0em 0.5em 0em;
+ }
+
+ /* Make the terms in definition lists bold */
+ div.variablelist dl dt
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist dl dd
+ {
+ margin: 1em 0em 1em 2em;
+ font-size: 10pt;
+ }
+
+/*=============================================================================
+ Misc
+=============================================================================*/
+
+ /* Title of books and articles in bibliographies */
+ span.title
+ {
+ font-style: italic;
+ }
+
+ span.underline
+ {
+ text-decoration: underline;
+ }
+
+ span.strikethrough
+ {
+ text-decoration: line-through;
+ }
+
+ /* Copyright, Legal Notice */
+ div div.legalnotice p
+ {
+ font-size: 8pt;
+ text-align: left
+ }
+
+/*=============================================================================
+ Colors
+=============================================================================*/
+
+ @media screen
+ {
+ /* Links */
+ a
+ {
+ color: #0C7445;
+ }
+
+ a:visited
+ {
+ color: #663974;
+ }
+
+ h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+ h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+ h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+ {
+ text-decoration: none; /* no underline */
+ color: #000000;
+ }
+
+ /* Syntax Highlighting */
+ .keyword { color: #0000AA; }
+ .identifier { color: #000000; }
+ .special { color: #707070; }
+ .preprocessor { color: #402080; }
+ .char { color: teal; }
+ .comment { color: #800000; }
+ .string { color: teal; }
+ .number { color: teal; }
+ .white_bkd { background-color: #E8FBE9; }
+ .dk_grey_bkd { background-color: #A0DAAC; }
+
+ /* Copyright, Legal Notice */
+ .copyright
+ {
+ color: #666666;
+ font-size: small;
+ }
+
+ div div.legalnotice p
+ {
+ color: #666666;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Blurbs */
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc-main
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ background-color: #E3F9E4;
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ color: #00A000;
+ }
+ }
+
+ @media print
+ {
+ /* Links */
+ a
+ {
+ color: black;
+ }
+
+ a:visited
+ {
+ color: black;
+ }
+
+ .spirit-nav
+ {
+ display: none;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid gray;
+ background-color: #FAFFFB;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid gray;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc-main
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ border-collapse: collapse;
+ background-color: #FAFFFB;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ font-weight: bold;
+ }
+ }

Added: sandbox/luid/doc/html/images/alert.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/blank.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/1.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/10.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/11.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/12.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/13.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/14.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/15.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/2.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/3.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/4.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/5.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/6.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/7.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/8.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/callouts/9.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/caution.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/draft.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/home.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/important.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/next.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/next_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/note.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/prev.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/prev_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/smiley.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/tip.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/toc-blank.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/toc-minus.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/toc-plus.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/up.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/up_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/images/warning.png
==============================================================================
Binary file. No diff available.

Added: sandbox/luid/doc/html/reference.css
==============================================================================
--- (empty file)
+++ sandbox/luid/doc/html/reference.css 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,13 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+PRE.synopsis {
+ background-color: #e0ffff;
+ border: thin solid blue;
+ padding: 1em
+}

Added: sandbox/luid/libs/luid/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/Jamfile.v2 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,72 @@
+# Boost.LUID library documentation Jamfile ---------------------------------
+#
+# Copyright Vicente Botet 2008. Use, modification and
+# distribution is subject to the Boost Software License, Version
+# 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+# See http://www.boost.org for updates, documentation, and revision history.
+
+#import doxygen ;
+import quickbook ;
+
+#doxygen autodoc
+# :
+# [ glob ../../../boost/interprocess/*.hpp ]
+# [ glob ../../../boost/interprocess/allocators/*.hpp ]
+# :
+# <doxygen:param>EXTRACT_ALL=NO
+# <doxygen:param>HIDE_UNDOC_MEMBERS=YES
+# <doxygen:param>EXTRACT_PRIVATE=NO
+# <doxygen:param>EXPAND_ONLY_PREDEF=YES
+# <doxygen:param>PREDEFINED=BOOST_INTERPROCESS_DOXYGEN_INVOKED
+# <xsl:param>"boost.doxygen.reftitle=Boost.Interprocess Reference"
+# ;
+
+xml luid : luid.qbk ;
+
+boostbook standalone
+ :
+ luid
+ :
+ # HTML options first:
+ # Use graphics not text for navigation:
+ <xsl:param>navig.graphics=1
+ # How far down we chunk nested sections, basically all of them:
+ <xsl:param>chunk.section.depth=2
+ # Don't put the first section on the same page as the TOC:
+ <xsl:param>chunk.first.sections=1
+ # How far down sections get TOC's
+ <xsl:param>toc.section.depth=4
+ # Max depth in each TOC:
+ <xsl:param>toc.max.depth=2
+ # How far down we go with TOC's
+ <xsl:param>generate.section.toc.level=10
+ # Path for links to Boost:
+ <xsl:param>boost.root=../../../..
+ # Path for libraries index:
+ <xsl:param>boost.libraries=../../../../libs/libraries.htm
+ # Use the main Boost stylesheet:
+ <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css
+
+ # PDF Options:
+ # TOC Generation: this is needed for FOP-0.9 and later:
+ #<xsl:param>fop1.extensions=1
+ # Or enable this if you're using XEP:
+ <xsl:param>xep.extensions=1
+ # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+ <xsl:param>fop.extensions=0
+ # No indent on body text:
+ <xsl:param>body.start.indent=0pt
+ # Margin size:
+ <xsl:param>page.margin.inner=0.5in
+ # Margin size:
+ <xsl:param>page.margin.outer=0.5in
+ # Yes, we want graphics for admonishments:
+ <xsl:param>admon.graphics=1
+ # Set this one for PDF generation *only*:
+ # default pnd graphics are awful in PDF form,
+ # better use SVG's instead:
+ <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+ <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
+ ;

Added: sandbox/luid/libs/luid/doc/acknowledgements.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/acknowledgements.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,13 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:acknowledgements Appendix D: Acknowledgements]
+
+I'd like to Joaquin M. Lopez Munoz for showing me with its Flyweight library
+how to use the Parameter Library.
+
+[endsect]

Added: sandbox/luid/libs/luid/doc/history.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/history.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,18 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:history Appendix A: History]
+
+[variablelist
+[
+ [June 28, 2008]
+ [LUID annoncement.
+ ]
+]
+]
+
+[endsect]

Added: sandbox/luid/libs/luid/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/index.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,94 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Chapter 1. Toward Boost.LUID</title>
+<link rel="stylesheet" href="../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="next" href="toward_boost_luid/intro.html" title="Introduction">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_luid/intro.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+<div class="chapter" lang="en">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="toward_boost_luid"></a>Chapter 1. Toward Boost.LUID</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Vicente J.</span> <span class="surname">Botet Escriba</span>
+</h3></div></div>
+<div><p class="copyright">Copyright © 2008 -2009 Vicente J. Botet Escriba</p></div>
+<div><div class="legalnotice">
+<a name="id4810708"></a><p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section"> Introduction</span></dt>
+<dt><span class="section"> Installing LUID</span></dt>
+<dt><span class="section"> Functional Model</span></dt>
+<dt><span class="section"> Feature Model</span></dt>
+<dt><span class="section"> Domain Specific Language</span></dt>
+<dd><dl>
+<dt><span class="section">DSL features</span></dt>
+<dt><span class="section"> Default Values</span></dt>
+</dl></dd>
+<dt><span class="section"><a href="toward_boost_luid/iccl.html"> Implementation Component Configuration
+ Language</a></span></dt>
+<dt><span class="section"> Generator</span></dt>
+<dd><dl>
+<dt><span class="section"> DSL Parser</span></dt>
+<dt><span class="section"><a href="toward_boost_luid/generator/generator_assign_default.html">
+ Assign default values</a></span></dt>
+<dt><span class="section"><a href="toward_boost_luid/generator/generator_assemble_components.html">
+ Assemble components</a></span></dt>
+</dl></dd>
+<dt><span class="section"> Reference</span></dt>
+<dd><dl>
+<dt><span class="section"> Macros</span></dt>
+<dt><span class="section"> Types</span></dt>
+</dl></dd>
+<dt><span class="section">Appendices</span></dt>
+<dd><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dt><span class="section"><a href="toward_boost_luid/appendices/rationale.html"> Appendix B:
+ Rationale</a></span></dt>
+<dt><span class="section"><a href="toward_boost_luid/appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="toward_boost_luid/appendices/acknowledgements.html"> Appendix
+ D: Acknowledgements</a></span></dt>
+<dt><span class="section"><a href="toward_boost_luid/appendices/ext_references.html"> Appendix
+ E: References</a></span></dt>
+</dl></dd>
+</dl>
+</div>
+<div class="warning"><table border="0" summary="Warning">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../doc/html/images/warning.png"></td>
+<th align="left">Warning</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ LUID is not a part of the Boost libraries.
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: June 28, 2009 at 13:57:59 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_luid/intro.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,70 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendices</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="reference/reference_types.html" title="Types">
+<link rel="next" href="appendices/history.html" title="Appendix A: History">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/reference_types.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/history.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.appendices"></a><a class="link" href="appendices.html" title="Appendices">Appendices</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dt><span class="section"><a href="appendices/rationale.html"> Appendix B:
+ Rationale</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_luid.appendices.rationale.parameter_expression">
+ Parameters expressions</a></span></dt>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_luid.appendices.rationale.genvoca"> Genvoca
+ grammars</a></span></dt>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_luid.appendices.rationale.generator_">
+ Gennerator</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/implementation.html#toward_boost_luid.appendices.implementation.sfinae">
+ </a></span></dt>
+<dt><span class="section"><a href="appendices/implementation.html#toward_boost_luid.appendices.implementation.function_arity">
+ </a></span></dt>
+<dt><span class="section"><a href="appendices/implementation.html#toward_boost_luid.appendices.implementation.ppmp_vs_tmp">
+ </a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="appendices/acknowledgements.html"> Appendix
+ D: Acknowledgements</a></span></dt>
+<dt><span class="section"><a href="appendices/ext_references.html"> Appendix
+ E: References</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/reference_types.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/history.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/acknowledgements.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/acknowledgements.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix D: Acknowledgements</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="implementation.html" title="Appendix C: Implementation Notes">
+<link rel="next" href="ext_references.html" title="Appendix E: References">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ext_references.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.appendices.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Appendix D: Acknowledgements"> Appendix
+ D: Acknowledgements</a>
+</h3></div></div></div>
+<p>
+ I'd like to Joaquin M. Lopez Munoz for showing me with its Flyweight library
+ how to use the Parameter Library.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ext_references.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/ext_references.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/ext_references.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,53 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix E: References</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="acknowledgements.html" title="Appendix D: Acknowledgements">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.appendices.ext_references"></a><a class="link" href="ext_references.html" title="Appendix E: References"> Appendix
+ E: References</a>
+</h3></div></div></div>
+<div class="variablelist">
+<p class="title"><b>References</b></p>
+<dl>
+<dt><span class="term">Generative Programming: Methods,
+ Tools, and Applications</span></dt>
+<dd><p>
+ K. Czarnecki, U.W. Eisenecker.
+ </p></dd>
+</dl>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/history.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/history.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix A: History</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="../appendices.html" title="Appendices">
+<link rel="next" href="rationale.html" title="Appendix B: Rationale">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.appendices.history"></a><a class="link" href="history.html" title="Appendix A: History"> Appendix A: History</a>
+</h3></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">June 28, 2008</span></dt>
+<dd><p>
+ LUID annoncement.
+ </p></dd>
+</dl>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/implementation.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/implementation.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,69 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix C: Implementation Notes</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="rationale.html" title="Appendix B: Rationale">
+<link rel="next" href="acknowledgements.html" title="Appendix D: Acknowledgements">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.appendices.implementation"></a><a class="link" href="implementation.html" title="Appendix C: Implementation Notes"> Appendix
+ C: Implementation Notes</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="implementation.html#toward_boost_luid.appendices.implementation.sfinae">
+ </a></span></dt>
+<dt><span class="section"><a href="implementation.html#toward_boost_luid.appendices.implementation.function_arity">
+ </a></span></dt>
+<dt><span class="section"><a href="implementation.html#toward_boost_luid.appendices.implementation.ppmp_vs_tmp">
+ </a></span></dt>
+</dl></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.implementation.sfinae"></a><a class="link" href="implementation.html#toward_boost_luid.appendices.implementation.sfinae">
+ </a>
+</h4></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.implementation.function_arity"></a><a class="link" href="implementation.html#toward_boost_luid.appendices.implementation.function_arity">
+ </a>
+</h4></div></div></div></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.implementation.ppmp_vs_tmp"></a><a class="link" href="implementation.html#toward_boost_luid.appendices.implementation.ppmp_vs_tmp">
+ </a>
+</h4></div></div></div>
+<p>
+ TODO
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/rationale.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/appendices/rationale.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix B: Rationale</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="history.html" title="Appendix A: History">
+<link rel="next" href="implementation.html" title="Appendix C: Implementation Notes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="history.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.appendices.rationale"></a><a class="link" href="rationale.html" title="Appendix B: Rationale"> Appendix B:
+ Rationale</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="rationale.html#toward_boost_luid.appendices.rationale.parameter_expression">
+ Parameters expressions</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_luid.appendices.rationale.genvoca"> Genvoca
+ grammars</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_luid.appendices.rationale.generator_">
+ Gennerator</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.rationale.parameter_expression"></a><a class="link" href="rationale.html#toward_boost_luid.appendices.rationale.parameter_expression" title="Parameters expressions">
+ Parameters expressions</a>
+</h4></div></div></div>
+<p>
+ TODO
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.rationale.genvoca"></a><a class="link" href="rationale.html#toward_boost_luid.appendices.rationale.genvoca" title="Genvoca grammars"> Genvoca
+ grammars</a>
+</h4></div></div></div>
+<p>
+ TODO
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.appendices.rationale.generator_"></a><a class="link" href="rationale.html#toward_boost_luid.appendices.rationale.generator_" title="Gennerator">
+ Gennerator</a>
+</h4></div></div></div>
+<p>
+ TODO
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="history.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,210 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Domain Specific Language</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="fearure_model.html" title="Feature Model">
+<link rel="next" href="dsl/dsl_features.html" title="DSL features">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="fearure_model.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dsl/dsl_features.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.dsl"></a><a class="link" href="dsl.html" title="Domain Specific Language"> Domain Specific Language</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">DSL features</span></dt>
+<dt><span class="section"> Default Values</span></dt>
+</dl></div>
+<a name="toward_boost_luid.dsl.which_features_must_be_in_the_dsl_"></a><h4>
+<a name="id4805062"></a>
+ <a class="link" href="dsl.html#toward_boost_luid.dsl.which_features_must_be_in_the_dsl_">Which
+ features must be in the DSL?</a>
+ </h4>
+<div class="itemizedlist"><ul type="disc"><li>
+ Should the lower, upper bound be static or given at construction time?
+ </li></ul></div>
+<p>
+ I think that these values must be given at construction time.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Should the low value be 0?
+ </li></ul></div>
+<p>
+ This seams not really a constraint.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Can the upper bound be changed? And how?
+ </li></ul></div>
+<p>
+ The upper bound could be changed following some constraints.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Should the duration be static, given at construction time or when releasing
+ the uid?
+ </li></ul></div>
+<p>
+ I think that this must be given at construction time. This simplify the algorithm
+ and make uniform the release function interface.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Configurability versus extendability
+ </li></ul></div>
+<p>
+ In order to manage with all this variations this library propose the use of
+ a luidg generator with a high configurablity degree using a domain specific
+ language (DSL). The DSL expressions are transformed to a Genvoca stack of Implementation
+ Components Configuration Language(ICCL) by the generator.
+ </p>
+<p>
+ Each implementation component (IC) is a mixin and all of them have the same
+ form
+ </p>
+<p>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Inner</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">IC</span> <span class="special">:</span> <span class="keyword">public</span><span class="special">/</span><span class="keyword">protected</span><span class="special">/</span><span class="keyword">private</span> <span class="identifier">Inner</span> <span class="special">{</span>
+ <span class="special">...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ This DSL can not be extended without modifying the library. In order to make
+ extensions we need to modify how these implementation components are arranged.
+ An Extending DSL language could be provided to this concern. The language could
+ consider replacing an IC by a user IC, removing an IC or inserting over a IC
+ a user IC. This has as consequence that the implementation components must
+ be models of specific concepts. Another possibility is to let the user extend
+ the DSL, and provide an other generator. In any case the IC must be provided
+ and the concept behind this IC must be described explicitly.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Do we need to use Boost.Parameters for the template parameters?
+ </li></ul></div>
+<p>
+ As the number of parameters is quite big the parameter should be given by name.
+ The use of the Boost.Parameter seams to help to achieve that. I'm wondering
+ if the ParametersExpresion library could be defined as well. This could make
+ easier the parser, and the transformation for default values.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Do we need to use Boost.Parameters for the constructor parameters or a technique
+ similar to the one used on Boost.MultiIndex?
+ </li></ul></div>
+<p>
+ As the number of constructor parameters is variable I think that the Boost.Parameters
+ is more adapted.
+ </p>
+<a name="toward_boost_luid.dsl.dsl_grammar"></a><h4>
+<a name="id4805294"></a>
+ <a class="link" href="dsl.html#toward_boost_luid.dsl.dsl_grammar">DSL Grammar</a>
+ </h4>
+<pre class="programlisting">luidg(
+ numeric_type(uint_type) ?
+&amp; on_overflow(
+ throw_on_error
+ | errno_on_error
+ | ignore_error
+ | user_error(user_function)
+ | on_overflow_layer(layer)
+ ) ?
+&amp; on_release(
+ discard
+ | recover(
+ recover_when?
+ &amp; recover_how?
+ )
+ | on_release_layer(layer)
+ ) ?
+&amp; scope(
+ mono_threaded
+ | multi_threaded(locking? )
+ | multi_process(locking? )
+ | locking_layer(locking? &amp; layer)
+ ) ?
+&amp; lifetime/persistecy(
+ process(
+ void_pointer_type?
+ &amp; allocator_type?
+ )
+ | kernel(
+ void_pointer_type?
+ &amp; allocator_type?
+ )
+ | filesystem(
+ void_pointer_type?
+ &amp; allocator_type?
+ )
+ | storage_layer(void_pointer_type? &amp; allocator_type? &amp; layer)
+ ) ?
+&amp; count_complexity (
+ contant_time
+ | linear_time
+ ) ?
+&amp; optimization (
+ speed
+ | space
+ ) ?
+&amp; coherency (
+ ensure
+ | ignore
+ | coherency_layer(layer)
+ ) ?
+)
+
+recover_when (
+ immediate
+| freeze
+| delay(time_traits)
+)
+
+recover_how (
+ fifo
+| undefined
+)
+
+locking(
+ internally(locking_traits)
+| externally(locking_traits)
+)
+
+locking_traits (
+ thread_locking_traits
+| process_locking_traits
+| thread_recursive_locking_traits
+| process_recursive_locking_traits
+| ...
+)
+
+time_traits (
+ posix_time_traits
+| ...
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="fearure_model.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dsl/dsl_features.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/default.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/default.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,608 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Default Values</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../dsl.html" title="Domain Specific Language">
+<link rel="prev" href="dsl_features.html" title="DSL features">
+<link rel="next" href="../iccl.html" title="Implementation Component Configuration Language">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dsl_features.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dsl.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../iccl.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.dsl.default"></a><a class="link" href="default.html" title="Default Values"> Default Values</a>
+</h3></div></div></div>
+<div class="table">
+<a name="id4805460"></a><p class="title"><b>Table 1.1. luidg Default Values</b></p>
+<div class="table-contents"><table class="table" summary="luidg Default Values">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Feature
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ numeric_type
+ </p>
+ </td>
+<td>
+ <p>
+ unsigned int
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ on_overflow
+ </p>
+ </td>
+<td>
+ <p>
+ ignore_error
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ on_release
+ </p>
+ </td>
+<td>
+ <p>
+ discard
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ scope
+ </p>
+ </td>
+<td>
+ <p>
+ mono_threaded
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ lifetime
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ optimization
+ </p>
+ </td>
+<td>
+ <p>
+ speed
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ coherency
+ </p>
+ </td>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ introspection
+ </p>
+ </td>
+<td>
+ <p>
+ count
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4803768"></a><p class="title"><b>Table 1.2. luidg Incompatible Values</b></p>
+<div class="table-contents"><table class="table" summary="luidg Incompatible Values">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ scope
+ </p>
+ </th>
+<th>
+ <p>
+ lifetime
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ multi_process
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4803821"></a><p class="title"><b>Table 1.3. recover Default Values</b></p>
+<div class="table-contents"><table class="table" summary="recover Default Values">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Feature
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ when
+ </p>
+ </td>
+<td>
+ <p>
+ immediate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ how
+ </p>
+ </td>
+<td>
+ <p>
+ fifo
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4858951"></a><p class="title"><b>Table 1.4. Other Default Values</b></p>
+<div class="table-contents"><table class="table" summary="Other Default Values">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Feature
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ time_traits
+ </p>
+ </td>
+<td>
+ <p>
+ posix
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ locking
+ </p>
+ </td>
+<td>
+ <p>
+ internally
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4859020"></a><p class="title"><b>Table 1.5. Locking Derived Values</b></p>
+<div class="table-contents"><table class="table" summary="Locking Derived Values">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ scope
+ </p>
+ </th>
+<th>
+ <p>
+ lifetime
+ </p>
+ </th>
+<th>
+ <p>
+ internally_locking_traits
+ </p>
+ </th>
+<th>
+ <p>
+ externally_mutex_type
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mono_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ thread_locking_traits
+ </p>
+ </td>
+<td>
+ <p>
+ boost::mutex
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_process
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_process
+ </p>
+ </td>
+<td>
+ <p>
+ kernel_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ process_locking_traits
+ </p>
+ </td>
+<td>
+ <p>
+ bip::named_mutex
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_process
+ </p>
+ </td>
+<td>
+ <p>
+ filesystem_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ process_mutex_traits
+ </p>
+ </td>
+<td>
+ <p>
+ bip::named_mutex
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4859214"></a><p class="title"><b>Table 1.6. void_pointer_type Derived Values</b></p>
+<div class="table-contents"><table class="table" summary="void_pointer_type Derived Values">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ scope
+ </p>
+ </th>
+<th>
+ <p>
+ lifetime
+ </p>
+ </th>
+<th>
+ <p>
+ void_pointer_type
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mono_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ void*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ void*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_process
+ </p>
+ </td>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ kernel_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ bip::offset_ptr&lt;void&gt;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ filesystem_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ bip::offset_ptr&lt;void&gt;
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4859371"></a><p class="title"><b>Table 1.7. allocator_type Derived Values</b></p>
+<div class="table-contents"><table class="table" summary="allocator_type Derived Values">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ lifetime
+ </p>
+ </th>
+<th>
+ <p>
+ allocator_type
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ process_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ kernel_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ bip::allocator&lt;int, bip::managed_shared_memory::segment_manager&gt;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ filesystem_persistecy
+ </p>
+ </td>
+<td>
+ <p>
+ bip::allocator&lt;int, bip::managed_mapped_file::segment_manager&gt;
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dsl_features.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dsl.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../iccl.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/dsl_features.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/dsl/dsl_features.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,56 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>DSL features</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../dsl.html" title="Domain Specific Language">
+<link rel="prev" href="../dsl.html" title="Domain Specific Language">
+<link rel="next" href="default.html" title="Default Values">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../dsl.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dsl.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="default.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.dsl.dsl_features"></a><a class="link" href="dsl_features.html" title="DSL features">DSL features</a>
+</h3></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">allocator_type</span></dt>
+<dd><p>
+ The allocator type
+ </p></dd>
+<dt><span class="term">void_pointer_type</span></dt>
+<dd><p>
+ the void pointer type
+ </p></dd>
+</dl>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../dsl.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dsl.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="default.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/fearure_model.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/fearure_model.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,245 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Feature Model</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="functional_model.html" title="Functional Model">
+<link rel="next" href="dsl.html" title="Domain Specific Language">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="functional_model.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dsl.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.fearure_model"></a><a class="link" href="fearure_model.html" title="Feature Model"> Feature Model</a>
+</h2></div></div></div>
+<p>
+ While making an concrete implementation could be simple, making a generic one
+ add the complexity of variants configuration. Next follows the features and
+ its variants associated to the domain.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ [<span class="bold"><strong>numeric_type</strong></span>]/Mandatory: The unsigned integer
+ type of the luid to be managed
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ lower: The lower bound value, i.e. the first value
+ </li>
+<li>
+ upper: The upper bound value, i.e. the fact the generator bounds until
+ a given value
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>on_overflow</strong></span>/Mandatory: An error policy used
+ when there are no more free uid
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ throw_on_error
+ </li>
+<li>
+ errno_on_error
+ </li>
+<li>
+ ignore_error
+ </li>
+<li>
+ user_error(user_function)
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>on_release</strong></span>/Mandatory: A releasing policy
+ which control whether identifiers are discarded or recovered when they are
+ released
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ discard: the released luid are not reusable
+ </li>
+<li>
+ recover: the generator can recover identifiers that are released. This
+ has two features
+ <div class="itemizedlist"><ul type="square">
+<li>
+ when the released values become reusable
+ <div class="itemizedlist"><ul type="disc">
+<li>
+ immediate: the released luid is immediately reusable
+ </li>
+<li>
+ delay: the luid is reusable after a given a time. This needs
+ the following parameters
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ time_type: the time type
+ </li>
+<li>
+ duration_type: the duration type
+ </li>
+<li>
+ now: how to get the current time
+ </li>
+<li>
+ duration: the delay after which the luid is reusable.
+ </li>
+<li>
+ the default duration if not given explicitly
+ </li>
+</ul></div>
+</li>
+<li>
+ freeze: the luid is reusable once some minimal number of new
+ luid have been taken
+ <div class="itemizedlist"><ul type="circle"><li>
+ distance: the number of luids to be reused before the released
+ one
+ </li></ul></div>
+</li>
+</ul></div>
+</li>
+<li>
+ how the reusable values are reused
+ <div class="itemizedlist"><ul type="disc">
+<li>
+ fifo: reusable values are reused on fifo order
+ </li>
+<li>
+ undefined: no constraint is added
+ </li>
+</ul></div>
+</li>
+</ul></div>
+</li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>coherency</strong></span>/Mandatory: A coherency policy
+ checks whether the released luid is already free
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ ensure: the luid generator must ensure that the released luids are unique.
+ If already released an exception is thrown.
+ </li>
+<li>
+ ignore: the user has the responsability and the means to ensure that
+ the released luids are unique.
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>count</strong></span>/Optional: The luid generator can be
+ configured with constant or linear time count:
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ Linear time count: The luid generator doesn't hold a count member that
+ it's updated with every make/release. This implies that the size() function
+ has not constant time complexity.
+ </li>
+<li>
+ Constant time count: The luid generator holds a count member that it's
+ updated with every make/release. This implies that the count() function
+ has constant time complexity.
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>scope</strong></span>/Mandatory: the scope of the luid generator,
+ i.e. which part of the system could use the luid generator
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ mono_threaded: only one single thread access the luid generator
+ </li>
+<li>
+ multi_threaded: several threads in a single process share the luid generator.
+ This has associated a locking policy.
+ </li>
+<li>
+ multi_process: several process share the luid generator. This has associated
+ a locking policy.
+ </li>
+<li>
+<span class="bold"><strong>locking</strong></span>: A locking policy determining
+ the synchronization mechanisms for internal access to shared resources.
+ <div class="itemizedlist"><ul type="square">
+<li>
+ internally: the generator ensure that all the operations are synchronized
+ on its own.
+ </li>
+<li>
+ externally: the user needs to provide the needed synchronization.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>lifetime</strong></span>/Mandatory: The lifetime/persistency
+ of the information identified by this luids
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ process: the information is lost once the process exits or shuts down
+ </li>
+<li>
+ kernel: the information exists until the kernel of the operating system
+ reboots or the information is explicitly deleted. If a process on the
+ scope restarts it will recover the information.
+ </li>
+<li>
+ filesystem: the information exists until the mechanism is explicitly
+ deleted.
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>optimization</strong></span>/Mandatory: An optimization
+ policy which could be used as an hint for the implementation choice of the
+ other aspects.
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ speed: the used algorithms are efficient even if a lot of space is used
+ </li>
+<li>
+ space: the needed space is minimized even if this has as consequence
+ a lost of efficiency.
+ </li>
+</ul></div>
+</li>
+<li>
+<span class="bold"><strong>extendability</strong></span>:
+ </li>
+</ul></div>
+<a name="toward_boost_luid.fearure_model.which_features_are_mandatory_for_the_first_release_"></a><h4>
+<a name="id4805028"></a>
+ <a class="link" href="fearure_model.html#toward_boost_luid.fearure_model.which_features_are_mandatory_for_the_first_release_">Which
+ features are mandatory for the first release?</a>
+ </h4>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="functional_model.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dsl.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/functional_model.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/functional_model.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,75 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Functional Model</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="install.html" title="Installing LUID">
+<link rel="next" href="fearure_model.html" title="Feature Model">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="install.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="fearure_model.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.functional_model"></a><a class="link" href="functional_model.html" title="Functional Model"> Functional Model</a>
+</h2></div></div></div>
+<p>
+ The number of user functions provided by LUID generator are quite simple:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ make: make a new luid (constant time complexity)
+ </li>
+<li>
+ release: release an luid (should check that the luid is not already free)
+ (constant time complexity without coherency)
+ </li>
+<li>
+ error: the value returned when no more luids are available (constant time
+ complexity)
+ </li>
+<li>
+ set_upper_bound: sets the new upper bound (could be linear time complexity)
+ </li>
+<li>
+ get_lower_bound: get the lower bound (constant time complexity)
+ </li>
+<li>
+ get_upper_bound: get the current upper bound (constant time complexity)
+ </li>
+<li>
+ count: get the number of used luids (should be constant time complexity)
+ </li>
+<li>
+ clear: release all the used ressources and reset them as they were after
+ construction (could be linear time complexity)
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="install.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="fearure_model.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,50 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Generator</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="iccl.html" title="Implementation Component Configuration Language">
+<link rel="next" href="generator/generator_parser.html" title="DSL Parser">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="iccl.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator/generator_parser.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.generator"></a><a class="link" href="generator.html" title="Generator"> Generator</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> DSL Parser</span></dt>
+<dt><span class="section"><a href="generator/generator_assign_default.html">
+ Assign default values</a></span></dt>
+<dt><span class="section"><a href="generator/generator_assemble_components.html">
+ Assemble components</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="iccl.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator/generator_parser.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assemble_components.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assemble_components.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,715 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Assemble components</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../generator.html" title="Generator">
+<link rel="prev" href="generator_assign_default.html" title="Assign default values">
+<link rel="next" href="../reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator_assign_default.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.generator.generator_assemble_components"></a><a class="link" href="generator_assemble_components.html" title="Assemble components">
+ Assemble components</a>
+</h3></div></div></div>
+<div class="table">
+<a name="id4859865"></a><p class="title"><b>Table 1.9. Bottom</b></p>
+<div class="table-contents"><table class="table" summary="Bottom">
+<colgroup><col></colgroup>
+<thead><tr><th>
+ <p>
+ mixin
+ </p>
+ </th></tr></thead>
+<tbody><tr><td>
+ <p>
+ base[Generator]
+ </p>
+ </td></tr></tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4859906"></a><p class="title"><b>Table 1.10. Specific Storage Layer</b></p>
+<div class="table-contents"><table class="table" summary="Specific Storage Layer">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ lifetime
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ process
+ </p>
+ </td>
+<td>
+ <p>
+ raw_storage[Base]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ kernel
+ </p>
+ </td>
+<td>
+ <p>
+ shm_storage[Base]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ filesystem
+ </p>
+ </td>
+<td>
+ <p>
+ mmfile_storage[Base]
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4859992"></a><p class="title"><b>Table 1.11. Storage</b></p>
+<div class="table-contents"><table class="table" summary="Storage">
+<colgroup><col></colgroup>
+<thead><tr><th>
+ <p>
+ mixin
+ </p>
+ </th></tr></thead>
+<tbody><tr><td>
+ <p>
+ storage[SpecificStorage]
+ </p>
+ </td></tr></tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4860033"></a><p class="title"><b>Table 1.12. OnRelease Layer</b></p>
+<div class="table-contents"><table class="table" summary="OnRelease Layer">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ on_release
+ </p>
+ </th>
+<th>
+ <p>
+ when
+ </p>
+ </th>
+<th>
+ <p>
+ how
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ discard
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Counter
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ immediate
+ </p>
+ </td>
+<td>
+ <p>
+ fifo
+ </p>
+ </td>
+<td>
+ <p>
+ Fifo
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ immediate
+ </p>
+ </td>
+<td>
+ <p>
+ undefined
+ </p>
+ </td>
+<td>
+ <p>
+ set[Storage]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ delay
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ rec_fifo_delay[Fifo]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ freeze
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ rec_fifo_freeze[Fifo]
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4860224"></a><p class="title"><b>Table 1.13. Coherency Layer</b></p>
+<div class="table-contents"><table class="table" summary="Coherency Layer">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ coherency
+ </p>
+ </th>
+<th>
+ <p>
+ on_release
+ </p>
+ </th>
+<th>
+ <p>
+ when
+ </p>
+ </th>
+<th>
+ <p>
+ how
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ ignore
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ OnRelease
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+<td>
+ <p>
+ discard
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ coherency[bitset[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ immediate
+ </p>
+ </td>
+<td>
+ <p>
+ fifo
+ </p>
+ </td>
+<td>
+ <p>
+ coherency[bitset[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ immediate
+ </p>
+ </td>
+<td>
+ <p>
+ undefined
+ </p>
+ </td>
+<td>
+ <p>
+ OnRelease
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ delay
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ coherency[bitset[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ ensure
+ </p>
+ </td>
+<td>
+ <p>
+ recover
+ </p>
+ </td>
+<td>
+ <p>
+ freeze
+ </p>
+ </td>
+<td>
+ <p>
+ *
+ </p>
+ </td>
+<td>
+ <p>
+ coherency[bitset[OnRelease]
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4860486"></a><p class="title"><b>Table 1.14. OnOverflow Layer</b></p>
+<div class="table-contents"><table class="table" summary="OnOverflow Layer">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ on_overflow
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ ignore_error
+ </p>
+ </td>
+<td>
+ <p>
+ ignore_on_overflow[Coherency]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ errno_on_error
+ </p>
+ </td>
+<td>
+ <p>
+ errno_on_on_overflow[Coherency]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ throw_on_error
+ </p>
+ </td>
+<td>
+ <p>
+ throw_on_overflow[Coherency]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ user_error
+ </p>
+ </td>
+<td>
+ <p>
+ user_on_overflow[Coherency]
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4860590"></a><p class="title"><b>Table 1.15. OptIntLocking Layer</b></p>
+<div class="table-contents"><table class="table" summary="OptIntLocking Layer">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ scope
+ </p>
+ </th>
+<th>
+ <p>
+ locking
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mono_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ OnOverflow
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ internally_locked
+ </p>
+ </td>
+<td>
+ <p>
+ internally_locked[OnOverflow]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ externally_locked
+ </p>
+ </td>
+<td>
+ <p>
+ OnOverflow
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="id4860700"></a><p class="title"><b>Table 1.16. OptExtLocking Layer</b></p>
+<div class="table-contents"><table class="table" summary="OptExtLocking Layer">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ scope
+ </p>
+ </th>
+<th>
+ <p>
+ locking
+ </p>
+ </th>
+<th>
+ <p>
+ mixin
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mono_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Facade
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ internally_locked
+ </p>
+ </td>
+<td>
+ <p>
+ Facade
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multi_threaded
+ </p>
+ </td>
+<td>
+ <p>
+ externally_locked
+ </p>
+ </td>
+<td>
+ <p>
+ externally_locked[Facade]
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator_assign_default.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assign_default.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_assign_default.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,42 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Assign default values</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../generator.html" title="Generator">
+<link rel="prev" href="generator_parser.html" title="DSL Parser">
+<link rel="next" href="generator_assemble_components.html" title="Assemble components">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator_parser.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator_assemble_components.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.generator.generator_assign_default"></a><a class="link" href="generator_assign_default.html" title="Assign default values">
+ Assign default values</a>
+</h3></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator_parser.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator_assemble_components.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_parser.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/generator/generator_parser.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,41 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>DSL Parser</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../generator.html" title="Generator">
+<link rel="prev" href="../generator.html" title="Generator">
+<link rel="next" href="generator_assign_default.html" title="Assign default values">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../generator.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator_assign_default.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.generator.generator_parser"></a><a class="link" href="generator_parser.html" title="DSL Parser"> DSL Parser</a>
+</h3></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../generator.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator_assign_default.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/iccl.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/iccl.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,298 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Implementation Component Configuration Language</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="dsl/default.html" title="Default Values">
+<link rel="next" href="generator.html" title="Generator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dsl/default.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.iccl"></a><a class="link" href="iccl.html" title="Implementation Component Configuration Language"> Implementation Component Configuration
+ Language</a>
+</h2></div></div></div>
+<div class="table">
+<a name="id4859478"></a><p class="title"><b>Table 1.8. GenVoca layered architecture</b></p>
+<div class="table-contents"><table class="table" summary="GenVoca layered architecture">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Layer
+ </p>
+ </th>
+<th>
+ <p>
+ Variations
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ LUIDG
+ </p>
+ </td>
+<td>
+ <p>
+ constructor[OptExternalLocking]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ OptExternalLocking
+ </p>
+ </td>
+<td>
+ <p>
+ externally_locked[Facade] | Facade
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Facade
+ </p>
+ </td>
+<td>
+ <p>
+ facade[InternalLocking]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ InternalLocking
+ </p>
+ </td>
+<td>
+ <p>
+ internally_locked[Reentrant] | Reentrant | user_provided[Reentrant]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Reentrant
+ </p>
+ </td>
+<td>
+ <p>
+ reentrant[OnOverflow]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ OnOverflow
+ </p>
+ </td>
+<td>
+ <p>
+ ingnore_error[OnRelease] | throw_on_error[OnRelease] | errno_on_error[OnRelease]
+ | user_provided[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Coherency
+ </p>
+ </td>
+<td>
+ <p>
+ coherency[SpecificCoherency] | OnRelease | user_provided[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ SpecificCoherency
+ </p>
+ </td>
+<td>
+ <p>
+ biset[OnRelease]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ OnRelease
+ </p>
+ </td>
+<td>
+ <p>
+ discard[Counter] | rec_immediate_fifo[Fifo] | rec_delay_fifo[Fifo] |
+ rec_freeze_fifo[Fifo] | rec_immediate_undefined[Set] | user_provided[Storage]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Fifo
+ </p>
+ </td>
+<td>
+ <p>
+ queue[Counter]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set
+ </p>
+ </td>
+<td>
+ <p>
+ set_interval[Storage]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Counter
+ </p>
+ </td>
+<td>
+ <p>
+ counter[Storage]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Storage
+ </p>
+ </td>
+<td>
+ <p>
+ storage[SpecificStorage] | user_provided[Base]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ SpecificStorage
+ </p>
+ </td>
+<td>
+ <p>
+ raw[Base] | shm[Base] | mmfile[Base]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Base
+ </p>
+ </td>
+<td>
+ <p>
+ base[Config]
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Config
+ </p>
+ </td>
+<td>
+ <p>
+ numeric_type, node_type, header_type, LUIDG
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ GenVoca Grammar for the Locally Unique Identifier Generator LUIDG
+ </p>
+<pre class="programlisting">LUIDG : luidg[Facade]
+Facade : facade[Locking]
+Locking :
+ internally_locked[OnOverflow]
+ | OnOverflow
+OnOverflow:
+ return_error_value[Coherency]
+ | throw_on_error[Coherency]
+Coherency :
+ coherency[SpecificCoherency]
+ | OnRelease
+SpecificCoherency :
+ bitset[OnRelease]
+ | set[OnRelease]
+OnRelease:
+ delay[Recoverable]
+ | freeze[Recoverable]
+ | discard[Counter]
+Recoverable: recoverable[Counter]
+Counter: counter[Storage]
+Storage : storage[SpecificStorage]
+SpecificStorage :
+ raw[Base]
+ | shm[Base]
+ | mmfile[Base]
+Base: base[Config]
+Config: [
+ numeric_type,
+ node_type,
+ header_type,
+ LUIDG
+ ]
+
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dsl/default.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="generator.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/install.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/install.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,123 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Installing LUID</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="intro.html" title="Introduction">
+<link rel="next" href="functional_model.html" title="Functional Model">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intro.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="functional_model.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.install"></a><a class="link" href="install.html" title="Installing LUID"> Installing LUID</a>
+</h2></div></div></div>
+<a name="toward_boost_luid.install.getting_boost_luid"></a><h4>
+<a name="id4804255"></a>
+ <a class="link" href="install.html#toward_boost_luid.install.getting_boost_luid">Getting Boost.LUID</a>
+ </h4>
+<p>
+ You can get LUID by downloading <code class="literal">luid.zip</code> from http://www.boost-consulting.com/vault/index.php?directory=Data%20Types
+ </p>
+<a name="toward_boost_luid.install.building_boost_luid"></a><h4>
+<a name="id4804292"></a>
+ <a class="link" href="install.html#toward_boost_luid.install.building_boost_luid">Building Boost.LUID</a>
+ </h4>
+<p>
+ There is no need to compile <span class="bold"><strong>Boost.LUID</strong></span>, since
+ it's a header only library. Just include your Boost header directory in your
+ compiler include path.
+ </p>
+<p>
+ <span class="bold"><strong>Boost.LUID</strong></span> depends on Boost. You must use
+ either Boost version 1.35.x or the version in SVN trunk. In particular, <span class="bold"><strong>Boost.LUID</strong></span> depends on:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Boost.DateTime</span></dt>
+<dd><p>
+ which needs separate compilation. However, the subset used by <span class="bold"><strong>Boost.LUID</strong></span> does not need any separate compilation
+ so the user can define <code class="computeroutput"><span class="identifier">BOOST_DATE_TIME_NO_LIB</span></code>
+ to avoid Boost from trying to automatically link the <span class="bold"><strong>Boost.DateTime</strong></span>.
+ </p></dd>
+<dt><span class="term">Boost.DynamicBitSet</span></dt>
+<dd><p>
+ to store the recovered luids
+ </p></dd>
+<dt><span class="term">Boost.Integer</span></dt>
+<dd><p>
+ to obtain the default bounds
+ </p></dd>
+<dt><span class="term">Boost.Interprocess</span></dt>
+<dd><p>
+ to lock on multi process scope and to store on shared memory or mapped
+ memmory files when the lifetime is longer than the process one.
+ </p></dd>
+<dt><span class="term">Boost.Intrusive</span></dt>
+<dd><p>
+ to store the recovered luids
+ </p></dd>
+<dt><span class="term">Boost.MPL</span></dt>
+<dd><p>
+ for all the metaprograming task
+ </p></dd>
+<dt><span class="term">Boost.Parameters</span></dt>
+<dd><p>
+ to pass the constructor parameters and to configure the template parameters
+ </p></dd>
+<dt><span class="term">Boost.Threads</span></dt>
+<dd><p>
+ to lock on multi_threaded scope.
+ </p></dd>
+<dt><span class="term"><span class="bold"><strong>Boost.Threads</strong></span></span></dt>
+<dd><p>
+ needs separate compilation. However, you will need only to link with depending
+ on the features used.
+ </p></dd>
+<dt><span class="term">Boost.TypeTraits</span></dt>
+<dd><p>
+ TEXT
+ </p></dd>
+</dl>
+</div>
+<a name="toward_boost_luid.install.tested_compilers"></a><h4>
+<a name="id4804567"></a>
+ <a class="link" href="install.html#toward_boost_luid.install.tested_compilers">Tested compilers</a>
+ </h4>
+<p>
+ Currently, <span class="bold"><strong>Boost.LUID</strong></span> has been tested in the
+ following compilers/platforms:
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ GCC 3.4.4 Cygwin
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intro.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="functional_model.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/intro.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/intro.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,218 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Introduction</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="next" href="install.html" title="Installing LUID">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="install.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.intro"></a><a class="link" href="intro.html" title="Introduction"> Introduction</a>
+</h2></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Boost.LUID</strong></span> simplifies the generation of locally
+ unique identifiers in a wide context.
+ </p>
+<p>
+ Locally Unique Identifier or LUID is a special type of identifier used in software
+ applications in order to provide a reference number which is unique in a given
+ context (hence, "Locally" in opposition to "Globally" or
+ "Universally"). Each generated LUID is guaranteed to be unique in
+ its context.
+ </p>
+<p>
+ LUID could have many applications. Some examples follow: creating unique identifiers
+ in a database tables, network messages may be identified with a LUID to ensure
+ that this messages are associated to a given session, transactions may be identified
+ by LUIDs.
+ </p>
+<p>
+ Note. Please let me know other applications of luids you can have.
+ </p>
+<p>
+ <span class="bold"><strong>Reduced identifier size</strong></span>
+ </p>
+<p>
+ An attractive feature of LUIDs when compared to alternatives is the minimal
+ size used by this identifiers, that depends on the number of instances a given
+ context can have (usually 4 bytes). This allows to use them in protocols fixing
+ the size of the references exchanged to less that 16 bytes(as it is the case
+ of UUID and GUID). Usually LUIDs are represented by unsigned integers and have
+ an upper bound value.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+<span class="identifier">luidg</span> <span class="identifier">g</span><span class="special">(</span><span class="number">100</span><span class="special">);</span>
+<span class="identifier">luidg</span><span class="special">::</span><span class="identifier">numeric_type</span> <span class="identifier">id</span><span class="special">=</span> <span class="identifier">g</span><span class="special">.</span><span class="identifier">make</span><span class="special">();</span>
+</pre>
+<p>
+ <span class="bold"><strong>Usable as random access index in constant time</strong></span>
+ </p>
+<p>
+ Another aspect, and not less interesting is that the access to the information
+ they identify can be done in constant time.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;</span> <span class="identifier">vec</span><span class="special">;</span>
+<span class="identifier">luidg</span><span class="special">::</span><span class="identifier">numeric_type</span> <span class="identifier">id1</span><span class="special">=</span> <span class="identifier">g</span><span class="special">.</span><span class="identifier">make</span><span class="special">();</span>
+<span class="identifier">vec</span><span class="special">[</span><span class="identifier">id</span><span class="special">]</span> <span class="special">=</span> <span class="keyword">new</span> <span class="identifier">T</span><span class="special">();</span>
+</pre>
+<p>
+ <span class="bold"><strong>Recovering unsused identifiers</strong></span>
+ </p>
+<p>
+ A first implementation could consists in a monotonic counter.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">discard</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+<span class="identifier">luidg</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">_high</span><span class="special">=</span><span class="number">100</span><span class="special">);</span>
+<span class="identifier">luidg</span><span class="special">::</span><span class="identifier">numeric_type</span> <span class="identifier">id</span><span class="special">=</span> <span class="identifier">g</span><span class="special">.</span><span class="identifier">make</span><span class="special">();</span>
+<span class="comment">// ...
+</span><span class="identifier">g</span><span class="special">.</span><span class="identifier">release</span><span class="special">(</span><span class="identifier">id</span><span class="special">);</span>
+</pre>
+<p>
+ While this needs a very simple and efficient implementation, There is drawback
+ of having a small size is that the number of unique identifier is more limited.
+ This limit will finish by been reached if the application runs a long time.
+ To paliate to this, we need a mechanism to recover the unused identifiers once
+ the identified information is removed. Depending on the application the recovered
+ identifiers could be reused immediately
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">recover</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">immediate</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ or frozen during a given duration
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">recover</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">delay</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ or a number of times.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">recover</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">freeze</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ Usually they are reused in a first reusable first reused order (fifo), but
+ depending on the implementation this could not be always the more efficient
+ policy. So the user can either constraint this fifo order or let undefined
+ this aspect.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">recover</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">fifo</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ <span class="bold"><strong>Managing the lack of identifiers</strong></span>
+ </p>
+<p>
+ In any case we need to manage with the overflow case, i.e. when there are no
+ more free identifiers. The user could prefer an exception be thrown,
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">throw_on_error</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ return an invalid value which will be equal to error(),
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">invalid_on_error</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ use errno (ERANGE),
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">errno_on_error</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ or call to a user defined function which could try to recover from this situation,
+ by redimensioning the upper bound for example.
+ </p>
+<p>
+ <span class="bold"><strong>Ensuring coherency on reusable identifiers</strong></span>
+ </p>
+<p>
+ All this seams to work as far as the user do not release the same identifiers
+ twice. As this is an expensive aspect, but ussualy the applications has its
+ own way to do it. If this is not the case the application could ask to the
+ luid generator to ensure that.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">ensure</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ <span class="bold"><strong>Synchronization on multi threaded or multi process applications</strong></span>
+ </p>
+<p>
+ The generation of new LUIDs and the recovering of unused LUIDs must be synchronized.
+ So LUID are better adapted to systems where these operations are done in a
+ reduced scope. Depending on this scope: single thread, multi-threaded process
+ or a node,i.e. multiple process, the synchronization mechanisms vary.
+ </p>
+<p>
+ In a single thread scope no synchronization is needed. Synchronization on a
+ multi-threaded process can be ensured using a thread mutex.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">multi_threaded</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ or
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">multi_process</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ In addition the synchronization can be ensured internally by the generator,
+ or externally by the user, i.e. the user has already a synchronization mechanism.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">multi_threaded</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">externally_locked</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ LUIDs are not adapted to distributed system (multiple nodes generating and
+ recovering luids) because it needs a coordination between the different nodes
+ which will take too much time. UUIDs and GUIDs are more adapted to this situation.
+ Anyway if the size constraint can not be avoided, one of the nodes could play
+ the master role and the others behaves as slaves. Master and slaves need to
+ work together. This library do not pretend to take in account this use case
+ but, could be the base of such approach.
+ </p>
+<p>
+ <span class="bold"><strong>Lifetime</strong></span>
+ </p>
+<p>
+ Another aspect is the lifetime of the information to be identified by the luids.
+ It can be the lifetime of the process, the host machine lifetime or persists
+ to a shut down of the host machine using the filesystem.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">bluid</span><span class="special">::</span><span class="identifier">luidg</span><span class="special">&lt;</span><span class="identifier">bluid</span><span class="special">::</span><span class="identifier">dsl</span><span class="special">::</span><span class="identifier">kernel</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">luidg</span><span class="special">;</span>
+</pre>
+<p>
+ <span class="bold"><strong>Optimization</strong></span>
+ </p>
+<p>
+ The last aspect will be the optimization. Different application have different
+ needs, some have space constraints, and most of them have speed constraints.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="install.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,55 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Reference</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="prev" href="generator/generator_assemble_components.html" title="Assemble components">
+<link rel="next" href="reference/reference_macros.html" title="Macros">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator/generator_assemble_components.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/reference_macros.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_luid.reference"></a><a class="link" href="reference.html" title="Reference"> Reference</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Macros</span></dt>
+<dt><span class="section"> Types</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl">
+ DSL types</a></span></dt>
+<dt><span class="section"><a href="reference/reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins">
+ ICCL mixins</a></span></dt>
+<dt><span class="section"><a href="reference/reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_term">
+ Other Implementation components</a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="generator/generator_assemble_components.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/reference_macros.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_macros.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_macros.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,41 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Macros</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="reference_types.html" title="Types">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference_types.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.reference.reference_macros"></a><a class="link" href="reference_macros.html" title="Macros"> Macros</a>
+</h3></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference_types.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_types.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/html/toward_boost_luid/reference/reference_types.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,1828 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Types</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward Boost.LUID">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="reference_macros.html" title="Macros">
+<link rel="next" href="../appendices.html" title="Appendices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference_macros.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../appendices.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_luid.reference.reference_types"></a><a class="link" href="reference_types.html" title="Types"> Types</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl">
+ DSL types</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_overflow">
+ on_overflow&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_release">
+ on_release&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_scope">
+ scope&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_lifetime">
+ lifetime&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_coherency">
+ coherency&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_optimization">
+ optimization&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_extension">
+ extension&lt;&gt;</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins">
+ ICCL mixins</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_mixin">
+ Mixin Layers</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_base">
+ Base Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_storage">
+ Specific Storage Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_storage">
+ Storage Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_counter">
+ Counter Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_release">
+ Release Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_recoverable">
+ Recoverable Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_coherency">
+ Specific Coherency Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_coherency">
+ Coherency Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_overflow">
+ OnOverflow Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_locking">
+ Locking Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_facade">
+ Facade Layer</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_term">
+ Other Implementation components</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl" title="DSL types">
+ DSL types</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_overflow">
+ on_overflow&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_release">
+ on_release&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_scope">
+ scope&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_lifetime">
+ lifetime&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_coherency">
+ coherency&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_optimization">
+ optimization&lt;&gt;</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_extension">
+ extension&lt;&gt;</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_overflow"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_overflow" title="on_overflow&lt;&gt;">
+ on_overflow&lt;&gt;</a>
+</h5></div></div></div>
+<p>
+ The available actions are:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">throw_on_error&lt;&gt;</span></dt>
+<dd><p>
+ Throws the std::overflow_error exception.
+ </p></dd>
+<dt><span class="term">errno_on_error&lt;&gt;</span></dt>
+<dd><p>
+ Sets ::errno to ERANGE and returns std::numeric_limits&lt;T&gt;::infinity().
+ </p></dd>
+<dt><span class="term">ignore_error&lt;&gt;</span></dt>
+<dd><p>
+ Returns std::numeric_limits&lt;T&gt;::infinity()
+ </p></dd>
+<dt><span class="term">user_error&lt;OverflowErrorHandler&gt;</span></dt>
+<dd><p>
+ Calls a user-supplied overflow error handler.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_release"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_on_release" title="on_release&lt;&gt;">
+ on_release&lt;&gt;</a>
+</h5></div></div></div>
+<p>
+ The available actions are:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">discard&lt;&gt;</span></dt>
+<dd><p>
+ On release the luid is discarded.
+ </p></dd>
+<dt><span class="term">recover&lt;immediate&lt;&gt; &gt;</span></dt>
+<dd><p>
+ On release the luid is reusable immediatelly.
+ </p></dd>
+<dt><span class="term">recover&lt;delay&lt;&gt; &gt;</span></dt>
+<dd><p>
+ On release the luid is reusable after a given time (given at construction
+ time).
+ </p></dd>
+<dt><span class="term">recover&lt;freeze&lt;&gt; &gt;</span></dt>
+<dd><p>
+ On release the luid is reusable once d luids have been reused (given
+ at construction time).
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_scope"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_scope" title="scope&lt;&gt;">
+ scope&lt;&gt;</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_lifetime"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_lifetime" title="lifetime&lt;&gt;">
+ lifetime&lt;&gt;</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_coherency"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_coherency" title="coherency&lt;&gt;">
+ coherency&lt;&gt;</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_optimization"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_optimization" title="optimization&lt;&gt;">
+ optimization&lt;&gt;</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_extension"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_dsl.reference_dsl_extension" title="extension&lt;&gt;">
+ extension&lt;&gt;</a>
+</h5></div></div></div></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins" title="ICCL mixins">
+ ICCL mixins</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_mixin">
+ Mixin Layers</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_base">
+ Base Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_storage">
+ Specific Storage Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_storage">
+ Storage Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_counter">
+ Counter Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_release">
+ Release Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_recoverable">
+ Recoverable Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_coherency">
+ Specific Coherency Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_coherency">
+ Coherency Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_overflow">
+ OnOverflow Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_locking">
+ Locking Layer</a></span></dt>
+<dt><span class="section"><a href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_facade">
+ Facade Layer</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_mixin"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_mixin" title="Mixin Layers">
+ Mixin Layers</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ All the ICCL components are mixin layers that takes the following form:
+ </p>
+<p>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">LowerLayer</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">Layer</span>
+<span class="special">{</span>
+<span class="keyword">typedef</span> <span class="identifier">LowerLayer</span> <span class="identifier">lower_layer</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lower_layer</span><span class="special">::</span><span class="identifier">config</span> <span class="identifier">config</span><span class="special">;</span>
+ <span class="comment">// node_type specialization
+</span> <span class="special">...</span>
+ <span class="comment">// header_type specialization
+</span> <span class="special">...</span>
+ <span class="comment">// type specialization
+</span> <span class="special">...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ And have public types config, node_type, header_type and type. When a
+ layer doesn't adds anything to a type the lower layer it defines the
+ type as follows:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lower_layer</span><span class="special">::</span><span class="identifier">config</span> <span class="identifier">config</span><span class="special">;</span>
+</pre>
+<p>
+ When the layer adds something to a type of the the lower layer for a
+ type it defines the type as follows:
+ </p>
+<pre class="programlisting"><span class="comment">// header_type specialization
+</span><span class="keyword">struct</span> <span class="identifier">header_type</span> <span class="special">:</span> <span class="identifier">lower_layer</span><span class="special">::</span><span class="identifier">header_type</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lower_layer</span><span class="special">::</span><span class="identifier">header_type</span> <span class="identifier">super_type</span><span class="special">;</span>
+ <span class="special">...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ There are two special layers, the bottom layer and the top layer.
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidMixinLayer in the LuidMixinLayer concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">ArgsParams</span></code></span></dt>
+<dd><p>
+ A type playing the role of argugent pack in the LuidMixinLayer concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">args</span></code></span></dt>
+<dd><p>
+ Object of type ArgsParams.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">alloc</span></code></span></dt>
+<dd><p>
+ Object of type L::config::allocator_type&amp;.
+ </p></dd>
+</dl>
+</div>
+<p>
+ <span class="bold"><strong>Valid expressions</strong></span> The following expressions
+ must be valid.
+ </p>
+<div class="table">
+<a name="id4861585"></a><p class="title"><b>Table 1.17. LuidMixinLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidMixinLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">config</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">config</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Implementation</span> <span class="identifier">defined</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The global configuration.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">node_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">node_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Implementation</span> <span class="identifier">defined</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the node type on this layer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">header_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">header_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Implementation</span> <span class="identifier">defined</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the header type on this layer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Header</span> <span class="identifier">construction</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">header_type</span><span class="special">(</span><span class="identifier">args</span><span class="special">,</span>
+ <span class="identifier">alloc</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">header_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ header type must accept a constructor with a ArgsParams parameter.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Implementation</span> <span class="identifier">defined</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the luid type on this layer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">type</span> <span class="identifier">construction</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ type must accept a constructor with a ArgsParams parameter.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_base"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_base" title="Base Layer">
+ Base Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ The bottom layer has the generator itself as parameter instead of the
+ lower layer. It defines the bottom types for node_type, header_type and
+ type. In addition it define a final function which gives the final instance
+ for the luidg type. This layer is implemented only by the luid::iccl::base
+ class, and it cannot be replaced.
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span> <a class="link" href="../../">LuidMixinLayer</a>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidBaseLayer in the LuidBaseLayer concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+</dl>
+</div>
+<p>
+ <span class="bold"><strong>Valid expressions</strong></span> In addition to the
+ expressions defined in LuidMixinLayer, the following expressions must
+ be valid.
+ </p>
+<div class="table">
+<a name="id4862287"></a><p class="title"><b>Table 1.18. LuidBaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidBaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantic</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ final type
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">final_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Implementation</span> <span class="identifier">defined</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the final type of the luid generator.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ final access
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">final</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">final_type</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the final instance of the luid generator.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_storage"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_storage" title="Specific Storage Layer">
+ Specific Storage Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ This layer is responsable for the storage of the allocators, the header
+ instantiation, and provides some allocation functions.
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span> LuidBaseLayer
+ </p>
+<p>
+ </p>
+<p>
+ The type <span class="bold"><strong>LowerLayer</strong></span> must be a model
+ of <span class="bold"><strong>LuidBaseLayer</strong></span>.
+ </p>
+<p>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidSpecificStorageLayer in the LuidSpecificStorageLayer
+ concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+</dl>
+</div>
+<p>
+ </p>
+<p>
+ <span class="bold"><strong>Valid expressions</strong></span>
+ </p>
+<p>
+ </p>
+<p>
+ In addition to the expressions defined in LuidBaseLayer, the following
+ expressions must be valid.
+ </p>
+<p>
+ </p>
+<div class="table">
+<a name="id4862615"></a><p class="title"><b>Table 1.19. LuidSpecificStorageLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidSpecificStorageLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ header access
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">header</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">header_type</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the final instance of the luid generator.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ allocator
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">allocator</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">allocator_type</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ the allocator instance of the luid generator.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_storage"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_storage" title="Storage Layer">
+ Storage Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span> This layer is responsable
+ for the storage of the node allocators, and provides some node allocation
+ functions.
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span> LuidSpecificStorageLayer
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidSpecificStorageLayer in the LuidSpecificStorageLayer
+ concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">TPTR</span></code></span></dt>
+<dd><p>
+ A type playing the role of pointer in the LuidSpecificStorageLayer
+ concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">t_ptr</span></code></span></dt>
+<dd><p>
+ Object of type TPTR.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">n</span></code></span></dt>
+<dd><p>
+ Object of type L::config::node_pointer.
+ </p></dd>
+</dl>
+</div>
+<p>
+ </p>
+<p>
+ <span class="bold"><strong>Valid expressions</strong></span>
+ </p>
+<p>
+ </p>
+<p>
+ In addition to the expressions defined in LuidStorageLayer, the following
+ expressions must be valid.
+ </p>
+<p>
+ </p>
+<div class="table">
+<a name="id4863002"></a><p class="title"><b>Table 1.20. LuidStorageLayer Valid expressions</b></p>
+<div class="table-contents"><table class="table" summary="LuidStorageLayer Valid expressions">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ generic allocation
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">&lt;</span><span class="identifier">TPTR</span><span class="special">&gt;()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">TPTR</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ allocates from the allocator the space for a type pointee&lt;TPTR&gt;.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ generic deallocation
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">deallocate</span><span class="special">&lt;</span><span class="identifier">TPTR</span><span class="special">&gt;(</span><span class="identifier">t_ptr</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ deallocate a preceding allocate pointer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ node allocation
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">node_pointer</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ allocates from the node allocator a node_type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ node deallocation
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ deallocate a preceding allocate node type pointer.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_counter"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_counter" title="Counter Layer">
+ Counter Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ This layer is responsable for the monotonic counter functions. It is
+ really the bottom functional layer.
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span> LuidStorageLayer
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidSpecificStorageLayer in the LuidSpecificStorageLayer
+ concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">n</span></code></span></dt>
+<dd><p>
+ Object of type L::config::numeric_type.
+ </p></dd>
+</dl>
+</div>
+<p>
+ </p>
+<p>
+ <span class="bold"><strong>Valid expressions</strong></span>
+ </p>
+<p>
+ </p>
+<p>
+ In addition to the expressions defined in LuidStorageLayer, the following
+ expressions must be valid.
+ </p>
+<p>
+ </p>
+<div class="table">
+<a name="id4863488"></a><p class="title"><b>Table 1.21. LuidCounterLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidCounterLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ count
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ lower_bound
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">lower_bound</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the lower_bound of non recoverable luid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ upper_bound
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">upper_bound</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the upper_bound of non recoverable luid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ resize_upper_bound
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">resize_upper_bound</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ set the new upper bound if greater than the current counter and
+ return the current upper_bound
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ make
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">make</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ makes a new luid. This layer do not needs to take care of integrity
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ release
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">release</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ release a luid.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ clear
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ reinit the luid generator.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_release"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_release" title="Release Layer">
+ Release Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ This layer is responsable for the management of of released luid.
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span> LuidCounterLayer
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">L</span></code></span></dt>
+<dd><p>
+ A type playing the role of LuidSpecificStorageLayer in the LuidSpecificStorageLayer
+ concept.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">l</span></code></span></dt>
+<dd><p>
+ Object of type L::type.
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">n</span></code></span></dt>
+<dd><p>
+ Object of type L::config::numeric_type.
+ </p></dd>
+</dl>
+</div>
+<div class="table">
+<a name="id4864177"></a><p class="title"><b>Table 1.22. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ count
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ make
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">make</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">L</span><span class="special">::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ makes a new luid. This layer do not needs to take care of integrity
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ release
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">release</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ release a luid.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ clear
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ reinit the luid generator.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_recoverable"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_recoverable" title="Recoverable Layer">
+ Recoverable Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4864620"></a><p class="title"><b>Table 1.23. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ count
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_coherency"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_specific_coherency" title="Specific Coherency Layer">
+ Specific Coherency Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4864872"></a><p class="title"><b>Table 1.24. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ count
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_coherency"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_coherency" title="Coherency Layer">
+ Coherency Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4865123"></a><p class="title"><b>Table 1.25. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">count</span> <span class="identifier">function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_overflow"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_on_overflow" title="OnOverflow Layer">
+ OnOverflow Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4865388"></a><p class="title"><b>Table 1.26. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">count</span> <span class="identifier">function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_locking"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_locking" title="Locking Layer">
+ Locking Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4865652"></a><p class="title"><b>Table 1.27. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">count</span> <span class="identifier">function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_facade"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_mixins.reference_iccl_facade" title="Facade Layer">
+ Facade Layer</a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Refinement of</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Notation</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">M</span></code> denotes a LuidReleaseLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">L</span></code> a LuidCounterLayer,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">l</span></code> is of type L&lt;B&gt;::type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">n</span></code> is of type M&lt;B&gt;::config::numeric_type
+ </li>
+</ul></div>
+<div class="table">
+<a name="id4865917"></a><p class="title"><b>Table 1.28. LuidReleaseLayer Requirements</b></p>
+<div class="table-contents"><table class="table" summary="LuidReleaseLayer Requirements">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Name</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Expression</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Return type</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Semantics</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">count</span> <span class="identifier">function</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">count</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">M</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">config</span><span class="special">::</span><span class="identifier">numeric_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ return the number of used luids
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_luid.reference.reference_types.reference_iccl_term"></a><a class="link" href="reference_types.html#toward_boost_luid.reference.reference_types.reference_iccl_term" title="Other Implementation components">
+ Other Implementation components</a>
+</h4></div></div></div></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference_macros.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../appendices.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/implementation.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/implementation.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,26 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:implementation Appendix C: Implementation Notes]
+
+[section:sfinae ]
+
+
+[endsect]
+
+[section:function_arity ]
+
+
+[endsect]
+
+[section:ppmp_vs_tmp ]
+
+TODO
+
+[endsect]
+
+[endsect]

Added: sandbox/luid/libs/luid/doc/index.html
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/index.html 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,17 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=html/index.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+../../doc/html/luid.html
+ <p>
+ Copyright © 2008-2009 Vicente J. Botet Escriba
+ </p>
+ <p>
+ Use, modification and distribution is subject to the Boost Software License, Version 1.0
+ (see <a href="http://www.boost.org/LICENSE_1_0.txt">
+ http://www.boost.org/LICENSE_1_0.txt>).
+ </p>
+</body>
+</html>

Added: sandbox/luid/libs/luid/doc/luid.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/luid.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,1232 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[library Toward Boost.LUID
+ [quickbook 1.4]
+ [authors [Botet Escriba, Vicente J.]]
+ [copyright 2008-2009 Vicente J. Botet Escriba]
+ [purpose Locally Unique Identifier]
+ [license
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+ ]
+]
+[template concept_param[role concept] A type playing the role of [role] in the [concept] concept.]
+
+[template concept_var[type] Object of type [type].]
+
+[template var[name type]
+
+* [*[name]] Object of type [type].
+]
+
+[template concept_arg[name concept]
+
+The type [*[name]] must be a model of [*[concept]].
+]
+
+[template concept_valid_expressions[concept]
+[*Valid expressions]
+
+In addition to the expressions defined in [concept], the following expressions must be valid.
+]
+
+[warning LUID is not a part of the Boost libraries.]
+
+[section:intro Introduction]
+
+[*Description]
+
+[*Boost.LUID] simplifies the generation of locally unique identifiers in a wide context.
+
+Locally Unique Identifier or LUID is a special type of identifier used in software applications in order to provide a reference number which is unique in a given context (hence, "Locally" in opposition to "Globally" or "Universally"). Each generated LUID is guaranteed to be unique in its context.
+
+LUID could have many applications. Some examples follow: creating unique identifiers in a database tables, network messages may be identified with a LUID to ensure that this messages are associated to a given session, transactions may be identified by LUIDs.
+
+Note. Please let me know other applications of luids you can have.
+
+[*Reduced identifier size]
+
+An attractive feature of LUIDs when compared to other alternatives is the minimal size used by this identifiers, that depends on the number of instances a given context can have (usually 4 bytes). This allows to use them in protocols fixing the size of the references exchanged to less that 16 bytes(as it is the case of UUID and GUID). Usually LUIDs are represented by unsigned integers and have an upper bound value.
+
+ typedef bluid::luid::luidg<unsigned char> luidg;
+ luidg g(_high=100);
+ luidg::numeric_type id= g.make();
+
+
+[*Usable as random access index in constant time]
+
+Another aspect, and not less interesting is that the access to the information they identify can be done in constant time.
+
+ std::vector<T*> vec;
+ luidg::numeric_type id1= g.make();
+ vec[id] = new T();
+
+[*Recovering unsused identifiers]
+
+A first implementation could consists in a monotonic counter.
+
+ typedef bluid::luidg<bluid::dsl::discard<> > luidg;
+ luidg g(_high=100);
+ luidg::numeric_type id= g.make();
+ vec[id] = new T();
+ // ...
+ delete vec[id];
+ vec[id] = 0;
+ g.release(id);
+
+While this needs a very simple and efficient implementation, There is drawback of having a small size is that the number of unique identifier is more limited. This limit will finish by been reached if the application runs a long time. To paliate to this, we need a mechanism to recover the unused identifiers once the identified information is removed. Depending on the application the recovered identifiers could be reused immediately
+
+ typedef bluid::luidg<bluid::dsl::recover<bluid::dsl::immediate<> > > luidg;
+
+or frozen during a given duration
+
+ typedef bluid::luidg<bluid::dsl::recover<bluid::dsl::delay<> > > luidg;
+
+or a number of times.
+
+ typedef bluid::luidg<bluid::dsl::recover<bluid::dsl::freeze<> > > luidg;
+
+Usually they are reused in a first reusable first reused order (fifo), but depending on the implementation this could not be always the more efficient policy. So the user can either constraint this fifo order or let undefined this aspect.
+
+ typedef bluid::luidg<bluid::dsl::recover<bluid::dsl::fifo<> > > luidg;
+
+
+[*Managing the lack of identifiers]
+
+In any case we need to manage with the overflow case, i.e. when there are no more free identifiers. The user could prefer an exception be thrown,
+
+ typedef bluid::luidg<bluid::dsl::throw_on_error<> > luidg;
+
+return an invalid value which will be equal to error(),
+
+ typedef bluid::luidg<bluid::dsl::invalid_on_error<> > luidg;
+
+use errno (ERANGE),
+
+ typedef bluid::luidg<int, bluid::dsl::errno_on_error<> > luidg;
+
+or call to a user defined function which could try to recover from this situation, by redimensioning the upper bound for example.
+
+
+[*Ensuring coherency on reusable identifiers]
+
+All this seams to work as far as the user do not release the same identifiers twice. As this is an expensive aspect, but ussualy the applications has its own way to do it. If this is not the case the application could ask to the luid generator to ensure that.
+
+ typedef bluid::luidg<bluid::dsl::ensure<> > luidg;
+
+[*Synchronization on multi threaded or multi process applications]
+
+The generation of new LUIDs and the recovering of unused LUIDs must be synchronized. So LUID are better adapted to systems where these operations are done in a reduced scope. Depending on this scope: single thread, multi-threaded process or a node,i.e. multiple process, the synchronization mechanisms vary.
+
+In a single thread scope no synchronization is needed. Synchronization on a multi-threaded process can be ensured using a thread mutex.
+
+ typedef bluid::luidg<bluid::dsl::multi_threaded<> > luidg;
+
+or
+
+ typedef bluid::luidg<bluid::dsl::multi_process<> > luidg;
+
+In addition the synchronization can be ensured internally by the generator, or externally by the user, i.e. the user has already a synchronization mechanism.
+
+ typedef bluid::luidg<bluid::dsl::multi_threaded<bluid::dsl::externally_locked<> > > luidg;
+
+LUIDs are not adapted to distributed system (multiple nodes generating and recovering luids) because it needs a coordination between the different nodes which will take too much time. UUIDs and GUIDs are more adapted to this situation. Anyway if the size constraint can not be avoided, one of the nodes could play the master role and the others behaves as slaves. Master and slaves need to work together. This library do not pretend to take in account this use case but, could be the base of such approach.
+
+[*Lifetime]
+
+Another aspect is the lifetime of the information to be identified by the luids. It can be the lifetime of the process, the host machine lifetime or persists to a shut down of the host machine using the filesystem.
+
+ typedef bluid::luidg<bluid::dsl::kernel<> > luidg;
+
+[*Optimization]
+
+The last aspect will be the optimization. Different application have different needs, some have space constraints, and most of them have speed constraints.
+
+[endsect]
+
+[section:install Installing LUID]
+[heading Getting Boost.LUID]
+
+You can get LUID by downloading [^luid.zip] from [@http://www.boost-consulting.com/vault/index.php?directory=Data%20Types]
+
+
+[heading Building Boost.LUID]
+
+There is no need to compile [*Boost.LUID], since it's a header only library. Just include your Boost header directory in your compiler include path.
+
+[*Boost.LUID] depends on Boost. You must use either Boost version 1.35.x or the version in SVN trunk. In particular, [*Boost.LUID] depends on:
+
+
+[variablelist
+[
+ [[@http://www.boost.org/libs/date_time/ [*Boost.DateTime]]] [which needs separate compilation. However, the subset used by [*Boost.LUID] does not need any separate compilation so the user can define `BOOST_DATE_TIME_NO_LIB` to avoid Boost from trying to automatically link the [*Boost.DateTime].]]
+[
+ [[@http://www.boost.org/libs/dynamic_bitset [*Boost.DynamicBitSet]]] [to store the recovered luids]
+]
+[
+ [[@http://www.boost.org/libs/integer [*Boost.Integer]]] [to obtain the default bounds]
+]
+[
+ [[@http://www.boost.org/libs/interprocess [*Boost.Interprocess]]] [to lock on multi process scope and to store on shared memory or mapped memmory files when the lifetime is longer than the process one.]
+]
+[
+ [[@http://www.boost.org/libs/intrusive [*Boost.Intrusive]]] [to store the recovered luids]
+]
+[
+ [[@http://www.boost.org/libs/mpl [*Boost.MPL]]] [for all the metaprograming task]
+]
+[
+ [[@http://www.boost.org/libs/parameter [*Boost.Parameters]]] [to pass the constructor parameters and to configure the template parameters]
+]
+[
+ [[@http://www.boost.org/libs/thread [*Boost.Threads]]] [to lock on multi_threaded scope.]
+]
+[
+ [[*Boost.Threads]] [needs separate compilation. However, you will need only to link with depending on the features used. ]
+]
+[
+ [[@http://www.boost.org/libs/type_traits [*Boost.TypeTraits]]] []
+]
+]
+
+[heading Tested compilers]
+Currently, [*Boost.LUID] has been tested in the following compilers/platforms:
+
+* GCC 3.4.4 Cygwin
+
+
+[endsect]
+
+[section:functional_model Functional Model]
+The user functions provided by LUID generator are quite simple:
+
+* make: make a new luid (constant time complexity)
+* release: release an luid (should check that the luid is not already free) (constant time complexity without coherency)
+* error: the value returned when no more luids are available (constant time complexity)
+* set_upper_bound: sets the new upper bound (could be linear time complexity)
+* get_lower_bound: get the lower bound (constant time complexity)
+* get_upper_bound: get the current upper bound (constant time complexity)
+* count: get the number of used luids (should be constant time complexity)
+* clear: release all the used ressources and reset them as they were after construction (could be linear time complexity)
+
+[endsect]
+
+[section:fearure_model Feature Model]
+
+While making an concrete implementation could be simple, making a generic one add the complexity of variants configuration.
+
+Next follows the features and its variants associated to the domain.
+
+* [*numeric_type]/Mandatory: The unsigned integer type of the luid to be managed
+ * lower: The lower bound value, i.e. the first value
+ * upper: The upper bound value, i.e. the fact the generator bounds until a given value
+
+* [*on_overflow]/Mandatory: An error policy used when there are no more free uid
+ * throw_on_error
+ * errno_on_error
+ * ignore_error
+ * user_error(user_function)
+
+* [*on_release]/Mandatory: A releasing policy which control whether identifiers are discarded or
+recovered when they are released
+ * discard: the released luid are not reusable
+ * recover: the generator can recover identifiers that are released. This has two features
+ * when the released values become reusable
+ * immediate: the released luid is immediately reusable
+ * delay: the luid is reusable after a given a time.
+ This needs the following parameters
+ * time_type: the time type
+ * duration_type: the duration type
+ * now: how to get the current time
+ * duration: the delay after which the luid is reusable.
+ * the default duration if not given explicitly
+ * freeze: the luid is reusable once some minimal number of new luid have been taken
+ * distance: the number of luids to be reused before the released one
+ * how the reusable values are reused
+ * fifo: reusable values are reused on fifo order
+ * undefined: no constraint is added
+
+* [*coherency]/Mandatory: A coherency policy checks whether the released luid is already free
+ * ensure: the luid generator must ensure that the released luids are unique. If already released an exception is thrown.
+ * ignore: the user has the responsability and the means to ensure that the released luids are unique.
+
+* [*count]/Optional: The luid generator can be configured with constant or linear time count:
+ * Linear time count: The luid generator doesn't hold a count member that it's updated with every make/release. This implies that the size() function has not constant time complexity.
+ * Constant time count: The luid generator holds a count member that it's updated with every make/release.
+ This implies that the count() function has constant time complexity.
+
+* [*scope]/Mandatory: the scope of the luid generator, i.e. which part of the system could use the luid generator
+ * mono_threaded: only one single thread access the luid generator
+ * multi_threaded: several threads in a single process share the luid generator. This has associated a locking policy.
+ * multi_process: several process share the luid generator. This has associated a locking policy.
+
+ * [*locking]: A locking policy determining the synchronization mechanisms for internal access to shared resources.
+ * internally: the generator ensure that all the operations are synchronized on its own.
+ * externally: the user needs to provide the needed synchronization.
+
+* [*lifetime]/Mandatory: The lifetime/persistency of the information identified by this luids
+ * process: the information is lost once the process exits or shuts down
+ * kernel: the information exists until the kernel of the operating system reboots or the information is explicitly deleted.
+ If a process on the scope restarts it will recover the information.
+ * filesystem: the information exists until the mechanism is explicitly deleted.
+
+* [*optimization]/Mandatory: An optimization policy which could be used as an hint for the implementation
+choice of the other aspects.
+ * speed: the used algorithms are efficient even if a lot of space is used
+ * space: the needed space is minimized even if this has as consequence a lost of efficiency.
+
+* [*extendability]:
+
+[heading Which features are mandatory for the first release?]
+
+[endsect]
+
+[section:dsl Domain Specific Language]
+[heading Which features must be in the DSL?]
+
+* Should the lower, upper bound be static or given at construction time?
+
+I think that these values must be given at construction time.
+
+* Should the low value be 0?
+
+This seams not really a constraint.
+
+* Can the upper bound be changed? And how?
+
+The upper bound could be changed following some constraints.
+
+* Should the duration be static, given at construction time or when releasing the uid?
+
+I think that this must be given at construction time. This simplify the algorithm and make uniform
+the release function interface.
+
+* Configurability versus extendability
+
+In order to manage with all this variations this library propose the use of a luidg generator with a high configurablity degree using a domain specific language (DSL). The DSL expressions are transformed to a Genvoca stack of Implementation Components Configuration Language(ICCL) by the generator.
+
+Each implementation component (IC) is a mixin and all of them have the same form
+
+[c++]
+
+ template <typename Inner>
+ class IC : public/protected/private Inner {
+ ...
+ };
+
+
+This DSL can not be extended without modifying the library. In order to make extensions we need to modify how these implementation components are arranged. An Extending DSL language could be provided to this concern.
+The language could consider replacing an IC by a user IC, removing an IC or inserting over a IC a user IC. This has as consequence that the implementation components must be models of specific concepts.
+Another possibility is to let the user extend the DSL, and provide an other generator.
+In any case the IC must be provided and the concept behind this IC must be described explicitly.
+
+* Do we need to use Boost.Parameters for the template parameters?
+
+As the number of parameters is quite big the parameter should be given by name. The use of the Boost.Parameter seams to help to achieve that. I'm wondering if the ParametersExpresion library could be defined as well. This could make easier the parser, and the transformation for default values.
+
+* Do we need to use Boost.Parameters for the constructor parameters or a technique similar to the one used on Boost.MultiIndex?
+
+As the number of constructor parameters is variable I think that the Boost.Parameters is more adapted.
+
+[heading DSL Grammar]
+[pre
+luidg [
+ numeric_type([uint_type] + lower_bound + upper_bound) ?
++ on_overflow [
+ throw_on_error
+ | errno_on_error
+ | invalid_on_error
+ | user_error(user_function)
+ | on_overflow_layer(layer)
+ ]
++ on_release [
+ discard
+ | recover [recover_when + recover_how ]
+ | on_release_layer (layer)
+ ]
++ scope [
+ mono_threaded
+ | multi_threaded [locking]
+ | multi_process [locking]
+ | locking_layer (layer[locking])
+ ]
++ lifetime [
+ process [void_pointer_type + allocator_type ]
+ | kernel [ void_pointer_type + allocator_type ]
+ | filesystem [void_pointer_type + allocator_type ]
+ | storage_layer ( layer [void_pointer_type + allocator_type] )
+ ]
++ count_complexity [ contant_time | linear_time ]
++ optimization [ speed | space]
++ coherency [ ensure | ignore | coherency_layer (layer) ]
+]
+
+lower_bound [static_lower_bound [uint_value] | cons_lower_bound ]
+
+upper_bound [static_upper_bound [uint_value] | dynamic_upper_bound | cons_upper_bound ]
+
+recover_when [
+ immediate
+| freeze
+| delay [time_traits]
+]
+
+recover_how [
+ fifo
+| undefined
+]
+
+locking [
+ internally [locking_traits]
+| externally [locking_traits]
+]
+
+locking_traits [
+ thread_locking_traits
+| process_locking_traits
+| ...
+]
+
+time_traits [
+ posix_time_traits
+| ...
+]
+
+[section DSL features]
+[variablelist
+[
+ [allocator_type] [The allocator type]
+]
+[
+ [void_pointer_type] [the void pointer type]
+]
+]
+
+[endsect]
+
+[section:default Default Values]
+
+[table luidg Default Values
+[[Feature] [Default]]
+[[numeric_type] [unsigned int]]
+[[on_overflow] [invalid_error]]
+[[on_release] [discard]]
+[[scope] [mono_threaded]]
+[[lifetime] [process]]
+[[optimization] [speed]]
+[[coherency] [ensure]]
+[[introspection] [count]]
+]
+
+[table luidg Incompatible Values
+[[scope] [lifetime]]
+[[multi_process] [process_persistecy]]
+]
+
+[table recover Default Values
+[[Feature] [Default]]
+[[when] [immediate]]
+[[how] [fifo]]
+]
+
+[table Other Default Values
+[[Feature] [Default]]
+[[time_traits] [posix]]
+[[locking] [internally]]
+]
+
+[table Locking Derived Values
+[[scope] [lifetime] [internally_locking_traits] [externally_mutex_type]]
+[[mono_threaded] [*] [N/A] [N/A]]
+[[multi_threaded] [*] [thread_locking_traits] [boost::mutex]]
+[[multi_process] [process_persistecy] [N/A] [N/A]]
+[[multi_process] [kernel_persistecy] [process_locking_traits] [bip::named_mutex]]
+[[multi_process] [filesystem_persistecy] [process_mutex_traits] [bip::named_mutex]]
+]
+
+[table void_pointer_type Derived Values
+[[scope] [lifetime] [void_pointer_type]]
+[[mono_threaded] [process_persistecy] [void*]]
+[[multi_threaded] [process_persistecy] [void*]]
+[[multi_process] [process_persistecy] [N/A]]
+[[*] [kernel_persistecy] [bip::offset_ptr<void>]]
+[[*] [filesystem_persistecy] [bip::offset_ptr<void>]]
+]
+
+[table allocator_type Derived Values
+[[lifetime] [allocator_type]]
+[[process_persistecy] [std::allocator]]
+[[kernel_persistecy] [bip::allocator<int, bip::managed_shared_memory::segment_manager>]]
+[[filesystem_persistecy] [bip::allocator<int, bip::managed_mapped_file::segment_manager>]]
+]
+
+[endsect]
+
+[endsect]
+
+[section:iccl Implementation Component Configuration Language]
+
+[table GenVoca layered architecture
+[[Layer][Variations]]
+
+[[LUIDG][constructor\[OptExternalLocking\]]]
+[[OptExternalLocking][externally_locked\[Facade\] | Facade]]
+[[Facade][facade\[InternalLocking\] ]]
+[[InternalLocking][internally_locked\[Reentrant\] | Reentrant | user_provided\[Reentrant\]]]
+
+[[Reentrant][reentrant\[OnOverflow\] ]]
+
+[[OnOverflow][ ingnore_error\[OnRelease\] | throw_on_error\[OnRelease\] | errno_on_error\[OnRelease\] | user_provided\[OnRelease\]]]
+
+[[Coherency][coherency\[SpecificCoherency\] | OnRelease | user_provided\[OnRelease\] ]]
+[[SpecificCoherency][biset\[OnRelease\] ]]
+
+[[OnRelease][ discard\[Counter\] | rec_immediate_fifo\[Fifo\] | rec_delay_fifo\[Fifo\] | rec_freeze_fifo\[Fifo\] | rec_immediate_undefined\[Set\] | user_provided\[Storage\] ]]
+[[Fifo][queue\[Counter\]]]
+[[Set][set_interval\[Storage\]]]
+[[Counter][counter\[Storage\]]]
+
+[[Storage][storage\[SpecificStorage\] | user_provided\[Base\]]]
+[[SpecificStorage][raw\[Base\] | shm\[Base\] | mmfile\[Base\]]]
+
+[[Base][base\[Config\]]]
+
+[[Config][numeric_type,
+ node_type,
+ header_type,
+ LUIDG]]
+]
+
+GenVoca Grammar for the Locally Unique Identifier Generator LUIDG
+[pre
+LUIDG : luidg\[Facade\]
+Facade : facade\[Locking\]
+Locking :
+ internally_locked\[OnOverflow\]
+ | OnOverflow
+OnOverflow:
+ return_error_value\[Coherency\]
+ | throw_on_error\[Coherency\]
+Coherency :
+ coherency\[SpecificCoherency\]
+ | OnRelease
+SpecificCoherency :
+ bitset\[OnRelease\]
+ | set\[OnRelease\]
+OnRelease:
+ delay\[Recoverable\]
+ | freeze\[Recoverable\]
+ | discard\[Counter\]
+Recoverable: recoverable\[Counter\]
+Counter: counter\[Storage\]
+Storage : storage\[SpecificStorage\]
+SpecificStorage :
+ raw\[Base\]
+ | shm\[Base\]
+ | mmfile\[Base\]
+Base: base\[Config\]
+Config: \[
+ numeric_type,
+ node_type,
+ header_type,
+ LUIDG
+ \]
+
+]
+
+[endsect]
+
+
+[section:generator Generator]
+
+[section:generator_parser DSL Parser]
+[endsect]
+
+[section:generator_assign_default Assign default values]
+[endsect]
+
+[section:generator_assemble_components Assemble components]
+
+[table Bottom
+[[mixin]]
+[[base\[Generator\]]]
+]
+
+[table Specific Storage Layer
+[[lifetime][mixin]]
+[[process][raw_storage\[Base\]]]
+[[kernel][shm_storage\[Base\]]]
+[[filesystem][mmfile_storage\[Base\]]]
+]
+
+[table Storage
+[[mixin]]
+[[storage\[SpecificStorage\]]]
+]
+
+[table OnRelease Layer
+[[on_release][when][how][mixin]]
+[[discard][-][-][Counter]]
+[[recover][immediate][fifo][Fifo]]
+[[recover][immediate][undefined][set\[Storage\]]]
+[[recover][delay][*][rec_fifo_delay\[Fifo\]]]
+[[recover][freeze][*][rec_fifo_freeze\[Fifo\]]]
+]
+
+[table Coherency Layer
+[[coherency][on_release][when][how][mixin]]
+[[ignore][-][-][-][OnRelease]]
+[[ensure][discard][-][-][coherency[bitset\[OnRelease\]]]
+[[ensure][recover][immediate][fifo][coherency[bitset\[OnRelease\]]]
+[[ensure][recover][immediate][undefined][OnRelease]]
+[[ensure][recover][delay][*][coherency[bitset\[OnRelease\]]]
+[[ensure][recover][freeze][*][coherency[bitset\[OnRelease\]]]
+]
+
+[table OnOverflow Layer
+[[on_overflow][mixin]]
+[[ignore_error][ignore_on_overflow\[Coherency\]]]
+[[errno_on_error][errno_on_on_overflow\[Coherency\]]]
+[[throw_on_error][throw_on_overflow\[Coherency\]]]
+[[user_error][user_on_overflow\[Coherency\]]]
+]
+
+[table OptIntLocking Layer
+[[scope][locking][mixin]]
+[[mono_threaded][-][OnOverflow]]
+[[multi_threaded][internally_locked][internally_locked\[OnOverflow\]]]
+[[multi_threaded][externally_locked][OnOverflow]]
+]
+
+[table OptExtLocking Layer
+[[scope][locking][mixin]]
+[[mono_threaded][-][Facade]]
+[[multi_threaded][internally_locked][Facade]]
+[[multi_threaded][externally_locked][externally_locked\[Facade\]]]
+]
+
+[endsect]
+
+[endsect]
+
+[section:reference Reference]
+
+[section:reference_macros Macros]
+[endsect]
+
+[section:reference_types Types]
+
+[section:reference_dsl DSL types]
+[section:reference_dsl_on_overflow on_overflow<>]
+
+The available actions are:
+
+[variablelist
+[ [throw_on_error<>] [Throws the std::overflow_error exception.] ]
+[ [errno_on_error<>] [Sets ::errno to ERANGE and returns std::numeric_limits<T>::infinity().] ]
+[ [ignore_error<>] [Returns std::numeric_limits<T>::infinity()] ]
+[ [user_error<OverflowErrorHandler>] [Calls a user-supplied overflow error handler.] ]
+]
+
+[endsect]
+[section:reference_dsl_on_release on_release<>]
+
+The available actions are:
+
+[variablelist
+[
+ [discard<>] [On release the luid is discarded.]
+]
+[
+ [recover<immediate<> >] [On release the luid is reusable immediatelly.]
+]
+[
+ [recover<delay<> >] [On release the luid is reusable after a given time (given at construction time).]
+]
+[
+ [recover<freeze<> >] [On release the luid is reusable once d luids have been reused (given at construction time).]
+]
+]
+[endsect]
+[section:reference_dsl_scope scope<>]
+[endsect]
+[section:reference_dsl_lifetime lifetime<>]
+[endsect]
+[section:reference_dsl_coherency coherency<>]
+[endsect]
+[section:reference_dsl_optimization optimization<>]
+[endsect]
+[section:reference_dsl_extension extension<>]
+[endsect]
+[endsect]
+
+[section:reference_iccl_mixins ICCL mixins]
+[section:reference_iccl_mixin Mixin Layers]
+[*Description]
+
+All the ICCL components are mixin layers that takes the following form:
+
+[c++]
+
+ template <typename LowerLayer>
+ struct Layer
+ {
+ typedef LowerLayer lower_layer;
+ typedef typename lower_layer::config config;
+ // node_type specialization
+ ...
+ // header_type specialization
+ ...
+ // type specialization
+ ...
+ };
+
+
+And have public types config, node_type, header_type and type.
+When a layer doesn't adds anything to a type the lower layer it defines the type as follows:
+[c++]
+
+ typedef typename lower_layer::config config;
+
+
+When the layer adds something to a type of the the lower layer for a type it defines the type as follows:
+[c++]
+
+ // header_type specialization
+ struct header_type : lower_layer::header_type
+ {
+ typedef typename lower_layer::header_type super_type;
+ ...
+ };
+
+
+There are two special layers, the bottom layer and the top layer.
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidMixinLayer..LuidMixinLayer]] ]
+[ [`ArgsParams`] [[concept_param argugent pack..LuidMixinLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+[ [`args`] [[concept_var ArgsParams]] ]
+[ [`alloc`] [[concept_var L::config::allocator_type&]] ]
+]
+
+[*Valid expressions]
+The following expressions must be valid.
+
+[table LuidMixinLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [`config`]
+ [`M<L>::config`]
+ [`Implementation defined`]
+ [The global configuration.]
+ ]
+ [
+ [`node_type`]
+ [`M<L>::node_type`]
+ [`Implementation defined`]
+ [the node type on this layer.]
+ ]
+ [
+ [`header_type`]
+ [`M<L>::header_type`]
+ [`Implementation defined`]
+ [the header type on this layer.]
+ ]
+ [
+ [`Header construction`]
+ [`M<L>::header_type(args, alloc)`]
+ [`M<L>::header_type`]
+ [header type must accept a constructor with a ArgsParams parameter.]
+ ]
+ [
+ [`type`]
+ [`M<L>::type`]
+ [`Implementation defined`]
+ [the luid type on this layer.]
+ ]
+ [
+ [`type construction`]
+ [`M<L>::type(args)`]
+ [`M<L>::type`]
+ [type must accept a constructor with a ArgsParams parameter.]
+ ]
+]
+
+[endsect]
+[section:reference_iccl_base Base Layer]
+[*Description]
+
+The bottom layer has the generator itself as parameter instead of the lower layer.
+It defines the bottom types for node_type, header_type and type.
+In addition it define a final function which gives the final instance for the luidg type.
+This layer is implemented only by the luid::iccl::base class, and it cannot be replaced.
+
+[*Refinement of]
+[link reference_iccl_mixin LuidMixinLayer]
+
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidBaseLayer..LuidBaseLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+]
+
+[*Valid expressions]
+In addition to the expressions defined in LuidMixinLayer, the following expressions must be valid.
+
+[table LuidBaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantic]]
+ ]
+ [
+ [final type]
+ [`L::final_type`]
+ [`Implementation defined`]
+ [the final type of the luid generator.]
+ ]
+ [
+ [final access]
+ [`l.final()`]
+ [`L::final_type&`]
+ [the final instance of the luid generator.]
+ ]
+]
+
+[endsect]
+
+[section:reference_iccl_specific_storage Specific Storage Layer]
+[*Description]
+
+This layer is responsable for the storage of the allocators, the header instantiation, and provides some allocation functions.
+
+[*Refinement of]
+LuidBaseLayer
+
+[concept_arg LowerLayer..LuidBaseLayer]
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidSpecificStorageLayer..LuidSpecificStorageLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+]
+
+[concept_valid_expressions LuidBaseLayer]
+
+[table LuidSpecificStorageLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [header access]
+ [`l.header()`]
+ [`L::header_type&`]
+ [the final instance of the luid generator.]
+ ]
+ [
+ [allocator]
+ [`l.allocator()`]
+ [`L::config::allocator_type&`]
+ [the allocator instance of the luid generator.]
+ ]
+]
+
+[endsect]
+[section:reference_iccl_storage Storage Layer]
+[*Description]
+This layer is responsable for the storage of the node allocators, and provides some node allocation functions.
+
+[*Refinement of]
+LuidSpecificStorageLayer
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidSpecificStorageLayer..LuidSpecificStorageLayer]] ]
+[ [`TPTR`] [[concept_param pointer..LuidSpecificStorageLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+[ [`t_ptr`] [[concept_var TPTR]] ]
+[ [`n`] [[concept_var L::config::node_pointer]] ]
+]
+
+[concept_valid_expressions LuidStorageLayer]
+
+[table LuidStorageLayer Valid expressions
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [generic allocation]
+ [`l.allocate<TPTR>()`]
+ [`TPTR`]
+ [allocates from the allocator the space for a type pointee<TPTR>.]
+ ]
+ [
+ [generic deallocation]
+ [`l.deallocate<TPTR>(t_ptr)`]
+ [`void`]
+ [deallocate a preceding allocate pointer.]
+ ]
+ [
+ [node allocation]
+ [`l.allocate()`]
+ [`L::config::node_pointer`]
+ [allocates from the node allocator a node_type.]
+ ]
+ [
+ [node deallocation]
+ [`l.deallocate(n)`]
+ [`void`]
+ [deallocate a preceding allocate node type pointer.]
+ ]
+]
+
+[endsect]
+[section:reference_iccl_counter Counter Layer]
+[*Description]
+
+This layer is responsable for the monotonic counter functions. It is really the bottom functional layer.
+
+[*Refinement of]
+LuidStorageLayer
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidSpecificStorageLayer..LuidSpecificStorageLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+[ [`n`] [[concept_var L::config::numeric_type]] ]
+]
+
+[concept_valid_expressions LuidStorageLayer]
+
+[table LuidCounterLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [count]
+ [`l.count()`]
+ [`L::config::numeric_type`]
+ [return the number of used luids]
+ ]
+ [
+ [lower_bound]
+ [`l.lower_bound()`]
+ [`L::config::numeric_type`]
+ [return the lower_bound of non recoverable luid ]
+ ]
+ [
+ [upper_bound]
+ [`l.upper_bound()`]
+ [`L::config::numeric_type`]
+ [return the upper_bound of non recoverable luid ]
+ ]
+ [
+ [resize_upper_bound]
+ [`l.resize_upper_bound(n)`]
+ [`L::config::numeric_type`]
+ [set the new upper bound if greater than the current counter and return the current upper_bound ]
+ ]
+ [
+ [make]
+ [`l.make()`]
+ [`L::config::numeric_type`]
+ [makes a new luid. This layer do not needs to take care of integrity]
+ ]
+ [
+ [release]
+ [`l.release(n)`]
+ [`void`]
+ [release a luid.]
+ ]
+ [
+ [clear]
+ [`l.clear()`]
+ [`void`]
+ [reinit the luid generator.]
+ ]
+]
+[endsect]
+[section:reference_iccl_on_release Release Layer]
+[*Description]
+
+This layer is responsable for the management of of released luid.
+
+[*Refinement of]
+LuidCounterLayer
+
+[*Notation]
+
+[variablelist
+[ [`L`] [[concept_param LuidSpecificStorageLayer..LuidSpecificStorageLayer]] ]
+[ [`l`] [[concept_var L::type]] ]
+[ [`n`] [[concept_var L::config::numeric_type]] ]
+]
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [count]
+ [`l.count()`]
+ [`L::config::numeric_type`]
+ [return the number of used luids]
+ ]
+ [
+ [make]
+ [`l.make()`]
+ [`L::config::numeric_type`]
+ [makes a new luid. This layer do not needs to take care of integrity]
+ ]
+ [
+ [release]
+ [`l.release(n)`]
+ [`void`]
+ [release a luid.]
+ ]
+ [
+ [clear]
+ [`l.clear()`]
+ [`void`]
+ [reinit the luid generator.]
+ ]
+]
+[endsect]
+[section:reference_iccl_recoverable Recoverable Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [count]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+
+[endsect]
+[section:reference_iccl_specific_coherency Specific Coherency Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [count]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+[endsect]
+[section:reference_iccl_coherency Coherency Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [`count function`]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+[endsect]
+[section:reference_iccl_on_overflow OnOverflow Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [`count function`]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+[endsect]
+[section:reference_iccl_locking Locking Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [`count function`]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+[endsect]
+[section:reference_iccl_facade Facade Layer]
+[*Description]
+
+
+
+[*Refinement of]
+
+
+[*Notation]
+
+* `M` denotes a LuidReleaseLayer,
+* `L` a LuidCounterLayer,
+* `l` is of type L<B>::type
+* `n` is of type M<B>::config::numeric_type
+
+[table LuidReleaseLayer Requirements
+ [
+ [[*Name]]
+ [[*Expression]]
+ [[*Return type]]
+ [[*Semantics]]
+ ]
+ [
+ [`count function`]
+ [`l.count()`]
+ [`M<B>::config::numeric_type`]
+ [return the number of used luids]
+ ]
+]
+[endsect]
+[endsect]
+
+[section:reference_iccl_term Other Implementation components]
+[endsect]
+[endsect]
+
+[endsect]
+
+[/
+[xinclude autodoc.xml]
+/]
+
+[section Appendices]
+
+[include history.qbk]
+
+[include rationale.qbk]
+
+[include implementation.qbk]
+
+[include acknowledgements.qbk]
+
+[include references.qbk]
+[endsect]
+

Added: sandbox/luid/libs/luid/doc/rationale.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/rationale.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,31 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:rationale Appendix B: Rationale]
+
+[/==================================================]
+[section:parameter_expression Parameters expressions]
+[/==================================================]
+
+TODO
+[endsect]
+
+[/===============================]
+[section:genvoca Genvoca grammars]
+[/===============================]
+
+TODO
+[endsect]
+
+[/=========================================================]
+[section:generator_ Gennerator]
+[/=========================================================]
+
+TODO
+[endsect]
+
+[endsect]

Added: sandbox/luid/libs/luid/doc/references.qbk
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/doc/references.qbk 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,17 @@
+[/
+ / Copyright (c) 2008 Vicente J. Botet Escriba
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:ext_references Appendix E: References]
+
+[variablelist References
+[
+ [Generative Programming: Methods, Tools, and Applications]
+ [K. Czarnecki, U.W. Eisenecker.]
+]
+]
+
+[endsect]

Added: sandbox/luid/libs/luid/test/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/Jamfile.v2 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,113 @@
+#
+# Boost.LUID
+# Build script for tests.
+#
+# Copyright (c) 2008 Vicente J. Botet Escriba]
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+using testing ;
+
+if ! $(BOOST_ROOT)
+{
+ BOOST_ROOT = [ modules.peek : BOOST_ROOT ] ;
+}
+
+project :
+ : requirements
+ <include>$(BOOST_ROOT)
+ <include>../../..
+ <include>../../../../mpl_ext
+ <include>../../../../parameter_ext
+ <include>/boost_1_39_0
+
+ <threading>multi
+# <target-os>cygwin
+# <threadapi>pthread
+# <variant>debug
+
+ #<define>BOOST_TEST_BUILD_INFO
+ #<library>/boost/thread//boost_thread/<link>static
+ #<library>/boost/test//boost_unit_test_framework/<link>static
+ <library>/boost_1_39_0/libs/test/build//boost_unit_test_framework/<link>static
+ <library>/boost_1_39_0/libs/thread/build//boost_thread/<link>static
+;
+
+test-suite luid_inclusion :
+ [ compile inclusion/dsl/include_thread_model.cpp : : ]
+ [ compile inclusion/dsl/include_error_handling.cpp : : ]
+
+ #[ compile inclusion/dsl/include_coherency.cpp : : ]
+ #[ compile inclusion/dsl/include_numeric_type.cpp : : ]
+ #[ compile inclusion/dsl/include_on_release.cpp : : ]
+ #[ compile inclusion/dsl/include_scope.cpp : : ]
+ #[ compile inclusion/dsl/include_lifetime.cpp : : ]
+ #[ compile inclusion/dsl/include_on_overflow.cpp : : ]
+ #[ compile inclusion/dsl/include_optimization.cpp : : ]
+
+ #[ compile inclusion/iccl/include_timestamped.cpp : : ]
+ #[ compile inclusion/iccl/include_thread_locking_traits.cpp : : ]
+ #[ compile inclusion/iccl/include_backdoor.cpp : : ]
+ #[ compile inclusion/iccl/include_base.cpp : : ]
+ #[ compile inclusion/iccl/include_coherency_bitset.cpp : : ]
+ #[ compile inclusion/iccl/include_constructor.cpp : : ]
+ #[ compile inclusion/iccl/include_counter.cpp : : ]
+ #[ compile inclusion/iccl/include_externally_locked.cpp : : ]
+ #[ compile inclusion/iccl/include_facade.cpp : : ]
+ #[ compile inclusion/iccl/include_fifo..cpp : : ]
+ #[ compile inclusion/iccl/include_internally_locked.cpp : : ]
+ #[ compile inclusion/iccl/include_on_overflow.cpp : : ]
+ #[ compile inclusion/iccl/include_rec_fifo_delay.cpp : : ]
+ #[ compile inclusion/iccl/include_rec_fifo_freeze.cpp : : ]
+ #[ compile inclusion/iccl/include_iccl_set.cpp : : ]
+ #[ compile inclusion/iccl/include_storage.cpp : : ]
+
+ #[ compile inclusion/include_iccl.cpp : : ]
+ #[ compile inclusion/include_dsl.cpp : : ]
+ #[ compile inclusion/include_generator.cpp : : ]
+
+
+;
+
+test-suite luid_monothreaded :
+ [ run default_luidg.cpp ]
+ [ run luidg_unsigned_char.cpp ]
+ [ run luidg_unsigned_int_recove_undefined.cpp ]
+ [ run luidg_recover_immediate.cpp ]
+ [ run luidg_recover_delay.cpp ]
+ [ run luidg_unsigned_short_recover_delay_throw_on_error.cpp ]
+ [ run luidg_recover_fifo_throw_on_error.cpp ]
+ [ run luidg_throw_on_error.cpp ]
+ [ run luidg_check.cpp ]
+# [ run luidg_check.cpp : --BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS=yes --BOOST_TEST_LOG_FORMAT=HRF -- BOOST_TEST_LOG_LEVEL=all]
+ ;
+
+test-suite luid_multithreaded :
+ [ run multi_threaded_internally_locked_process_traits.cpp ]
+ [ run multi_threaded_externally_locked_process_traits.cpp ]
+
+ ;
+
+test-suite luid_multiprocess :
+ [ run multi_process.cpp ]
+ [ run multi_process_externally_locked.cpp ]
+ [ run multi_process_internally_locked.cpp ]
+ ;
+
+test-suite luid_kernel :
+ [ run luidg_discard_kernel.cpp ]
+ ;
+
+test-suite luid_filesystem :
+# [ run luidg_.cpp ]
+ ;
+
+test-suite "compile_fail_test" :
+ [ compile-fail compile_fail/luidg_multi_process_externally_locked.cpp ]
+ ;
+
+test-suite "examples" :
+# [ compile ../example/vector_constainer.cpp : : ]
+# [ run ../example/ ]
+ ;
+
\ No newline at end of file

Added: sandbox/luid/libs/luid/test/compile_fail/luidg_multi_process_externally_locked.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/compile_fail/luidg_multi_process_externally_locked.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,34 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#include <boost/luid/generator.hpp>
+using namespace boost;
+namespace bip =boost::interprocess;
+namespace bdsl =boost::dsl;
+
+//____________________________________________________________________________//
+
+int test {
+ bip::interprocess_mutex mutex;
+ bip::scoped_lock<bip::interprocess_mutex> lock(mutex);
+ luid::make_luidg<
+ bluid::dsl::multi_process<
+ bluid::dsl::externally_locked<>
+ >
+ >::type luidg( _high=10, _ext_mtx=mutex );
+
+ luidg.clear();
+ luidg.release(luidg.make());
+ luidg.set_upper_bound(luidg.upper_bound());
+ luidg.set_upper_bound(luidg.lower_bound());
+ luidg.set_upper_bound(luidg.count());
+ luidg.set_upper_bound(luidg.error());
+}
+
+//____________________________________________________________________________//
+

Added: sandbox/luid/libs/luid/test/default_luidg.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/default_luidg.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,63 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_default
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::luidg<> luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_default, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( discard )
+{
+ test_discard(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/expr_pp_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/expr_pp_test.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,13 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#include "boost/dsl/expr.hpp"
+
+
+
+// EOF

Added: sandbox/luid/libs/luid/test/inclusion/dsl/include_error_handling.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/inclusion/dsl/include_error_handling.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,18 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#include <boost/dsl/error_handling.hpp>
+
+namespace bldsl = ::boost::dsl;
+
+// ------------------------------------------------------------------------
+
+void
+test_dsl_error_handling(void)
+{
+}

Added: sandbox/luid/libs/luid/test/inclusion/dsl/include_thread_model.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/inclusion/dsl/include_thread_model.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,51 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#include <boost/dsl/thread_model.hpp>
+
+#include <boost/static_assert.hpp>
+
+namespace bldsl = ::boost::dsl;
+
+// ------------------------------------------------------------------------
+
+
+
+BOOST_STATIC_ASSERT((
+ bldsl::is_externally_locked<bldsl::externally_locked<> >::value
+));
+BOOST_STATIC_ASSERT((
+ bldsl::is_internally_locked<bldsl::internally_locked<> >::value
+));
+BOOST_STATIC_ASSERT((
+ bldsl::is_no_locking<bldsl::no_locking<> >::value
+));
+BOOST_STATIC_ASSERT((
+ bldsl::is_mono_threaded<bldsl::mono_threaded<> >::value
+));
+BOOST_STATIC_ASSERT((
+ bldsl::is_multi_threaded<bldsl::multi_threaded<> >::value
+));
+
+BOOST_STATIC_ASSERT((
+ bldsl::is_multi_process<bldsl::multi_process<> >::value
+));
+
+
+
+void
+test_dsl_thread_model(void)
+{
+ typedef bldsl::externally_locked<>::locking_traits l1;
+ typedef bldsl::internally_locked<>::locking_traits l2;
+ typedef bldsl::no_locking<>::locking_traits l3;
+
+ typedef bldsl::mono_threaded<>::locking_strategy l4;
+ typedef bldsl::multi_threaded<>::locking_strategy l5;
+ typedef bldsl::multi_process<>::locking_strategy l6;
+}

Added: sandbox/luid/libs/luid/test/luidg_check.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_check.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,68 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_check
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ bluid::luidg<bluid::dsl::ensure<> > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+
+BOOST_FIXTURE_TEST_SUITE( luidg_check, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( check )
+{
+ test_check(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( discard )
+{
+ test_discard(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_discard_kernel.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_discard_kernel.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,64 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_discard_kernel
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::generator<luid::dsl::luidg<bluid::dsl::discard<>, bluid::dsl::kernel<> > >::type luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i, _shm_name="ab", _shm_size=10000 ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_discard_kernel, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( discard )
+{
+ test_discard(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_recover_delay.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_recover_delay.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,63 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_recover_delay
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::luidg<bluid::dsl::recover<bluid::dsl::delay<> > > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_recover_delay, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( delay )
+{
+ test_delay(this->luidg,1);
+}
+
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_recover_fifo_throw_on_error.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_recover_fifo_throw_on_error.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,71 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_recover_fifo_throw_on_error
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ typedef bluid::dsl::luidg<bluid::dsl::recover<bluid::dsl::fifo<> >
+ , bluid::dsl::throw_on_error<> > type;
+ BOOST_STATIC_ASSERT((boost::luid::dsl::is_on_overflow<bluid::dsl::throw_on_error<> >::value));
+ BOOST_STATIC_ASSERT((boost::luid::dsl::is_throw_on_error<type::on_overflow>::value));
+ BOOST_STATIC_ASSERT((!boost::luid::dsl::is_discard<type::on_release>::value));
+
+ bluid::luidg<bluid::dsl::recover<bluid::dsl::fifo<> >
+ , bluid::dsl::throw_on_error<> > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+
+BOOST_FIXTURE_TEST_SUITE( luidg_recover_fifo_throw_on_error, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow_throw(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( fifo )
+{
+ test_fifo(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_recover_immediate.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_recover_immediate.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,67 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_recover_immediate
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::luidg<bluid::dsl::recover<bluid::dsl::immediate<> > > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_recover_immediate, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( inmediate )
+{
+ test_inmediate(this->luidg);
+}
+
+BOOST_AUTO_TEST_CASE( fifo )
+{
+ test_fifo(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_throw_on_error.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_throw_on_error.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,57 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_throw_on_error
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ bluid::luidg<bluid::dsl::throw_on_error<> > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_throw_on_error, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow_throw(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_unsigned_char.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_unsigned_char.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,54 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_unsigned_char
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ luid::luidg<bluid::dsl::dynamic_lower_bound<unsigned char> > luidg;
+ LUIDG()
+ : luidg( _low=0 ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_unsigned_char, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_unsigned_int_recove_undefined.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_unsigned_int_recove_undefined.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,57 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_unsigned_int_recover_undefined
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::luidg<bluid::dsl::static_lower_bound<unsigned int>, bluid::dsl::recover<bluid::dsl::undefined<> > > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_unsigned_int_recover_undefined, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/luidg_unsigned_short_recover_delay_throw_on_error.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/luidg_unsigned_short_recover_delay_throw_on_error.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,64 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_unsigned_short_recover_delay_throw_on_error
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ bluid::luidg<bluid::dsl::static_lower_bound<unsigned short>, bluid::dsl::recover<bluid::dsl::delay<> >
+ , bluid::dsl::throw_on_error<> > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( luidg_unsigned_short_recover_delay_throw_on_error, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow_throw(this->luidg);
+}
+
+#if 0
+BOOST_AUTO_TEST_CASE( delay )
+{
+ test_delay(this->luidg,1);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+#endif
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/multi_process.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/multi_process.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,43 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_multi_process
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ int i;
+ luid::luidg<bluid::dsl::multi_process<> > luidg;
+
+ LUIDG()
+ : i(10)
+ , luidg( _high=i ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( default_luidg, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/multi_process_externally_locked.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/multi_process_externally_locked.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,58 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_multi_process_externally_locked
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ bip::interprocess_mutex mutex;
+ bip::scoped_lock<bip::interprocess_mutex> lock;
+ luid::make_luidg<bluid::dsl::multi_process<bluid::dsl::externally_locked<> > >::type luidg;
+
+ LUIDG()
+ : mutex(), lock(mutex)
+ , luidg( _high=10, _ext_mtx=mutex ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( multi_process_externally_locked, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg.get(lock));
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg.get(lock));
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg.get(lock), 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg.get(lock), 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg.get(lock), 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/multi_process_internally_locked.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/multi_process_internally_locked.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,53 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_multi_process_internally_locked
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ luid::make_luidg<bluid::dsl::multi_process<bluid::dsl::internally_locked<> > >::type luidg;
+
+ LUIDG()
+ : luidg( _high=10 ) {
+ }
+ ~LUIDG() {
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( multi_process_externally_locked, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/multi_threaded_externally_locked_process_traits.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/multi_threaded_externally_locked_process_traits.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,58 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_multi_threaded_externally_locked_process_traits
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ bip::interprocess_mutex mutex;
+ bip::scoped_lock<bip::interprocess_mutex> lock;
+ luid::make_luidg<bluid::dsl::multi_threaded<bluid::dsl::externally_locked<bluid::iccl::process_locking_traits> > >::type luidg;
+
+ LUIDG()
+ : mutex(), lock(mutex)
+ , luidg( _high=10, _ext_mtx=mutex ) {
+// BOOST_TEST_MESSAGE( "setup fixture" );
+ }
+ ~LUIDG() {
+// BOOST_TEST_MESSAGE( "teardown fixture" );
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( multi_process_externally_locked, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg.get(lock));
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg.get(lock));
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg.get(lock), 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg.get(lock), 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg.get(lock), 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/multi_threaded_internally_locked_process_traits.cpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/multi_threaded_internally_locked_process_traits.cpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,57 @@
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#define BOOST_TEST_MODULE luidg_multi_threaded_internally_locked_process_tratis
+#include "test.hpp"
+
+//____________________________________________________________________________//
+
+struct LUIDG {
+ luid::make_luidg<
+ bluid::dsl::multi_threaded<
+ bluid::dsl::internally_locked<bluid::iccl::process_locking_traits>
+ >
+ >::type luidg;
+
+ LUIDG()
+ : luidg( _high=10 ) {
+ }
+ ~LUIDG() {
+ }
+
+};
+BOOST_FIXTURE_TEST_SUITE( multi_process_externally_locked, LUIDG )
+
+BOOST_AUTO_TEST_CASE( unique )
+{
+ test_unique(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( overflow )
+{
+ test_overflow(this->luidg);
+}
+BOOST_AUTO_TEST_CASE( resize_gt )
+{
+ test_resize(this->luidg, 5, 20);
+}
+
+BOOST_AUTO_TEST_CASE( resize_btw )
+{
+ test_resize(this->luidg, 5, 8);
+}
+
+BOOST_AUTO_TEST_CASE( resize_lt )
+{
+ test_resize(this->luidg, 5, 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+//____________________________________________________________________________//
+
+// EOF

Added: sandbox/luid/libs/luid/test/test.hpp
==============================================================================
--- (empty file)
+++ sandbox/luid/libs/luid/test/test.hpp 2009-06-28 15:33:29 EDT (Sun, 28 Jun 2009)
@@ -0,0 +1,194 @@
+#ifndef BOOST_LUID_TEST_TEST_HPP_
+#define BOOST_LUID_TEST_TEST_HPP_
+
+/* Copyright 2008 Vicente J. Botet Escriba
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/luid for library home page.
+ */
+
+#include "boost/luid/generator.hpp"
+#include <boost/test/unit_test.hpp>
+#include <set>
+
+using namespace boost;
+using namespace boost::mpl;
+namespace bip =boost::interprocess;
+namespace bdsl =boost::luid::dsl;
+
+namespace bluid = boost::luid;
+
+template <typename G>
+void test_inmediate(G& g) {
+ typename G::numeric_type id1= g.make();
+ g.release(id1);
+ typename G::numeric_type id2= g.make();
+ BOOST_CHECK(id1==id2);
+ g.clear();
+}
+
+template <typename G>
+void test_fifo(G& g) {
+ typename G::numeric_type id1= g.make();
+ typename G::numeric_type id2= g.make();
+ typename G::numeric_type id3= g.make();
+ g.release(id2);
+ g.release(id3);
+ g.release(id1);
+ typename G::numeric_type id4= g.make();
+ BOOST_CHECK(id4==id2);
+ typename G::numeric_type id5= g.make();
+ BOOST_CHECK(id5==id3);
+ typename G::numeric_type id6= g.make();
+ BOOST_CHECK(id6==id1);
+ g.clear();
+}
+
+template <typename G>
+void test_resize(G& g, unsigned int d, unsigned int u) {
+ typename G::numeric_type i;
+ for (i =g.lower_bound(); i<d; ++i) {
+ BOOST_CHECK(g.make()!=g.error());
+ }
+ std::cout << "test_resize # " << d << std::endl;
+ g.set_upper_bound(u);
+ std::cout << "test_resize # " << g.upper_bound() << std::endl;
+ for (;i<g.upper_bound(); ++i) {
+ BOOST_CHECK(g.make()!=g.error());
+ }
+ std::cout << "test_resize # " << u << std::endl;
+// BOOST_CHECK(g.make()==g.error());
+ g.clear();
+}
+
+template <typename G, typename D>
+void test_delay(G& g, D d) {
+// std::cout << "T." <<++i<< " test_delay " << std::endl;
+ typename G::numeric_type id1= g.make();
+ g.release(id1);
+// std::cout << "test_delay # " << g.count() << std::endl;
+ typename G::numeric_type id2= g.make();
+ BOOST_CHECK(id1!=id2);
+// thread::sleep(boost::posix_time::second_clock::local_time()+posix_time::time_duration(0,0,d,0));
+ sleep(d);
+ typename G::numeric_type id3= g.make();
+ BOOST_CHECK(id1==id3);
+// std::cout << "test_delay # " << g.count() << std::endl;
+ g.clear();
+// g.release(id2);
+// g.release(id3);
+}
+
+template <typename G>
+void test_unique(G& g) {
+// std::cout << "T." <<++i<< " test_unique " << std::endl;
+
+// typedef std::set<> used_type;
+ typedef std::set<typename G::numeric_type> used_type;
+ used_type used;
+ typename G::numeric_type id;
+ for (typename G::numeric_type i =g.lower_bound(); i<g.upper_bound(); ++i) {
+ id=g.make();
+ if(id==g.error()) {
+ std::cout << "FAIL " << __LINE__ << std::endl;
+ BOOST_FAIL("unique");
+ }
+// std::cout << "SUCCEED " << id << std::endl;
+ BOOST_CHECK(used.count(id)==0);
+ used.insert(id);
+ }
+// std::cout << "inserted test_unique " << std::endl;
+// for (typename used_type::iterator it2=used.begin(), e=used.upper_bound()
+// ; it2!=e
+// ; ++it2) {
+// g.release(*it2);
+// }
+// std::cout << "END test_unique " << std::endl;
+ g.clear();
+}
+
+template <typename G>
+void test_overflow(G& g) {
+// std::cout << "T." <<++i<< " test_overflow " << std::endl;
+ typename G::numeric_type i;
+ typename G::numeric_type id;
+// std::cout << "make test_overflow " << int(g.upper_bound()) << std::endl;
+ for (i =g.lower_bound(); i<g.upper_bound(); ++i) {
+ id =g.make();
+ if(id==g.error()) {
+ std::cout << "FAIL " << __LINE__ << std::endl;
+ BOOST_FAIL("overflow");
+ }
+// std::cout << "SUCCED " << __LINE__ << std::endl;
+
+ }
+// std::cout << "check test_overflow " << std::endl;
+ for (i =0; i<10; ++i) {
+ BOOST_CHECK(g.make()==g.error());
+ }
+// std::cout << "end test_overflow " << std::endl;
+ g.clear();
+}
+
+template <typename G>
+void test_discard(G& g) {
+// std::cout << "T." <<++i<< " test_overflow " << std::endl;
+ typename G::numeric_type i;
+ typename G::numeric_type id;
+// std::cout << "make test_overflow " << int(g.upper_bound()) << std::endl;
+ for (i =g.lower_bound(); i<g.upper_bound(); ++i) {
+ id =g.make();
+ if(id==g.error()) {
+ std::cout << "FAIL " << __LINE__ << std::endl;
+ BOOST_FAIL("overflow");
+ }
+// std::cout << "SUCCED " << __LINE__ << std::endl;
+
+ }
+ g.release(id);
+
+ typename G::numeric_type id2= g.make();
+ BOOST_CHECK(id2==g.error());
+
+ g.clear();
+}
+
+
+template <typename G>
+void test_overflow_throw(G& g) {
+// std::cout << "T." <<++i<< " test_overflow_throw " << std::endl;
+ typename G::numeric_type i;
+ std::cout << "L=" <<g.lower_bound()<< " U=" << g.upper_bound() << std::endl;
+ for (i =g.lower_bound(); i<g.upper_bound(); ++i) {
+ typename G::numeric_type r= g.make();
+ }
+ for (i =0; i<10; ++i) {
+ try {
+ typename G::numeric_type r= g.make();
+ std::cout << "r=" <<r<<std::endl;
+ BOOST_CHECK(false);
+ } catch(...) {
+ }
+ }
+}
+
+template <typename G>
+void test_check(G& g) {
+// std::cout << "T." <<++i<< " test_check " << std::endl;
+ typename G::numeric_type id1= g.make();
+ g.release(id1);
+// std::cout << "test_check2 " << std::endl;
+
+ try {
+ g.release(id1);
+ BOOST_CHECK(false);
+ } catch(...) {
+ }
+// std::cout << "test_check # " << g.count() << std::endl;
+
+ g.clear();
+}
+
+#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