Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64649 - in sandbox/statistics/support/boost/assign/v2: . anon chain chain/aux chain/checking chain/traits detail detail/checking detail/config detail/functor detail/fwd detail/keyword detail/mpl detail/relational_op detail/type_traits detail/type_traits/container put put/modifier put/range put/range/modifier put/wrapper ref ref/anon ref/anon/csv ref/anon/detail ref/anon/functor ref/anon/generic ref/detail ref/detail/convert_traits ref/detail/fusion_list ref/detail/unwrap ref/wrapper
From: erwann.rogard_at_[hidden]
Date: 2010-08-06 15:35:30


Author: e_r
Date: 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
New Revision: 64649
URL: http://svn.boost.org/trac/boost/changeset/64649

Log:
Adding /boost/assign/v2
Added:
   sandbox/statistics/support/boost/assign/v2/
   sandbox/statistics/support/boost/assign/v2/anon/
   sandbox/statistics/support/boost/assign/v2/anon/anon.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/anon/cont.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/anon/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/
   sandbox/statistics/support/boost/assign/v2/chain/aux/
   sandbox/statistics/support/boost/assign/v2/chain/aux/adaptor.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/aux/bitwise_or.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/aux/logical_and.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/aux/sub.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/chain.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/checking/
   sandbox/statistics/support/boost/assign/v2/chain/checking/distinct_values.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/checking/twin_values.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/traits/
   sandbox/statistics/support/boost/assign/v2/chain/traits/iterator.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/traits/range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/traits/result.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/chain/traits/use_lvalue.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/
   sandbox/statistics/support/boost/assign/v2/detail/checking/
   sandbox/statistics/support/boost/assign/v2/detail/checking/array.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/assert.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/check_equal.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/constants.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/container.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/deduce_check.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/fifo.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/iterator.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/lifo.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/checking/relational_op.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/config/
   sandbox/statistics/support/boost/assign/v2/detail/config/arity_bound.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/config/borland_workaround.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/config/enable_cpp_0x.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/detail.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/functor/
   sandbox/statistics/support/boost/assign/v2/detail/functor/constructor.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/functor/functor.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/functor/identity.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/fwd/
   sandbox/statistics/support/boost/assign/v2/detail/fwd/container.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/fwd/fwd.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/
   sandbox/statistics/support/boost/assign/v2/detail/keyword/deduce.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/fun.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/keyword.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/lookup.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/nil.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/repeat.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/keyword/unwrap.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/mpl/
   sandbox/statistics/support/boost/assign/v2/detail/mpl/always.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/mpl/mpl.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/mpl/switch.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/relational_op/
   sandbox/statistics/support/boost/assign/v2/detail/relational_op/crtp.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/relational_op/relational_op.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/container.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_push.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_static_size.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_fifo.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_lifo.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_map.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_sorted.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_static_array.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/value.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/decay.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/has_value_type.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/is_stl_pair.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/meta_convert.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/type_traits.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/detail/type_traits/value.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/
   sandbox/statistics/support/boost/assign/v2/put/modifier/
   sandbox/statistics/support/boost/assign/v2/put/modifier/at_next.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/deduce.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/def.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/incr_lookup.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/insert.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/keyword.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/modifier.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/push.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/push_back.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/modifier/repeat.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/put.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/
   sandbox/statistics/support/boost/assign/v2/put/range/adaptor.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/convert.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/copy.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/deduce.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/modifier.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/put.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/modifier/range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/range/range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/wrapper/
   sandbox/statistics/support/boost/assign/v2/put/wrapper/crtp.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/wrapper/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/wrapper/wrapper.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/
   sandbox/statistics/support/boost/assign/v2/ref/anon/
   sandbox/statistics/support/boost/assign/v2/ref/anon/anon.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_copy.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_rebind.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_xxx.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/csv.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/nth_result_of.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/csv/pp.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc_fwd.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/interface.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_copy.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_rebind.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_xxx.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/functor.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/functor/nth_result_of.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/cont.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/fwd.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/generic.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/nth_result_of.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/policy.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/anon/generic/traits.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/add_const.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/checking.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/distinct_values.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/result.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/twin_values.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/assign_array.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/container.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fusion_list.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fwd.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/make.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/
   sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/iterator.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/range.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/reference.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/ref.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/base.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/copy.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/crtp.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/framework.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/rebind.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/ref/wrapper/wrapper.hpp (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/v2.hpp (contents, props changed)

Added: sandbox/statistics/support/boost/assign/v2/anon/anon.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/anon/anon.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_ANON_ANON_ER_2010_HPP
+#define BOOST_ASSIGN_V2_ANON_ANON_ER_2010_HPP
+
+#include <boost/assign/v2/anon/cont.hpp>
+#include <boost/assign/v2/anon/make.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/anon/cont.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/anon/cont.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,173 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_ANON_CONT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_ANON_CONT_ER_2010_HPP
+#include <deque>
+#include <boost/range/iterator.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/size.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/iterator_range.hpp> //iterator_range_detail::
+#include <boost/assign/v2/put/put.hpp>
+#include <boost/assign/v2/put/range/range.hpp>
+#include <boost/assign/v2/detail/relational_op/relational_op.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace anon_aux{
+
+ template<typename T>
+ struct impl{ typedef std::deque<T> type; };
+
+ template<typename T,typename F,typename Tag>
+ class cont;
+
+ template<typename T,typename F,typename Tag>
+ struct cont_modifier_traits
+ {
+ template<typename Tag1>
+ struct new_tag{
+ typedef cont<T,F,Tag1> type;
+ };
+ template<typename F1>
+ struct new_fun{
+ typedef cont<T,F1,Tag> type;
+ };
+
+ template<typename F1,typename Tag1>
+ struct new_fun_tag{
+ typedef cont<T,F1,Tag1> type;
+ };
+ };
+
+
+ template<typename T,typename F,typename Tag>
+ class cont :
+ public relational_op_aux::crtp< cont<T,F,Tag> >,
+ public put_aux::crtp<
+ typename anon_aux::impl<T>::type, F, Tag,
+ cont<T,F,Tag>,
+ cont_modifier_traits<T,F,Tag>
+ >
+ {
+ typedef typename anon_aux::impl<T>::type impl_;
+ typedef cont_modifier_traits<T,F,Tag> modifier_traits_;
+ typedef put_aux::crtp< impl_, F, Tag, cont, modifier_traits_> put_crtp_;
+
+ public:
+
+ typedef T value_type;
+ typedef typename boost::range_size<impl_>::type size_type;
+ typedef typename boost::range_iterator<impl_>::type iterator;
+ typedef typename boost::range_iterator<
+ const impl_>::type const_iterator;
+
+ // Construct
+ cont(){}
+ explicit cont(const F& f) : put_crtp_( f ){}
+ explicit cont(impl_ const& v, const F& f): put_crtp_( f ), impl( v )
+ {
+ // Required by crtp when Tag or F is modified.
+ // Note : unlike put_aux::derived, cont is copied.
+ // Order of initialization is put_crtp_ then cont.
+ }
+
+ // Deque interface
+ iterator begin(){
+ return boost::begin( this->impl );
+ }
+ iterator end(){
+ return boost::end( this->impl );
+ }
+ const_iterator begin()const{
+ return boost::begin( this->impl );
+ }
+ const_iterator end()const{
+ return boost::end( this->impl );
+ }
+
+ typedef typename impl_::reference reference;
+ typedef typename impl_::const_reference const_reference;
+ typedef typename impl_::difference_type difference_type;
+
+ size_type size()const{
+ return this->unwrap().size();
+ }
+ size_type max_size()const{
+ return this->unwrap().max_size();
+ }
+ bool empty()const{
+ return this->unwrap().empty();
+ }
+ reference operator[](size_type n){
+ return this->unwrap()[n];
+ }
+ const_reference operator[](size_type n)const{
+ return this->unwrap()[n];
+ }
+ reference front(){
+ return this->unwrap().front();
+ }
+ const_reference front()const{
+ return this->unwrap().front();
+ }
+ reference back(){
+ return this->unwrap().back();
+ }
+ const_reference back()const{
+ return this->unwrap().back();
+ }
+ void pop_front(){
+ this->unwrap().pop_front();
+ }
+ void pop_back(){
+ this->unwrap().pop_back();
+ }
+ void swap(cont& that){
+ this->unwrap().swap( that.unwrap() );
+ }
+
+ // Note : the modifiers such as push_back() are ommitted as they
+ // accessible through the put interface.
+
+ // Convert
+
+ BOOST_ASSIGN_V2_CONVERT_CONVERT_MF
+ BOOST_ASSIGN_V2_CONVERT_OPERATOR_MF
+
+ impl_& unwrap()const{ return this->impl; }
+
+ // Relational op
+
+ template<typename R>
+ bool equal_to(const R& r)const{
+ return ::boost::iterator_range_detail::equal(
+ (*this), r );
+ }
+
+ template<typename R>
+ bool less_than(const R& r)const{
+ return ::boost::iterator_range_detail::less_than(
+ (*this), r );
+ }
+
+ protected:
+ mutable impl_ impl;
+
+ };
+
+}// anon_aux
+}// v2
+}// assign
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/anon/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/anon/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,63 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_ANON_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_ANON_MAKE_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/assign/v2/detail/keyword/nil.hpp>
+#include <boost/assign/v2/anon/cont.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace result_of{
+
+ template<typename T>
+ struct anon
+ {
+ typedef typename boost::remove_cv<T>::type t_;
+ typedef typename anon_aux::impl<t_>::type cont_;
+ typedef result_of::put<cont_> traits_;
+ typedef typename traits_::f_ f_;
+ typedef typename traits_::put_tag_ put_tag_;
+ typedef anon_aux::cont<t_,f_,put_tag_> type;
+ };
+
+}// result_of
+
+ template<typename T>
+ typename result_of::anon<T>::type
+ anon( keyword_aux::nil )
+ {
+ typedef typename result_of::anon<T>::type result_;
+ return result_();
+ }
+
+ template<typename T>
+ typename result_of::anon<T>::type
+ anon( T& t )
+ {
+ return anon<T>( v2::_nil )( t );
+ }
+
+ template<typename T>
+ typename result_of::anon<T const>::type
+ anon( T const& t )
+ {
+ return anon<T>( v2::_nil )( t );
+ }
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/aux/adaptor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/aux/adaptor.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,64 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_ADAPTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_ADAPTOR_ER_2010_HPP
+#include <boost/mpl/void.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_aux{
+
+ typedef boost::mpl::void_ void_;
+
+ // Tag1 controls conversion. Seet type_traits/meta_convert.hpp
+
+ template<typename U,typename Tag1 = use_default,typename Tag2 = void_>
+ struct adaptor1
+ {
+ adaptor1( U& r ) : value( r ){}
+ mutable U& value;
+ };
+
+ template<
+ typename Tag1 = use_default,
+ typename Tag2 = void_
+ >
+ struct adaptor2
+ {
+
+ adaptor2(){}
+
+ template<typename U>
+ struct result{
+ typedef chain_aux::adaptor1<U, Tag1, Tag2> type;
+ static type call(U& u){ return type( u ); }
+ };
+
+ template<typename R>
+ typename result<R>::type
+ operator()(R& r)const{
+ return result<R>::call ( r );
+ }
+
+ template<typename R>
+ typename result<R const>::type
+ operator()(R const& r)const{
+ return result<R const>::call( r );
+ }
+
+ };
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/aux/bitwise_or.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/aux/bitwise_or.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,64 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Manuel Peinado Gallego //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_BITWISE_OR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_BITWISE_OR_ER_2010_HPP
+#include <boost/mpl/void.hpp>
+#include <boost/assign/v2/chain/aux/adaptor.hpp>
+#include <boost/assign/v2/chain/traits/result.hpp>
+#include <boost/assign/v2/chain/aux/sub.hpp>
+
+// Design:
+// - The original design is boost::chain in RangeEx
+// - ER modified as follows:
+// - sets the underlying iterator's Reference to one which both inputs are
+// convertible to.
+// - Constness is determined by that of the elements in each range, not that
+// of the range.
+// - Finally, MPG proposed a way to compose chains http://gist.github.com/287791
+// and a variant of it is used below.
+
+namespace boost{
+namespace assign{
+namespace v2{
+//namespace adaptor{
+namespace{
+ const chain_aux::adaptor2<> _chain = chain_aux::adaptor2<>();
+}
+//}// adaptor
+namespace result_of{
+
+ template<typename R1, typename R2, typename Tag = use_default>
+ struct chain : chain_aux::result<R1,R2,Tag>{};
+
+}// result_of
+namespace chain_aux{
+
+#define BOOST_ASSIGN_V2_FRAMEWORK_CHAIN(U1) \
+ template<typename R1,typename U2,typename Tag> \
+ typename chain_aux::result<U1, U2, Tag>::type \
+ operator|(U1& r1, chain_aux::adaptor1<U2, Tag> const & h) \
+ { \
+ typedef chain_aux::result<U1, U2, Tag> caller_; \
+ return chain_aux::make_sub( caller_::call( r1, h.value ) ); \
+ } \
+\
+/**/
+
+BOOST_ASSIGN_V2_FRAMEWORK_CHAIN(R1 )
+BOOST_ASSIGN_V2_FRAMEWORK_CHAIN(R1 const)
+#undef BOOST_ASSIGN_V2_FRAMEWORK_CHAIN
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/aux/logical_and.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/aux/logical_and.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,43 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_FUNCTION_LOGICAL_AND_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_FUNCTION_LOGICAL_AND_ER_2010_HPP
+#include <boost/assign/v2/chain/aux/bitwise_or.hpp>
+#include <boost/assign/v2/chain/traits/result.hpp>
+
+// This is an alternative syntax for chaining
+
+namespace boost{
+namespace assign{
+namespace v2{
+
+#define BOOST_ASSIGN_V2_CHAIN_OPERATOR(U1, U2) \
+template<typename R1,typename R2> \
+typename chain_aux::result< \
+ U1, \
+ U2 \
+>::type \
+operator&&(U1& r1, U2 & r2) \
+{ \
+ return r1 | chain_aux::adaptor1<U2>( r2 ); \
+} \
+/**/
+
+BOOST_ASSIGN_V2_CHAIN_OPERATOR( R1 , R2 )
+BOOST_ASSIGN_V2_CHAIN_OPERATOR( R1 , R2 const )
+BOOST_ASSIGN_V2_CHAIN_OPERATOR( R1 const, R2 )
+BOOST_ASSIGN_V2_CHAIN_OPERATOR( R1 const, R2 const )
+#undef BOOST_ASSIGN_V2_CHAIN_OPERATOR
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/aux/sub.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/aux/sub.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,59 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_SUB_ER_2010_HPP
+#define BOOST_ASSIGN_V2_RANGE_CHAIN_AUX_SUB_ER_2010_HPP
+#include <boost/range/iterator_range.hpp> //iterator_range_detail::
+#include <boost/assign/v2/put/range/convert.hpp>
+#include <boost/assign/v2/detail/relational_op/relational_op.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_aux{
+
+ // Adds a conversion capability to a range
+ //
+ // TODO : for now relational_op is disabled as conflicts with
+ // iterator_range's implem.
+ template<typename R>
+ struct sub : R //, relational_op_aux::crtp< sub<R> >
+ {
+
+ typedef R super_t;
+
+ sub(){}
+ sub(super_t const& s):super_t( s ){}
+
+ BOOST_ASSIGN_V2_CONVERT_CONVERT_MF
+ BOOST_ASSIGN_V2_CONVERT_OPERATOR_MF
+
+ // Relational op
+ //template<typename R1>
+ //bool equal_to(const R1& r)const{
+ // return ::boost::iterator_range_detail::equal(
+ // (*this), r );
+ //}
+ //template<typename R1>
+ //bool less_than(const R& r)const{
+ // return ::boost::iterator_range_detail::less_than(
+ // (*this), r );
+ //}
+
+ };
+
+ template<typename R>
+ sub<R> make_sub(const R& r){ return sub<R>( r ); }
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/chain.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/chain.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,24 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_CHAIN_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_CHAIN_ER_2010_HPP
+#include <boost/assign/v2/chain/traits/result.hpp>
+#include <boost/assign/v2/chain/aux/bitwise_or.hpp>
+#include <boost/assign/v2/chain/aux/logical_and.hpp>
+
+// Usage
+// using namespace boost::assign::v2;
+// v = r1 && r2 && r3;
+// using namespace adaptor;
+// w = r1 | chain( r2 ) | chain( r3 );
+// BOOST_ASSERT(v == w);
+
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/chain/checking/distinct_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/checking/distinct_values.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,72 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_CHECKING_DISTINCT_VALUES_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_CHECKING_DISTINCT_VALUES_ER_2010_HPP
+#include <vector>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/assign/v2/detail/checking/constants.hpp>
+#include <boost/assign/v2/detail/checking/container.hpp>
+#include <boost/assign/v2/chain/chain.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace chain{
+namespace distinct_values{
+
+// If the value types of the two ranges differ, their references must be
+// converted to value_type. In particular, lvalue cannot be preserved.
+
+#define m(T1,T2) \
+ template<typename T> \
+ void do_check(typename boost::enable_if<boost::is_same<T,T1> >::type* = 0) \
+ { \
+ typedef T1 t1_; \
+ typedef T2 t2_; \
+ typedef std::vector<T1> vec1_; \
+ typedef std::vector<T2> vec2_; \
+ vec1_ vec1, vec3; \
+ vec2_ vec2; \
+ { \
+ namespace ns = v2::checking::constants; \
+ vec1.push_back( ns::a ); \
+ vec1.push_back( ns::b ); \
+ vec2.push_back( ns::c ); \
+ vec2.push_back( ns::d ); \
+ vec2.push_back( ns::e ); \
+ vec3.push_back( ns::f ); \
+ vec3.push_back( ns::g ); \
+ vec3.push_back( ns::h ); \
+ } \
+ namespace chk = checking::container; \
+ { \
+ chk::do_check( vec1 | _chain( vec2 ) | _chain( vec3 ) ); \
+ } \
+ } \
+/**/
+
+
+m(short , int)
+m(int , long)
+m(float , double)
+m(double , long double)
+
+#undef m
+
+}// distinct_values
+}// chain
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/checking/twin_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/checking/twin_values.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,176 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_CHECKING_TWIN_VALUES_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_CHECKING_TWIN_VALUES_ER_2010_HPP
+#include <boost/static_assert.hpp>
+#include <vector>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/assign/v2/detail/checking/range.hpp>
+#include <boost/assign/v2/ref/detail/unwrap/range.hpp>
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/chain/traits/use_lvalue.hpp>
+#include <boost/assign/v2/chain/chain.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace chain{
+namespace twin_values{
+
+#define BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner( the_value )\
+ typedef v2::chain_traits::use_lvalue<cr1_, cr2_ > use_lvalue_; \
+ BOOST_STATIC_ASSERT( use_lvalue_::value == the_value ); \
+ typedef typename boost::mpl::eval_if_c< \
+ the_value, \
+ boost::mpl::identity<boost::mpl::void_>, \
+ v2::result_of::chain<cr1_, cr2_> \
+ >::type result_; \
+/**/
+
+#define BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl(qual_v1, qual_e2, qual_v2, \
+ the_value )\
+ { \
+ typedef std::vector<T> qual_v1 vec1_; \
+ typedef typename assign::v2::ref::type_traits::copy_wrapper< \
+ T qual_e2>::type w_; \
+ typedef std::vector<w_> qual_v2 vec2_; \
+ typedef typename ref::result_of::unwrap_range<vec1_>::type r1_; \
+ typedef typename ref::result_of::unwrap_range<vec2_>::type r2_; \
+ { \
+ typedef r1_ cr1_;\
+ typedef r2_ cr2_;\
+ BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner(the_value) \
+ } \
+ { \
+ typedef r1_ cr1_;\
+ typedef r2_ cr2_;\
+ BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner(the_value) \
+ } \
+ { \
+ typedef r1_ cr1_;\
+ typedef r2_ const cr2_;\
+ BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner(the_value) \
+ } \
+ { \
+ typedef r1_ const cr1_;\
+ typedef r2_ cr2_;\
+ BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner(the_value) \
+ } \
+ { \
+ typedef r1_ const cr1_;\
+ typedef r2_ const cr2_;\
+ BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner(the_value) \
+ } \
+ } \
+ /**/
+
+ template<typename T>
+ void do_check()
+ {
+ // mpl checks
+ {
+ typedef std::vector<T> vec_;
+ typedef v2::result_of::chain<vec_,vec_> caller1_;
+ typedef typename caller1_::type range1_;
+ typedef typename boost::range_reference<range1_>::type ref1_;
+ typedef boost::is_same<ref1_,T&> is_same1_;
+ BOOST_STATIC_ASSERT(is_same1_::value);
+ typedef v2::result_of::chain<range1_ const,vec_> caller2_;
+ typedef typename caller2_::type range2_;
+ typedef typename boost::range_reference<range2_>::type ref2_;
+ typedef boost::is_same<ref2_,T &> is_same2_;
+ BOOST_STATIC_ASSERT(is_same2_::value);
+ }
+// (qual_v1, qual_e2 , qual_v2 , the_value)
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( , , , true )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( , , const , true )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( , const , , false )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( , const , const , false )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( const , , , false )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( const , , const , false )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( const , const , , false )
+BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl( const , const , const , false )
+
+ // runtime checks
+ {
+ typedef std::vector<T> vt_;
+ vt_ vt1( 2 ), vt2( 3 ), vt3( 3 );
+ vt_ vt;
+ {
+ namespace ns = v2::checking::constants;
+ vt.push_back( ns::a );
+ vt.push_back( ns::b );
+ vt.push_back( ns::c );
+ vt.push_back( ns::d );
+ vt.push_back( ns::e );
+ vt.push_back( ns::f );
+ vt.push_back( ns::g );
+ vt.push_back( ns::h );
+ boost::copy(
+ vt,
+ boost::begin( vt1 | _chain( vt2 ) | _chain( vt3 ))
+ );
+ {
+ typedef v2::container_tag::range tag_;
+ v2::checking::do_check(
+ tag_(),
+ vt1 | _chain( vt2 ) | _chain( vt3 )
+ );
+ }
+ }
+ {
+ T a1 , b1, c1, d1, e1, f1, g1, h1;
+
+ typedef typename ref::type_traits::copy_wrapper<T>::type w_;
+ typedef boost::is_reference_wrapper<w_> is_;
+
+ // TODO std::vector causes problems.
+ boost::array<int, 2> vw1;
+ boost::array<int, 3> vw2, vw3;
+ {
+ vw1[ 0 ] = a1 ;
+ vw1[ 1 ] = b1 ;
+ vw2[ 0 ] = c1 ;
+ vw2[ 1 ] = d1 ;
+ vw2[ 2 ] = e1 ;
+ vw3[ 0 ] = f1 ;
+ vw3[ 1 ] = g1 ;
+ vw3[ 2 ] = h1 ;
+ }
+
+ boost::copy(
+ vt,
+ boost::begin( vw1 | _chain( vw2 ) | _chain( vw3 ) )
+ );
+ {
+ typedef v2::container_tag::range tag_;
+ v2::checking::do_check(
+ tag_(),
+ vw1 | _chain( vw2 ) | _chain( vw3 )
+ );
+ }
+ }
+ }// runtime checks
+ }// do_check
+
+}// twin_values
+}// chain
+}// checking
+}// v2
+}// assign
+}// boost
+
+#undef BOOST_ASSIGN_V2_CHAIN_CHECKING_run
+#undef BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl
+#undef BOOST_ASSIGN_V2_CHAIN_CHECKING_mpl_inner
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/traits/iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/traits/iterator.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,61 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_RANGE_CHAIN_TRAITS_ITERATOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_RANGE_CHAIN_TRAITS_ITERATOR_ER_2010_HPP
+#include <boost/mpl/apply.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/range/detail/chain_iterator.hpp>
+#include <boost/range/detail/demote_iterator_traversal_tag.hpp>
+#include <boost/assign/v2/detail/type_traits/meta_convert.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_traits{
+
+ template<
+ typename It1,
+ typename It2,
+ typename Tag
+ >
+ struct iterator
+ {
+ typedef typename boost::iterator_reference<It1>::type ref1_;
+ typedef typename boost::iterator_reference<It2>::type ref2_;
+
+ typedef assign::v2::type_traits::meta_convert<Tag> convert_;
+ typedef typename boost::mpl::apply2<
+ convert_,
+ ref1_,
+ ref2_
+ >::type reference;
+
+ typedef typename boost::remove_reference<reference>::type value_type;
+
+ typedef boost::range_detail::chain_iterator<
+ It1,
+ It2,
+ value_type,
+ reference,
+ // TODO should be able to use default
+ // problems arise because traits are probably not defined for
+ // complicated ranges
+ boost::single_pass_traversal_tag
+ > type;
+
+ };
+
+}// chain_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/traits/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/traits/range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,59 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_TRAITS_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_TRAITS_RANGE_ER_2010_HPP
+#include <boost/concept/assert.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/assign/v2/chain/traits/iterator.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_traits{
+
+ template<typename R1, typename R2, template<typename> class F, typename Tag>
+ struct range{
+
+ typedef typename chain_traits::iterator<
+ typename F<R1>::type,
+ typename F<R2>::type,
+ Tag
+ >::type iterator_t;
+ typedef boost::iterator_range< iterator_t > type;
+
+ static type call(R1& r1, R2& r2)
+ {
+ BOOST_CONCEPT_ASSERT((SinglePassRangeConcept<R1>));
+ BOOST_CONCEPT_ASSERT((SinglePassRangeConcept<R2>));
+ namespace ns = boost::range_detail;
+ typedef ns::chain_iterator_begin_tag begin_tag_;
+ typedef ns::chain_iterator_end_tag end_tag_;
+ return type(
+ iterator_t(r1, r2, begin_tag_()),
+ iterator_t(r1, r2, end_tag_())
+ );
+ }
+ };
+
+ template<typename R1, typename R2, typename Tag>
+ struct range_l
+ : chain_traits::range< R1, R2, boost::range_iterator,Tag>{};
+
+ template<typename R1, typename R2, typename Tag>
+ struct range_r
+ : chain_traits::range<R1, R2, boost::range_const_iterator,Tag>{};
+
+}// chain_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/traits/result.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/traits/result.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,47 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_TRAITS_RESULT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_TRAITS_RESULT_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/assign/v2/chain/traits/use_lvalue.hpp>
+#include <boost/assign/v2/chain/traits/range.hpp>
+#include <boost/assign/v2/chain/aux/sub.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_aux{
+
+ template<typename R1,typename R2,typename Tag = use_default>
+ struct result{
+ typedef typename boost::mpl::eval_if<
+ chain_traits::use_lvalue<R1,R2,Tag>,
+ boost::mpl::identity< chain_traits::range_l<R1, R2, Tag> >,
+ boost::mpl::identity< chain_traits::range_r<R1, R2, Tag> >
+ >::type caller_;
+
+ typedef typename caller_::type super_;
+ typedef chain_aux::sub<super_> type;
+
+ static type call(R1& r1, R2& r2)
+ {
+ return type(
+ caller_::call( r1, r2 )
+ );
+ }
+ };
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/chain/traits/use_lvalue.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/chain/traits/use_lvalue.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,67 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHAIN_TRAITS_USE_LVALUE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_TRAITS_USE_LVALUE_ER_2010_HPP
+#include <boost/config.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/range/reference.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace chain_traits{
+
+ // TODO use is_lvalue_iterator or is_read_iterator
+
+ template<typename U1,typename U2,typename Tag = use_default>
+ struct use_lvalue
+ {
+
+ typedef typename boost::range_reference<U1>::type r1_;
+ typedef typename boost::range_reference<U2>::type r2_;
+ typedef boost::mpl::and_<
+ boost::is_reference<r1_>,
+ boost::is_reference<r2_>
+ > are_refs_;
+
+ typedef boost::is_same<r1_,r2_> are_same_;
+
+ typedef boost::mpl::and_<
+ are_refs_,
+ are_same_
+ > are_same_refs_;
+
+ typedef boost::is_const<
+ typename boost::remove_reference<r1_>::type
+ > is_const_;
+
+ typedef typename boost::mpl::eval_if<
+ is_const_,
+ boost::mpl::identity<boost::mpl::false_>,
+ are_same_refs_
+ >::type type;
+
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+ };
+
+}// chain_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/array.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/array.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,38 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_ARRAY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_ARRAY_ER_2010_HPP
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+#include <boost/assign/v2/detail/checking/constants.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_static_array.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+
+ template<typename V>
+ void do_check(container_tag::static_array,V const& ar1)
+ {
+ BOOST_ASSIGN_V2_CHECK_EQUAL( ar1.empty() , false );
+ V ar = ar1;
+ namespace ns = checking::constants;
+ ns::do_check(
+ ar[0],ar[1],ar[2],ar[3],
+ ar[4],ar[5],ar[6],ar[7]
+ );
+ }
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/assert.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/assert.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,37 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_ASSERT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_ASSERT_ER_2010_HPP
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+
+ template<typename P>
+ void do_assert()
+ {
+ BOOST_STATIC_ASSERT( P::value );
+ }
+
+ template<typename A,typename B>
+ void do_assert_is_same(){
+ typedef boost::is_same<A,B> pred_;
+ checking::do_assert<pred_>();
+ }
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/check_equal.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/check_equal.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,15 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_ASSIGN_V2_CHECK_EQUAL
+#include <boost/assert.hpp>
+#define BOOST_ASSIGN_V2_CHECK_EQUAL( a , b ) BOOST_ASSERT( a == b )
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/constants.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/constants.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,94 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_CONSTANTS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_CONSTANTS_ER_2010_HPP
+#include <boost/next_prior.hpp>
+#include <boost/range.hpp>
+#include <boost/array.hpp>
+#include <boost/numeric/conversion/converter.hpp>
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace constants{
+
+namespace {
+ // value // rank
+ const int a = 1; // 1
+ const int b = 5; // 5
+ const int c = 3; // 3
+ const int d = 4; // 4
+ const int e = 2; // 2
+ const int f = 9; // 7
+ const int g = 0; // 0
+ const int h = 7; // 6
+}
+ // array
+ template<typename T>
+ boost::array<T,8> make_array()
+ {
+ typedef boost::array<T,8> ar_;
+ ar_ ar;
+ ar[0] = a; ar[1] = b; ar[2] = c;
+ ar[3] = d; ar[4] = e; ar[5] = f;
+ ar[6] = g; ar[7] = h;
+ return ar;
+ }
+
+ namespace{
+ const boost::array<int,8> array = make_array<int>();
+ }
+
+ // values
+ template<typename T>
+ void do_check(
+ const T& a1,const T& b1,const T& c1,const T& d1,
+ const T& e1,const T& f1,const T& g1,const T& h1
+ )
+ {
+ BOOST_ASSIGN_V2_CHECK_EQUAL( a , a1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( b , b1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( c , c1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( d , d1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( e , e1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( f , f1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( g , g1 );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( h , h1 );
+ }
+
+namespace sorted{
+
+ template<typename T>
+ void do_check(
+ const T& a1,const T& b1,const T& c1,const T& d1,
+ const T& e1,const T& f1,const T& g1,const T& h1
+ )
+ {
+ namespace ns = checking::constants;
+ BOOST_ASSIGN_V2_CHECK_EQUAL( a1, ns::g );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( b1, ns::a );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( c1, ns::e );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( d1, ns::c );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( e1, ns::d );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( f1, ns::b );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( g1, ns::h );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( h1, ns::f );
+ }
+
+}// sorted
+}// constants
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/container.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/container.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,38 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_CONTAINER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_CONTAINER_ER_2010_HPP
+#include <boost/assign/v2/detail/checking/deduce_check.hpp>
+#include <boost/assign/v2/detail/checking/fifo.hpp>
+#include <boost/assign/v2/detail/checking/lifo.hpp>
+#include <boost/assign/v2/detail/checking/array.hpp>
+#include <boost/assign/v2/detail/checking/range.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace container{
+
+ template<typename V>
+ void do_check(V const & v)
+ {
+ using namespace checking::constants;
+ typedef typename checking::deduce_check<V>::type tag;
+ checking::do_check( tag(), v );
+ }
+
+}// container
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/deduce_check.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/deduce_check.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,77 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_DEDUCE_TAG_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_DEDUCE_TAG_ER_2010_HPP
+#include <boost/assign/v2/detail/type_traits/container/is_fifo.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_lifo.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_sorted.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_static_array.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_range.hpp>
+#include <boost/assign/v2/detail/mpl/switch.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace switch_tag{
+ struct deduce_check{};
+}// switch_tag
+namespace mpl{
+
+ template<>
+ struct case_<switch_tag::deduce_check,0> :
+ v2::mpl::wrap<
+ v2::container_tag::fifo,
+ v2::container_type_traits::is_fifo
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_check,1> :
+ v2::mpl::wrap<
+ v2::container_tag::lifo,
+ v2::container_type_traits::is_lifo
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_check,2> :
+ v2::mpl::wrap<
+ v2::container_tag::sorted,
+ v2::container_type_traits::is_sorted
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_check,3> :
+ v2::mpl::wrap<
+ v2::container_tag::static_array,
+ v2::container_type_traits::is_static_array
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_check,4> :
+ v2::mpl::wrap<
+ container_tag::range
+ >{};
+
+
+}// mpl
+namespace checking{
+
+ template<typename T>
+ struct deduce_check : v2::mpl::switch_<
+ v2::switch_tag::deduce_check,
+ T
+ >
+ {};
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/fifo.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/fifo.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_FIFO_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_FIFO_ER_2010_HPP
+#include <boost/assign/v2/detail/checking/constants.hpp>
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_fifo.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+
+ template<typename V>
+ void do_check(container_tag::fifo,V const & v1)
+ {
+ V v = v1;
+ using namespace constants;
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , a ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , b ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , c ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , d ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , e ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , f ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , g ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.front() , h ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.empty() , true);
+ }
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/iterator.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,63 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_ITERATOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_ITERATOR_ER_2010_HPP
+#include <boost/next_prior.hpp>
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+#include <boost/assign/v2/detail/checking/constants.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace iterator{
+
+ template<typename It>
+ void do_check(It it)
+ {
+ namespace ns = checking::constants;
+ ns::do_check(
+ *boost::next( it, 0 ),
+ *boost::next( it, 1 ),
+ *boost::next( it, 2 ),
+ *boost::next( it, 3 ),
+ *boost::next( it, 4 ),
+ *boost::next( it, 5 ),
+ *boost::next( it, 6 ),
+ *boost::next( it, 7 )
+ );
+ }
+
+namespace sorted{
+
+ template<typename It>
+ void do_check(It it)
+ {
+ namespace ns = checking::constants::sorted;
+ ns::do_check(
+ *boost::next( it, 0 ),
+ *boost::next( it, 1 ),
+ *boost::next( it, 2 ),
+ *boost::next( it, 3 ),
+ *boost::next( it, 4 ),
+ *boost::next( it, 5 ),
+ *boost::next( it, 6 ),
+ *boost::next( it, 7 )
+ );
+ }
+
+}// sorted
+}// iterator
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/lifo.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/lifo.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_LIFO_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_LIFO_ER_2010_HPP
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+#include <boost/assign/v2/detail/checking/constants.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_lifo.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+
+ template<typename V>
+ void do_check(container_tag::lifo,V const& v1)
+ {
+ using namespace checking::constants;
+ V v = v1;
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , h ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , g ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , f ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , e ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , d ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , c ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , b ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.top() , a ); v.pop();
+ BOOST_ASSIGN_V2_CHECK_EQUAL( v.empty() , true );
+ }
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,52 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_RANGE_ER_2010_HPP
+#include <boost/next_prior.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_range.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_sorted.hpp>
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+#include <boost/assign/v2/detail/checking/iterator.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+
+ template<typename R>
+ void do_check(container_tag::range, R const& r)
+ {
+ namespace ns = checking::iterator;
+ ns::do_check( boost::begin( r ) );
+ BOOST_ASSIGN_V2_CHECK_EQUAL(
+ boost::next( boost::begin( r ), 8 ),
+ boost::end( r )
+ );
+ }
+
+ template<typename R>
+ void do_check(container_tag::sorted, R const& r)
+ {
+ namespace ns = checking::iterator::sorted;
+ ns::do_check( boost::begin( r ) );
+ BOOST_ASSIGN_V2_CHECK_EQUAL(
+ boost::next( boost::begin( r ), 8 ) ,
+ boost::end( r )
+ );
+ }
+
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/checking/relational_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/checking/relational_op.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,57 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_CHECKING_RELATIONAL_OP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHECKING_RELATIONAL_OP_ER_2010_HPP
+#include <boost/array.hpp>
+#include <boost/assign/v2/detail/checking/constants.hpp>
+#include <boost/assign/v2/detail/checking/check_equal.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace relational_op{
+
+ // R must derive from relational_op_aux::crtp<> and r contain the checking
+ // constants.
+ template<typename R>
+ void do_check(R const& r)
+ {
+ typedef boost::array<int,8> ar_;
+ ar_ ar;
+ {
+ using namespace constants;
+ ar[0] = a; ar[1] = b; ar[2] = c;
+ ar[3] = d; ar[4] = e; ar[5] = f;
+ ar[6] = g; ar[7] = h;
+ }
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar == r), true );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar != r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar < r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar > r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar <= r), true );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar >= r), true );
+ ++ar[2];
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar == r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar != r), true );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar < r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar > r), true );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar <= r), false );
+ BOOST_ASSIGN_V2_CHECK_EQUAL( (ar >= r), true );
+
+ }
+
+}// relational_op
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/config/arity_bound.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/config/arity_bound.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+
+// Default upper bound on the arity of function and functors
+#ifndef BOOST_ASSIGN_V2_ARITY_BOUND
+#define BOOST_ASSIGN_V2_ARITY_BOUND 6
+#endif
+// Upper bound on the arity of 'csv' functions
+#ifndef BOOST_ASSIGN_V2_CSV_ARITY_BOUND
+#define BOOST_ASSIGN_V2_CSV_ARITY_BOUND 11
+#endif
+// These two constants may be set by the user.
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/config/borland_workaround.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/config/borland_workaround.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,9 @@
+
+// Maybe needed for unit testing
+
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# pragma warn -8091 // supress warning in Boost.Test
+# pragma warn -8057 // unused argument argc/argv in Boost.Test
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/config/enable_cpp_0x.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/config/enable_cpp_0x.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+
+// Usage:
+// #include <boost/assign/v2/detail/config/enable_cpp_0x.hpp>
+// enables features that are available under C++0x in subsequently included
+// header files.
+
+#ifndef BOOST_ASSIGN_V2_ENABLE_CPP_0X
+#define BOOST_ASSIGN_V2_ENABLE_CPP_0X
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/detail/detail.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/detail.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,24 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_DETAIL_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_DETAIL_ER_2010_HPP
+
+#include <boost/assign/v2/detail/functor/functor.hpp>
+#include <boost/assign/v2/detail/fwd/fwd.hpp>
+#include <boost/assign/v2/detail/keyword/keyword.hpp>
+#include <boost/assign/v2/detail/mpl/mpl.hpp>
+#include <boost/assign/v2/detail/relational_op/relational_op.hpp>
+#include <boost/assign/v2/detail/type_traits/type_traits.hpp>
+
+// Don't include
+// /checking/checking.hpp
+// /config/config
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/functor/constructor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/functor/constructor.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,93 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FUNCTOR_CONSTRUCTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FUNCTOR_CONSTRUCTOR_ER_2010_HPP
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/assign/v2/detail/type_traits/container/value.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+#include <boost/assign/v2/detail/functor/crtp_unary_and_up.hpp>
+
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace functor_aux{
+
+ template<typename T>
+ class constructor : public functor_aux::crtp_unary_and_up<
+ functor_aux::constructor<T>,
+ boost::mpl::always<T>
+ >
+ {
+ typedef functor_aux::constructor<T> this_;
+ typedef boost::mpl::always<T> meta_result_;
+ typedef functor_aux::crtp_unary_and_up<this_, meta_result_> super_;
+
+ public:
+ constructor(){}
+
+ T operator()()const{ return T(); }
+
+ using super_::operator();
+
+#define BOOST_ASSIGN_V2_impl(z,N,data) \
+ template<BOOST_PP_ENUM_PARAMS(N,typename T)> \
+ T impl( BOOST_PP_ENUM_BINARY_PARAMS(N, T, &_) )const{ \
+ return T( BOOST_PP_ENUM_PARAMS(N,_) ); \
+ } \
+/**/
+BOOST_PP_REPEAT_FROM_TO(
+ 1,
+ BOOST_ASSIGN_V2_ARITY_BOUND,
+ BOOST_ASSIGN_V2_impl,
+ ~
+)
+#undef BOOST_ASSIGN_V2_impl
+
+ };
+
+ template<typename V>
+ struct deduce_constructor
+ {
+ typedef typename container_type_traits::value<V>::type value_;
+ typedef functor_aux::constructor<value_> type;
+ static type call(){ return functor_aux::constructor<value_>(); }
+ };
+
+
+}// functor_aux
+namespace result_of{
+
+ template<typename T>
+ struct constructor
+ {
+ typedef functor_aux::constructor<T> type;
+ };
+
+}// result_of
+
+ template<typename T>
+ typename result_of::constructor<T>::type
+ constructor()
+ {
+ typedef typename result_of::constructor<T>::type result_;
+ return result_();
+ }
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/functor/crtp_unary_and_up.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,186 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FUNCTOR_CRTP_UNARY_AND_UP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FUNCTOR_CRTP_UNARY_AND_UP_ER_2010_HPP
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+//#include <boost/assign/v2/detail/config/enable_cpp_0x.hpp>
+
+#ifdef BOOST_ASSIGN_V2_LVALUE_CONST_ARITY_BOUND
+#error
+#endif
+// This constant should not be changed by the user.
+#define BOOST_ASSIGN_V2_LVALUE_CONST_ARITY_BOUND 4
+
+// Notation:
+// m = BOOST_ASSIGN_V2_LVALUE_CONST_ARITY_BOUND
+// n = BOOST_ASSIGN_V2_ARITY_BOUND
+//
+// Usage:
+// Publicly inheriting from crtp_unary_and_up<D,F> exposes in derived class D
+// operator() for any combination of lvalues and const values for arity
+// 0 < k < m, and for m <= k < n lvalue is preserved only if all arguments are
+// lvalues.
+//
+// Requirements:
+// For operator() with arity k to be defined, the derived class has to define,
+// typename apply1<F,mpl::vector<T0,...,Tk> >::type impl(T0&,...,Tk&)const;
+//
+// Note:
+// For k = 0, operator() should be defined in the derived class, and the follo-
+// wing statement added in its body:
+// using crtp_unary_and_up<D,F>::operator();
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace functor_aux{
+
+ template<typename D,typename F>
+ class crtp_unary_and_up
+ {
+ protected:
+
+ D& derived(){ return static_cast<D&>(*this); }
+ D const& derived()const{ return static_cast<D const&>(*this); }
+
+ public:
+
+
+// #ifndef BOOST_ASSIGN_V2_ENABLE_CPP_0X
+
+#define BOOST_ASSIGN_V2_op1(U0) \
+ template<typename T0> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<U0> \
+ >::type \
+ operator()( U0& _0)const{ \
+ return this->derived().template impl<U0>( _0 ); \
+ } \
+/**/
+BOOST_ASSIGN_V2_op1(T0 const )
+BOOST_ASSIGN_V2_op1(T0 )
+#undef BOOST_ASSIGN_V2_op1
+
+#define BOOST_ASSIGN_V2_op2(U0,U1) \
+ template<typename T0,typename T1> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<U0, U1> \
+ >::type \
+ operator()( U0& _0, U1& _1)const{ \
+ return this->derived().template impl<U0, U1>( _0, _1 ); \
+ } \
+/**/
+BOOST_ASSIGN_V2_op2(T0 const, T1 const )
+BOOST_ASSIGN_V2_op2(T0 , T1 const )
+BOOST_ASSIGN_V2_op2(T0 const, T1 )
+BOOST_ASSIGN_V2_op2(T0 , T1 )
+#undef BOOST_ASSIGN_V2_op2
+
+#define BOOST_ASSIGN_V2_op3(U0, U1, U2) \
+ template<typename T0,typename T1,typename T2> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<U0, U1, U2> \
+ >::type \
+ operator()( U0& _0, U1& _1, U2& _2)const{ \
+ return this->derived().template impl<U0, U1, U2>( _0, _1, _2 ); \
+ } \
+/**/
+BOOST_ASSIGN_V2_op3(T0 const, T1 const , T2 const )
+BOOST_ASSIGN_V2_op3(T0 , T1 const , T2 const )
+BOOST_ASSIGN_V2_op3(T0 const, T1 , T2 const )
+BOOST_ASSIGN_V2_op3(T0 , T1 , T2 const )
+BOOST_ASSIGN_V2_op3(T0 const, T1 const , T2 )
+BOOST_ASSIGN_V2_op3(T0 , T1 const , T2 )
+BOOST_ASSIGN_V2_op3(T0 const, T1 , T2 )
+BOOST_ASSIGN_V2_op3(T0 , T1 , T2 )
+#undef BOOST_ASSIGN_V2_op3
+
+#define BOOST_ASSIGN_V2_op4(U0, U1, U2, U3) \
+ template<typename T0,typename T1,typename T2,typename T3> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<U0, U1, U2, U3> \
+ >::type \
+ operator()( U0& _0, U1& _1, U2& _2, U3& _3)const{ \
+ return this->derived().template \
+ impl<U0, U1, U2, U3>( _0, _1, _2, _3 ); \
+ } \
+/**/
+/*
+BOOST_ASSIGN_V2_op4(T0 const, T1 const , T2 const , T3 const )
+BOOST_ASSIGN_V2_op4(T0 , T1 const , T2 const , T3 const )
+BOOST_ASSIGN_V2_op4(T0 const, T1 , T2 const , T3 const )
+BOOST_ASSIGN_V2_op4(T0 , T1 , T2 const , T3 const )
+BOOST_ASSIGN_V2_op4(T0 const, T1 const , T2 , T3 const )
+BOOST_ASSIGN_V2_op4(T0 , T1 const , T2 , T3 const )
+BOOST_ASSIGN_V2_op4(T0 const, T1 , T2 , T3 const )
+BOOST_ASSIGN_V2_op4(T0 , T1 , T2 , T3 const )
+BOOST_ASSIGN_V2_op4(T0 const, T1 const , T2 const , T3 )
+BOOST_ASSIGN_V2_op4(T0 , T1 const , T2 const , T3 )
+BOOST_ASSIGN_V2_op4(T0 const, T1 , T2 const , T3 )
+BOOST_ASSIGN_V2_op4(T0 , T1 , T2 const , T3 )
+BOOST_ASSIGN_V2_op4(T0 const, T1 const , T2 , T3 )
+BOOST_ASSIGN_V2_op4(T0 , T1 const , T2 , T3 )
+BOOST_ASSIGN_V2_op4(T0 const, T1 , T2 , T3 )
+BOOST_ASSIGN_V2_op4(T0 , T1 , T2 , T3 )
+*/
+#undef BOOST_ASSIGN_V2_op4
+
+#define BOOST_ASSIGN_V2_op(z,N,data) \
+ template<BOOST_PP_ENUM_PARAMS(N,typename T)> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<BOOST_PP_ENUM_PARAMS(N,T)> \
+ >::type \
+ operator()( BOOST_PP_ENUM_BINARY_PARAMS(N,T,&_) )const{ \
+ return this->derived().template impl< \
+ BOOST_PP_ENUM_PARAMS(N,T) \
+ >( BOOST_PP_ENUM_PARAMS(N,_) ); \
+ } \
+ \
+ template<BOOST_PP_ENUM_PARAMS(N,typename T)> \
+ typename boost::mpl::apply1< \
+ F, \
+ boost::mpl::vector<BOOST_PP_ENUM_PARAMS(N,const T)> \
+ >::type \
+ operator()( BOOST_PP_ENUM_BINARY_PARAMS(N,T, const &_) )const{ \
+ return this->derived().template impl< \
+ BOOST_PP_ENUM_PARAMS(N,const T) \
+ >( BOOST_PP_ENUM_PARAMS(N, _) ); \
+ } \
+/**/
+BOOST_PP_REPEAT_FROM_TO(
+ BOOST_ASSIGN_V2_LVALUE_CONST_ARITY_BOUND,
+ BOOST_ASSIGN_V2_ARITY_BOUND,
+ BOOST_ASSIGN_V2_op,
+ ~
+)
+#undef BOOST_ASSIGN_V2_op
+
+// #endif
+// #ifdef BOOST_ASSIGN_V2_ENABLE_CPP_0X
+// TODO
+// #endif
+
+ };
+
+}// functor_aux
+}// v2
+}// assign
+}// boost
+
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/functor/functor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/functor/functor.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,17 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FUNCTOR_FUNCTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FUNCTOR_FUNCTOR_ER_2010_HPP
+
+#include <boost/assign/v2/detail/functor/crtp_unary_and_up.hpp>
+#include <boost/assign/v2/detail/functor/constructor.hpp>
+#include <boost/assign/v2/detail/functor/identity.hpp>
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/functor/identity.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/functor/identity.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,71 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FUNCTOR_IDENTITY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FUNCTOR_IDENTITY_ER_2010_HPP
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/assign/v2/detail/functor/crtp_unary_and_up.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace functor_aux{
+
+ struct result_of_identity{
+
+ template<typename V>
+ struct is_ok : boost::mpl::equal_to<
+ boost::mpl::int_<1>,
+ boost::mpl::size<V>
+ >{};
+
+ template<typename V>
+ struct enable
+ {
+ typedef typename boost::mpl::at_c<V,0>::type t_;
+ typedef typename boost::add_reference<t_>::type type;
+ };
+
+ template<typename V>
+ struct disable{};
+
+ template<typename V>
+ struct apply : boost::mpl::eval_if<
+ is_ok<V>,
+ enable<V>,
+ disable<V>
+ >{};
+
+ };
+
+ struct identity : functor_aux::crtp_unary_and_up<
+ functor_aux::identity,
+ functor_aux::result_of_identity
+ >
+ {
+ identity(){}
+
+ template<typename T> T& impl(T& t)const{ return t; }
+ template<typename T> T const& impl(T const& t)const{ return t; }
+
+ };
+
+}// functor_aux
+namespace{
+ functor_aux::identity const _identity = functor_aux::identity();
+}
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/fwd/container.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/fwd/container.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,45 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FWD_CONTAINER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FWD_CONTAINER_ER_2010_HPP
+
+
+namespace std{
+
+ // www.sgi.com/tech/stl/Deque.html
+ template<typename T,typename A> class deque;
+
+ // http://www.sgi.com/tech/stl/List.html
+ template<typename T,typename A> class list;
+
+ // http://www.sgi.com/tech/stl/Map.html
+ template<typename K,typename T,typename C,typename A> class map;
+
+ // http://www.sgi.com/tech/stl/queue.html
+ template<typename T,typename S> class queue;
+
+ // http://www.sgi.com/tech/stl/set.html
+ template<typename T,typename C,typename A> class set;
+
+ // http://www.sgi.com/tech/stl/stack.html
+ template<typename T,typename S> class stack;
+
+ // http://www.sgi.com/tech/stl/Vector.html
+ template<typename T,typename A> class vector;
+
+}// std
+namespace boost{
+
+ // http://www.boost.org/doc/libs/1_43_0/doc/html/array.html
+ template<typename T, std::size_t size> class array;
+
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/fwd/fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/fwd/fwd.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,15 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_FWD_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_FWD_FWD_ER_2010_HPP
+
+#include <boost/assign/v2/detail/fwd/container.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/deduce.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/deduce.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,51 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_DEDUCE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_DEDUCE_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace keyword_aux{
+ struct deduce{};
+
+ template<typename T>
+ typename T::result_of_modulo::deduce::type
+ operator%(
+ T const& t,
+ keyword_aux::deduce const& deduce
+ )
+ {
+ return t.modulo_deduce();
+ }
+
+}// keyword_aux
+namespace{
+ const keyword_aux::deduce _deduce = keyword_aux::deduce();
+}
+namespace detail{
+
+ template<typename Option1,typename Option2>
+ struct deduce : boost::mpl::eval_if<
+ boost::is_same<Option1,boost::use_default>,
+ boost::mpl::identity<Option2>,
+ boost::mpl::identity<Option1>
+ >{};
+
+}// detail
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/fun.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/fun.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,61 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_FUN_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_FUN_ER_2010_HPP
+
+// Usage
+// _fun = f
+// return fun_holder<F>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace detail{
+
+ template<typename F>
+ struct fun_holder{
+
+ fun_holder(const F& f):value(f){}
+
+ F value;
+ };
+
+ template<typename T,typename F1>
+ typename T::result_of_modulo::template fun<F1>::type
+ operator%(
+ T const& t,
+ detail::fun_holder<F1> const& h
+ )
+ {
+ return t.modulo_fun( h.value );
+ }
+
+}// detail
+namespace keyword_aux{
+
+ struct fun{
+
+ template<typename F>
+ detail::fun_holder<F>
+ operator=(F const& f)const
+ {
+ return detail::fun_holder<F>( f );
+ }
+
+ };
+}// keyword_aux
+namespace{
+ const keyword_aux::fun _fun = keyword_aux::fun();
+}
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/keyword.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/keyword.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,20 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_KEYWORD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_KEYWORD_ER_2010_HPP
+
+#include <boost/assign/v2/detail/keyword/deduce.hpp>
+#include <boost/assign/v2/detail/keyword/fun.hpp>
+#include <boost/assign/v2/detail/keyword/lookup.hpp>
+#include <boost/assign/v2/detail/keyword/nil.hpp>
+#include <boost/assign/v2/detail/keyword/unwrap.hpp>
+#include <boost/assign/v2/detail/keyword/repeat.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/lookup.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/lookup.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,40 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_LOOKUP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_LOOKUP_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace keyword_aux{
+
+ struct lookup{};
+ struct incr_lookup{};
+
+ template<typename T>
+ typename T::result_of_modulo::incr_lookup::type
+ operator%(
+ T const& t,
+ keyword_aux::incr_lookup const& dummy
+ )
+ {
+ return t.modulo_incr_lookup();
+ }
+
+}// detail
+
+ keyword_aux::lookup const _lookup = keyword_aux::lookup();
+ keyword_aux::incr_lookup const _incr_lookup = keyword_aux::incr_lookup();
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/nil.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/nil.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,24 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_NIL_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_NIL_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace keyword_aux{ struct nil{}; }
+namespace{
+ const keyword_aux::nil _nil = keyword_aux::nil();
+}
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/repeat.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/repeat.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,51 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_REPEAT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_REPEAT_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace keyword_aux{
+
+ struct repeat{
+
+ typedef std::size_t size_type;
+
+ repeat() : value( 0 ){}
+
+ repeat operator=( size_type const& n)const{
+ repeat result;
+ result.value = n;
+ return result;
+ }
+
+ size_type value;
+ };
+
+ template<typename T>
+ typename T::result_of_modulo::repeat::type
+ operator%(
+ T const& t,
+ keyword_aux::repeat const& h
+ )
+ {
+ return t.modulo_repeat( h.value );
+ }
+
+}// detail
+
+ keyword_aux::repeat const _repeat = keyword_aux::repeat();
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/keyword/unwrap.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/keyword/unwrap.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,28 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_KEYWORD_UNWRAP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_KEYWORD_UNWRAP_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace keyword_aux{
+
+ struct unwrap{};
+
+}// detail
+
+ keyword_aux::unwrap const _unwrap = keyword_aux::unwrap();
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/mpl/always.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/mpl/always.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,39 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_MPL_ALWAYS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_MPL_ALWAYS_ER_2010_HPP
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace mpl{
+
+ // This is a variant of mpl::always that is also nullary.
+
+ template<typename T>
+ struct always : boost::mpl::always<T>{};
+
+}// mpl
+}// v2
+}// assign
+namespace mpl{
+
+ template<typename T>
+ struct apply0<
+ assign::v2::mpl::always<T>
+ > : boost::mpl::identity<T>{};
+
+}// mpl
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/mpl/mpl.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/mpl/mpl.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_MPL_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_MPL_ER_2010_HPP
+
+#include <boost/assign/v2/detail/mpl/always.hpp>
+#include <boost/assign/v2/detail/mpl/switch.hpp>
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/mpl/switch.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/mpl/switch.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,73 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_MPL_SWITCH_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_MPL_SWITCH_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/placeholders.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace switch_tag{
+
+ // Each tag in this namespace identifies a switch statement.
+
+}//switch_tag
+namespace mpl{
+
+ // Fully specialize by inheriting from wrap<Tag,F>
+ // To terminate the switch, inherit from wrap<Tag>
+ template<typename SwitchTag, int k> struct case_{};
+
+ template<typename T>
+ struct wrap_default_f : boost::mpl::true_{};
+
+ template<typename Tag, template<typename> class F = wrap_default_f>
+ struct wrap
+ {
+ typedef Tag tag;
+ template<typename T> struct apply : F<T>
+ {
+ // Is Tag compatible with T? Answer : F<T>::value.
+ };
+ };
+
+ template<typename W>
+ struct extract_tag
+ {
+ typedef typename W::tag type;
+ };
+
+ template<typename SwitchTag, typename T, int k = 0>
+ struct switch_ : boost::mpl::eval_if<
+ boost::mpl::apply1<
+ v2::mpl::case_<SwitchTag, k>,
+ T
+ >,
+ v2::mpl::extract_tag<
+ v2::mpl::case_<SwitchTag, k>
+ >,
+ v2::mpl::switch_<
+ SwitchTag,
+ T,
+ k + 1
+ >
+ >{};
+
+}// mpl
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/relational_op/crtp.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/relational_op/crtp.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,100 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_RELATIONAL_OP_CRTP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_RELATIONAL_OP_CRTP_ER_2010_HPP
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace relational_op_aux{
+
+// A solution with 3 overloads was proposed here.
+// http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/389d8fe278ef0b13#
+// 2 overloads seem to suffice, however, as implemented below.
+
+ struct base{};
+
+ // D must implement:
+ // template<typename T> bool equal_to(const T&)const;
+ // template<typename T> bool less_than(const T&)const;
+ template<typename D>
+ struct crtp : base{
+
+ D const& derived()const{ return static_cast<D const&>(*this); }
+
+ };
+
+ template< typename A ,typename B>
+ typename boost::disable_if<
+ boost::is_base_of<base,A>,
+ bool
+ >::type
+ operator==( A const& a, crtp< B > const& b)
+ {
+ return b.derived().equal_to( a );
+ }
+
+ template< typename A ,typename B>
+ bool operator==( crtp< A > const& a, B const& b )
+ {
+ return b == a;
+ }
+
+ template< typename A ,typename B>
+ typename boost::disable_if<
+ boost::is_base_of<base,A>,
+ bool
+ >::type
+ operator<( A const& a, crtp< B > const& b)
+ {
+ return ! ( (a == b) || (b < a) );
+ }
+
+ template< typename A ,typename B>
+ bool operator<( crtp< A > const& a, B const& b )
+ {
+ return a.derived().less_than( b );
+ }
+
+ // Deduced
+
+#define op(symb,expr)\
+ template< typename A ,typename B> \
+ typename boost::disable_if< \
+ boost::is_base_of<base,A>, \
+ bool \
+ >::type \
+ operator symb ( A const& a, crtp< B > const& b) \
+ { \
+ return expr; \
+ } \
+ \
+ template< typename A ,typename B> \
+ bool operator symb ( crtp< A > const& a, B const& b ) \
+ { \
+ return expr; \
+ } \
+/**/
+
+ op( !=, !(a == b) )
+ op( <=, (a < b) || (a == b) )
+ op( >, !(a <= b) )
+ op( >=, (a > b) || (a == b) )
+
+#undef op
+
+}// relational_op_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/relational_op/relational_op.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/relational_op/relational_op.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,15 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_DETAIL_RELATIONAL_OP_RELATIONAL_OP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_DETAIL_RELATIONAL_OP_RELATIONAL_OP_ER_2010_HPP
+
+#include <boost/assign/v2/detail/relational_op/crtp.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/container.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/container.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,23 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_CONTAINER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_CONTAINER_ER_2010_HPP
+
+#include <boost/assign/v2/detail/type_traits/container/has_push.hpp>
+#include <boost/assign/v2/detail/type_traits/container/has_static_size.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_fifo.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_lifo.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_map.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_range.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_sorted.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_static_array.hpp>
+#include <boost/assign/v2/detail/type_traits/container/value.hpp>
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_push.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_push.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_HAS_PUSH_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_HAS_PUSH_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/config.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/assign/v2/detail/type_traits/container/value.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_type_traits{
+
+
+ template<typename V,typename T
+ = typename container_type_traits::value<V>::type>
+ struct has_push{
+
+ typedef typename boost::type_traits::yes_type yes_;
+ typedef typename boost::type_traits::no_type no_;
+
+ template<typename U,void (U::*fp)(T const&)>
+ struct helper{
+ // See http://lists.boost.org/Archives/boost/2002/03/27233.php
+ };
+
+ template<typename U>
+ static yes_ test(U*, helper<U, &U::push>* p = 0);
+ static no_ test(...);
+
+ BOOST_STATIC_CONSTANT(
+ bool,
+ value = sizeof( test((V*)0) ) == sizeof( yes_ )
+ );
+
+ typedef boost::mpl::bool_<value> type;
+
+ };
+
+ template<typename V>
+ struct has_push_deduced_value : v2::container_type_traits::has_push<V>{};
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_static_size.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/has_static_size.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,43 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_HAS_STATIC_SIZE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_HAS_STATIC_SIZE_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_type_traits{
+
+ template<typename T>
+ struct has_static_size{
+ typedef typename T::size_type size_type;
+ typedef char yes;
+ typedef char (&no)[2];
+ typedef const size_type sig;
+
+ template<typename U,sig> struct sfinae { };
+ template<typename U> static yes test(sfinae<U, U::static_size>*);
+ template<typename U> static no test(...);
+
+ BOOST_STATIC_CONSTANT(
+ bool,
+ value = sizeof( test<T>(0) ) == sizeof( yes )
+ );
+
+ typedef boost::mpl::bool_<value> type;
+ };
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_fifo.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_fifo.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,34 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_FIFO_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_FIFO_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/assign/v2/detail/fwd/container.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_tag{
+ struct fifo{};
+}// container_tag
+namespace container_type_traits{
+
+ template<typename V>
+ struct is_fifo : boost::mpl::false_{};
+
+ template<typename T,typename A>
+ struct is_fifo< std::queue<T,A> > : boost::mpl::true_{};
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_lifo.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_lifo.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,34 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_LIFO_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_LIFO_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/assign/v2/detail/fwd/container.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_tag{
+ struct lifo{};
+}// container_tag
+namespace container_type_traits{
+
+ template<typename V>
+ struct is_lifo : boost::mpl::false_{};
+
+ template<typename T,typename A>
+ struct is_lifo< std::stack<T,A> > : boost::mpl::true_{};
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_map.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_map.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,39 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_MAP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_MAP_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/assign/v2/detail/fwd/container.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_type_traits{
+
+ template<typename V>
+ struct is_map_impl: boost::mpl::false_{};
+
+ template<typename K,typename D,typename C,typename A>
+ struct is_map_impl< std::map<K,D,C,A> > : boost::mpl::true_{};
+
+
+ template<typename V>
+ struct is_map : is_map_impl<
+ typename boost::remove_cv<V>::type
+ >{};
+
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,32 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_RANGE_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_tag{
+ struct range{};
+}// container_tag
+namespace container_type_traits{
+
+ template<typename V>
+ struct is_range{
+ // purposedly left blank.
+ };
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_sorted.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_sorted.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,37 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_SORTED_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_SORTED_ER_2010_HPP
+#include <boost/mpl/bool.hpp>
+#include <boost/assign/v2/detail/fwd/container.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_tag{
+ struct sorted{};
+}// container_tag
+namespace container_type_traits{
+
+ template<typename V>
+ struct is_sorted : boost::mpl::false_{};
+
+ template<typename T,typename C,typename A>
+ struct is_sorted< std::set<T,C,A> > : boost::mpl::true_{};
+
+ template<typename K,typename T,typename C,typename A>
+ struct is_sorted< std::map<K,T,C,A> > : boost::mpl::true_{};
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_static_array.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/is_static_array.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,40 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_STATIC_ARRAY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_IS_STATIC_ARRAY_ER_2010_HPP
+#include <boost/assign/v2/detail/type_traits/container/has_static_size.hpp>
+
+namespace boost{
+
+// this here is necessary to avoid compiler error in <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template< class T, std::size_t sz >
+ class array;
+#endif
+
+namespace assign{
+namespace v2{
+namespace container_tag{
+ struct static_array{};
+}// container_tag
+namespace container_type_traits{
+
+ // TODO also check that operator[] exists
+
+ template<typename T>
+ struct is_static_array : has_static_size<T>{};
+
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/value.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/container/value.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,33 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_VALUE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_CONTAINER_VALUE_ER_2010_HPP
+#include <boost/assign/v2/detail/type_traits/value.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace container_type_traits
+{
+
+ // TODO
+ // if range_reference<V>::type exists,
+ // remove_reference<typename range_reference<V>::type>::type
+ // else
+ // type_traits::value<V>::type
+ template<typename V>
+ struct value : type_traits::value<V>{};
+
+}// container_type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/decay.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/decay.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_DECAY_OF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_DECAY_OF_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/decay.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace type_traits{
+
+ // Add constness to array parameters
+ // to support string literals properly
+ template< class T >
+ struct decay : boost::mpl::eval_if<
+ ::boost::is_array<T>,
+ ::boost::decay<const T>,
+ ::boost::decay<T> >
+ {};
+
+}// type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/has_value_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/has_value_type.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,45 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_HAS_VALUE_TYPE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_HAS_VALUE_TYPE_ER_2010_HPP
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace type_traits{
+
+ template<typename T>
+ struct has_value_type{
+
+ typedef typename boost::type_traits::yes_type yes_;
+ typedef typename boost::type_traits::no_type no_;
+
+
+ template<typename U>
+ static yes_ test(U*, typename U::value_type* p = 0);
+ static no_ test(...);
+
+ BOOST_STATIC_CONSTANT(
+ bool,
+ value = sizeof( test((T*)0) ) == sizeof( yes_ )
+ );
+ typedef boost::mpl::bool_<value> type;
+ };
+
+
+}// type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/is_stl_pair.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/is_stl_pair.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,37 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_IS_STL_PAIR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_IS_STL_PAIR_ER_2010_HPP
+#include <utility>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace type_traits{
+
+// template< class T, class U >
+// boost::type_traits::yes_type is_pair( const std::pair<T,U>* );
+// boost::type_traits::no_type is_pair( ... );
+
+ template<typename T>
+ struct is_stl_pair : boost::mpl::false_{};
+
+ template<typename T,typename U>
+ struct is_stl_pair< std::pair<T, U> > : boost::mpl::true_{};
+
+
+}// type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/meta_convert.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/meta_convert.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_HAS_VALUE_TYPE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_HAS_VALUE_TYPE_ER_2010_HPP
+#include <boost/assign/v2/ref/detail/convert_traits/result.hpp>
+
+namespace boost{
+ struct boost::use_default;
+namespace assign{
+namespace v2{
+namespace type_traits{
+
+ template<typename Tag = use_default>
+ struct meta_convert{
+
+ template<typename T1,typename T2>
+ struct apply : ref::convert_traits::result<T1,T2>{};
+
+ };
+
+ // Specialize on Tag as needed.
+
+}// type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/type_traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/type_traits.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,20 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_TYPE_TRAITS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_TYPE_TRAITS_ER_2010_HPP
+
+#include <boost/assign/v2/detail/type_traits/decay.hpp>
+#include <boost/assign/v2/detail/type_traits/has_value_type.hpp>
+#include <boost/assign/v2/detail/type_traits/is_stl_pair.hpp>
+#include <boost/assign/v2/detail/type_traits/meta_convert.hpp>
+#include <boost/assign/v2/detail/type_traits/value.hpp>
+#include <boost/assign/v2/detail/type_traits/container/container.hpp>
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/detail/type_traits/value.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/detail/type_traits/value.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_TYPE_TRAITS_VALUE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_TYPE_TRAITS_VALUE_ER_2010_HPP
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace type_traits{
+
+ template<typename V>
+ struct value_impl : boost::mpl::identity<
+ typename V::value_type
+ >{};
+
+ template<typename V>
+ struct value : value_impl<
+ typename boost::remove_cv<V>::type
+ >{};
+
+}// type_traits
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/at_next.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/at_next.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,40 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_AT_NEXT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_AT_NEXT_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+#include <boost/assign/v2/detail/type_traits/value.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_tag{ struct at_next{}; }
+namespace put_aux{
+
+ template<>
+ struct modifier<v2::put_tag::at_next>{
+
+ modifier():i( 0 ){};
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{
+ v.at( i++ ) = t;
+ }
+
+ private:
+ mutable std::size_t i;
+ };
+
+}// assign_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/deduce.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/deduce.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,74 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_DEDUCE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_DEDUCE_ER_2010_HPP
+#include <boost/assign/v2/detail/mpl/switch.hpp>
+
+#include <boost/assign/v2/detail/type_traits/container/is_static_array.hpp>
+#include <boost/assign/v2/detail/type_traits/container/has_push.hpp>
+#include <boost/assign/v2/detail/type_traits/container/is_map.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace switch_tag{
+ struct deduce_put{};
+}// switch_tag
+namespace put_tag{
+ struct at_next;
+ struct insert;
+ struct push;
+ struct push_back;
+}// put_tag
+namespace mpl{
+
+ template<>
+ struct case_<switch_tag::deduce_put,0> :
+ v2::mpl::wrap<
+ v2::put_tag::insert,
+ v2::container_type_traits::is_map
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_put,1> :
+ v2::mpl::wrap<
+ v2::put_tag::at_next,
+ v2::container_type_traits::is_static_array
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_put,2> :
+ v2::mpl::wrap<
+ put_tag::push,
+ container_type_traits::has_push_deduced_value
+ >{};
+
+ template<>
+ struct case_<switch_tag::deduce_put,3> :
+ v2::mpl::wrap<put_tag::push_back>{};
+
+}// mpl
+namespace put_aux{
+
+ template<typename T>
+ struct deduce_modifier : v2::mpl::switch_<
+ v2::switch_tag::deduce_put,
+ T
+ >
+ {};
+
+ template<typename Tag> struct new_put_tag{};
+
+}// put_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/def.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/def.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,38 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_DEF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_DEF_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_tag{
+ // add as necessary
+}
+namespace put_aux{
+
+ template<typename Tag>
+ struct modifier{
+
+ // Specialize on Tag:
+ // template<typename V,typename T>
+ // void impl(V& v,T& t)const;
+
+ // WARNING: some modifiers such as modifier<put_tag::array> have an
+ // internal state that affects impl()'s working.
+
+ };
+
+}// put_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/incr_lookup.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/incr_lookup.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,39 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_INCR_LOOKUP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_INCR_LOOKUP_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+#include <boost/assign/v2/detail/type_traits/value.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+
+// lookup_key
+namespace put_tag{ struct incr_lookup{}; }
+namespace put_aux{
+
+ template<>
+ struct modifier<v2::put_tag::incr_lookup>{
+
+ modifier(){};
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{
+ ++ v[ t ];
+ }
+ };
+
+}// assign_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/insert.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/insert.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,36 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_INSERT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_INSERT_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_tag{ struct insert{}; }
+namespace put_aux{
+
+ template<>
+ struct modifier<v2::put_tag::insert>
+ {
+
+ modifier(){}
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{ v.insert( t ); }
+
+ };
+
+}// assign_aux
+}// v2
+}// assign
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/keyword.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/keyword.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_KEYWORD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_KEYWORD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_aux{
+
+ template<typename Tag> struct put_tag{};
+
+ struct keyword{
+
+ template<typename Tag>
+ put_tag<Tag> operator=( Tag const& dummy)const
+ {
+ return put_tag<Tag>();
+ }
+
+ };
+
+ template<typename T,typename NewTag>
+ typename T::result_of_modulo::template put_tag<NewTag>::type
+ operator%(
+ T const& t,
+ put_aux::put_tag<NewTag> const& h
+ )
+ {
+ return t.template modulo_put_tag<NewTag>();
+ }
+
+}// put_aux
+namespace{
+ put_aux::keyword const _put_tag = put_aux::keyword();
+}
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/modifier.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/modifier.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,23 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_MODIFIER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_MODIFIER_ER_2010_HPP
+
+#include <boost/assign/v2/put/modifier/at_next.hpp>
+#include <boost/assign/v2/put/modifier/incr_lookup.hpp>
+#include <boost/assign/v2/put/modifier/insert.hpp>
+#include <boost/assign/v2/put/modifier/push.hpp>
+#include <boost/assign/v2/put/modifier/push_back.hpp>
+
+#include <boost/assign/v2/put/modifier/deduce.hpp>
+#include <boost/assign/v2/put/modifier/keyword.hpp>
+#include <boost/assign/v2/put/modifier/repeat.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/push.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/push.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,36 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_PUSH_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_PUSH_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_tag{ struct push{}; }
+namespace put_aux{
+
+ template<>
+ struct modifier<v2::put_tag::push>{
+
+ modifier(){}
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{ v.push( t ); }
+
+ };
+
+}// put_aux
+}// v2
+}// assign
+}// boost
+
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/push_back.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/push_back.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_PUSH_BACK_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_PUSH_BACK_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_tag{ struct push_back{}; }
+namespace put_aux{
+
+ template<>
+ struct modifier<v2::put_tag::push_back>{
+
+ modifier(){}
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{ v.push_back( t ); }
+
+ };
+
+}// put_aux
+}// v2
+}// assign
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/put/modifier/repeat.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/modifier/repeat.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_REPEAT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODIFIER_REPEAT_ER_2010_HPP
+#include <boost/assign/v2/put/modifier/def.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+
+// lookup_key
+namespace put_tag{ template<typename Tag> struct repeat{}; }
+namespace put_aux{
+
+ template<typename Tag>
+ struct modifier<v2::put_tag::repeat<Tag> >{
+
+ typedef std::size_t size_type;
+
+ modifier( ){}
+ explicit modifier( size_type const& n_ ):n( n_ ){};
+
+ template<typename V,typename T>
+ void impl(V& v,T& t)const{
+ size_type m = n;
+ while(m--) this->inner.impl( v, t );
+ }
+
+ private:
+ size_type n;
+ modifier<Tag> inner;
+ };
+
+ // Warning : does not check against nested repeat
+
+}// assign_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/put.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/put.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,17 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_PUT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_PUT_ER_2010_HPP
+
+#include <boost/assign/v2/put/modifier/modifier.hpp>
+#include <boost/assign/v2/put/wrapper/wrapper.hpp>
+#include <boost/assign/v2/put/range/range.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/adaptor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/adaptor.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_ADAPTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_ADAPTOR_ER_2010_HPP
+#include <boost/assign/v2/put/range/modifier/modifier.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_range_aux
+{
+ template<typename From>
+ struct adaptor1
+ {
+ adaptor1(From const& from):value(from){}
+ mutable From const& value;
+ private:
+ adaptor1();
+ };
+
+ struct adaptor2
+ {
+ adaptor2(){}
+ template<typename From>
+ adaptor1<From> operator()(const From& from)const
+ {
+ typedef adaptor1<From> result_;
+ return result_( from );
+ }
+ };
+
+ template<typename To,typename From>
+ To& operator|(To& to, put_range_aux::adaptor1<From> const& from)
+ {
+ typedef typename put_range_aux::deduce_operation<To>::type tag_;
+ put_range_aux::put_range( tag_(), from.value, to );
+ return to;
+ }
+
+}// put_range_aux
+namespace adaptor
+{
+ put_range_aux::adaptor2 const put_range
+ = put_range_aux::adaptor2();
+
+}// adaptor
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/convert.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/convert.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,74 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_CONVERT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_CONVERT_ER_2010_HPP
+#include <boost/assign/v2/put/range/adaptor.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace convert_aux
+{
+ template<typename To>
+ struct adaptor
+ {
+ adaptor(){}
+ };
+
+ template<typename From,typename To>
+ To operator|(From& from, convert_aux::adaptor<To> const& dummy)
+ {
+ To to;
+ return to | adaptor::put_range( from );
+ }
+
+}// convert_aux
+namespace adaptor{
+
+ template<typename To>
+ convert_aux::adaptor<To> convert(){ return convert_aux::adaptor<To>(); }
+
+}// adaptor
+
+ template<typename To,typename From>
+ To convert(From const& from){
+ return from | adaptor::convert<To>();
+ }
+
+}// v2
+}// assign
+}// boost
+
+#endif
+
+// ------ CLASS MEMBER ---- //
+
+#ifndef BOOST_ASSIGN_V2_CONVERT_CONVERT_MF
+#define BOOST_ASSIGN_V2_CONVERT_CONVERT_MF \
+ template<typename To> \
+ To convert()const \
+ { \
+ namespace ns = boost::assign::v2; \
+ return (*this) | adaptor::convert<To>(); \
+ } \
+/**/
+#endif
+
+#ifndef BOOST_ASSIGN_V2_CONVERT_OPERATOR_MF
+#define BOOST_ASSIGN_V2_CONVERT_OPERATOR_MF \
+ template<typename To> \
+ operator To ()const \
+ { \
+ namespace ns = boost::assign::v2; \
+ return (*this) | adaptor::convert<To>(); \
+ } \
+/**/
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/modifier/copy.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/modifier/copy.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,48 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_COPY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_COPY_ER_2010_HPP
+#include <string>
+#include <stdexcept>
+#include <boost/throw_exception.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/size.hpp>
+#include <boost/range/algorithm/copy.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_range_tag
+{
+ struct copy{};
+}// convert_tag
+namespace put_range_aux{
+
+ template<typename From,typename To>
+ void put_range (put_range_tag::copy, From const& from, To& to)
+ {
+ if(boost::size( to ) < boost::size( from ) ){
+ typedef std::string str_;
+ const str_ str =
+ str_("convert<to>(")
+ + "convert_tag::copy, from)"
+ + "To::size() < boost::size( from )";
+ std::out_of_range e( str );
+ boost::throw_exception(e);
+ }
+ boost::copy( from, boost::begin( to ) );
+ }
+
+}// put_range_aux{
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/modifier/deduce.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/modifier/deduce.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,62 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_DEDUCE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_DEDUCE_ER_2010_HPP
+#include <boost/assign/v2/detail/type_traits/container/has_static_size.hpp>
+#include <boost/assign/v2/detail/type_traits/container/has_push.hpp>
+#include <boost/assign/v2/detail/mpl/switch.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace switch_tag{
+ struct put_range{};
+}// switch_tag
+namespace put_range_tag{
+ struct copy;
+ struct put;
+ struct range;
+}// put_range_tag
+namespace mpl{
+
+ template<>
+ struct case_<switch_tag::put_range,0> :
+ v2::mpl::wrap<
+ put_range_tag::put,
+ container_type_traits::has_push_deduced_value
+ >{};
+
+ template<>
+ struct case_<switch_tag::put_range,1> :
+ v2::mpl::wrap<
+ v2::put_range_tag::copy,
+ v2::container_type_traits::has_static_size
+ >{};
+
+ template<>
+ struct case_<switch_tag::put_range,2> :
+ v2::mpl::wrap<put_range_tag::range>{};
+
+}// mpl
+namespace put_range_aux
+{
+
+ template<typename T>
+ struct deduce_operation : v2::mpl::switch_<
+ v2::switch_tag::put_range,
+ T
+ >{};
+
+}// convert_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/modifier/modifier.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/modifier/modifier.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,18 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_MODIFIER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_MODIFIER_ER_2010_HPP
+
+#include <boost/assign/v2/put/range/modifier/put.hpp>
+#include <boost/assign/v2/put/range/modifier/copy.hpp>
+#include <boost/assign/v2/put/range/modifier/range.hpp>
+#include <boost/assign/v2/put/range/modifier/deduce.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/modifier/put.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/modifier/put.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,39 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_PUT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_PUT_ER_2010_HPP
+#include <boost/range/algorithm/for_each.hpp>
+#include <boost/assign/v2/put/wrapper/make.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_range_tag
+{
+ struct put{};
+}// convert_tag
+namespace put_range_aux{
+
+ template<typename From,typename To>
+ void put_range(
+ put_range_tag::put,
+ From const& from,
+ To& to
+ )
+ {
+ ::boost::for_each( from, put( to ) );
+ }
+
+}// put_range_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/modifier/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/modifier/range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,39 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_MODIFIER_RANGE_ER_2010_HPP
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_range_tag
+{
+ struct range{};
+}// convert_tag
+namespace put_range_aux{
+
+ template<typename From,typename To>
+ void put_range(
+ put_range_tag::range,
+ From const& from,
+ To& to
+ )
+ {
+ to = To( boost::begin( from ), boost::end( from ) );
+ }
+
+}// put_range_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/range/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/range/range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,29 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_RANGE_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_RANGE_RANGE_ER_2010_HPP
+#include <boost/assign/v2/put/range/adaptor.hpp>
+#include <boost/assign/v2/put/range/convert.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+
+ template<typename From,typename To>
+ To& put_range(From const& from, To& to)
+ {
+ return to | adaptor::put_range( from );
+ }
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/wrapper/crtp.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/wrapper/crtp.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,260 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_WRAPPER_CRTP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_WRAPPER_CRTP_ER_2010_HPP
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+#include <boost/assign/v2/detail/functor/functor.hpp>
+#include <boost/assign/v2/detail/keyword/keyword.hpp>
+#include <boost/assign/v2/put/modifier/modifier.hpp>
+
+// --------------- //
+// Usage //
+// --------------- //
+// Calling
+// object = put( v );
+// wraps a class object around v, whose overloaded operator() and csv() mf act
+// as a modifiers of v. To recover v, call
+// object.unwrap();
+//
+// Let cond1 = ( k < BOOST_ASSIGN_V2_LVALUE_CONST_ARITY_BOUND )
+// Let cond2 = all arguments are lvalues.
+//
+// -- Overloaded syntax --
+//
+// For 0 <= k(i) < BOOST_ASSIGN_V2_ARITY_BOUND
+// Expression
+// object( x11, ..., x1k(1) ) ... ( xn1, ..., xnk(n) )
+// Side effect
+// for each i=1,...,n puts f( xi1, ..., xik(i) ) into v for each i=1,...,n.
+// Returns a reference to the wrapper.
+//
+// Each argument's lvalue is preserved if either cond1 OR (!cond1 AND cond2)
+// In all other cases, arguments are passed as const references.
+//
+// ----- csv syntax ------
+//
+// For k(i) = 1, and n < BOOST_ASSIGN_V2_CSV_ARITY_BOUND,
+// object.csv( x11, ..., xn1 )
+// Same return and effect as above by redefining cond1 = false.
+
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_aux{
+
+ // T = container_type_traits::value<V>::type
+ template<typename V>
+ struct crtp_traits
+ {
+ typedef typename v2::container_type_traits::value<V>::type value_type;
+ typedef typename result_of::constructor<value_type>::type functor_type;
+ typedef typename put_aux::deduce_modifier<V>::type put_tag;
+ };
+
+ // Requirements:
+ // d.unwrap() returns a reference to V&
+ // D d(U v, F const& f); Constructs an object, d, of type D.
+ // Usually f is passed to the crtp. U = V& or V const& depending on need.
+ template<typename V,typename F, typename Tag,typename D,typename Traits>
+ class crtp : public functor_aux::crtp_unary_and_up<
+ crtp<V,F,Tag,D,Traits>,
+ boost::mpl::always< D const& >
+ >
+ {
+
+ public:
+ typedef D const& result_type;
+
+ protected:
+
+ typedef functor_aux::crtp_unary_and_up<
+ crtp,
+ boost::mpl::always<result_type>
+ > super_t;
+
+ typedef put_aux::modifier<Tag> modifier_;
+
+ D & derived(){ return static_cast<D&>(*this); }
+ D const& derived()const{ return static_cast<D const&>(*this); }
+
+ public:
+
+ crtp(){}
+ explicit crtp(F const& f1 ):f( f1 ) {}
+
+ using super_t::operator();
+ result_type operator()()const
+ {
+ return this->arg_deduct( this->f() );
+ return this->derived();
+ }
+
+#define BOOST_ASSIGN_V2_impl(z, N, data) \
+ template<BOOST_PP_ENUM_PARAMS(N, typename T)> \
+ result_type \
+ impl( BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _) )const \
+ { \
+ return this->arg_deduct( this->f(BOOST_PP_ENUM_PARAMS(N,_)) ); \
+ } \
+/**/
+BOOST_PP_REPEAT_FROM_TO(
+ 1,
+ BOOST_ASSIGN_V2_ARITY_BOUND,
+ BOOST_ASSIGN_V2_impl,
+ ~
+)
+#undef BOOST_ASSIGN_V2_impl
+#define BOOST_ASSIGN_V2_invoke(z,i,data) ( BOOST_PP_CAT( _,i ) )
+#define BOOST_ASSIGN_V2_csv(z, N, data) \
+ template<BOOST_PP_ENUM_PARAMS(N,typename T)> \
+ result_type \
+ csv( BOOST_PP_ENUM_BINARY_PARAMS(N, T, &_) )const \
+ { \
+ (*this) BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_invoke, ~ ); \
+ return this->derived(); \
+ } \
+ template<BOOST_PP_ENUM_PARAMS(N,typename T)> \
+ result_type \
+ csv( BOOST_PP_ENUM_BINARY_PARAMS(N, T, const &_) )const \
+ { \
+ (*this) BOOST_PP_REPEAT(N, BOOST_ASSIGN_V2_invoke, ~ ); \
+ return this->derived(); \
+ } \
+/**/
+BOOST_PP_REPEAT_FROM_TO(
+ 1,
+ BOOST_ASSIGN_V2_CSV_ARITY_BOUND,
+ BOOST_ASSIGN_V2_csv,
+ ~
+)
+#undef BOOST_ASSIGN_V2_invoke
+#undef BOOST_ASSIGN_V2_csv
+
+ F const& fun()const{ return this->f; }
+
+ result_type copy_modifier(const modifier_& that)
+ {
+ this->modifier = that;
+ return this->derived();
+ }
+
+ struct result_of_modulo{
+
+ template<typename NewTag>
+ struct put_tag : Traits::template new_tag<NewTag>{};
+
+ template<typename NewF> struct fun
+ : Traits::template new_fun<NewF>{};
+
+ struct incr_lookup : Traits::template new_fun_tag<
+ functor_aux::identity,
+ put_tag::incr_lookup
+ >{};
+
+ struct repeat
+ {
+ typedef put_tag::repeat<Tag> new_tag_;
+ typedef put_aux::modifier<new_tag_> modifier_;
+ typedef typename Traits::template new_tag<new_tag_>::type type;
+ };
+
+ struct deduce
+ {
+ typedef functor_aux::deduce_constructor<V> caller_;
+ typedef typename caller_::type cons_;
+ typedef typename Traits::template new_fun<cons_>::type type;
+ };
+
+ };
+
+ template<typename NewTag>
+ typename result_of_modulo::template put_tag<NewTag>::type
+ modulo_put_tag()const
+ {
+ typedef typename result_of_modulo::template put_tag<
+ NewTag
+ >::type result_;
+ return result_( this->derived().unwrap(), this->fun() );
+ }
+
+ template<typename F1>
+ typename result_of_modulo::template fun<F1>::type
+ modulo_fun( const F1& f)const
+ {
+ typedef typename result_of_modulo::template fun<
+ F1
+ >::type result_;
+ return result_( this->derived().unwrap(), f );
+ }
+
+ typename result_of_modulo::incr_lookup::type
+ modulo_incr_lookup()const{
+ return (*this)
+ % ( _fun = _identity )
+ % ( _put_tag = put_tag::incr_lookup() );
+ }
+
+ template<typename N>
+ typename result_of_modulo::repeat::type
+ modulo_repeat(N const& n)const
+ {
+ typedef typename result_of_modulo::repeat traits_;
+ typedef typename traits_::modifier_ modifier_;
+ return (
+ (*this) % ( _put_tag = put_tag::repeat<Tag>() )
+ ).copy_modifier( modifier_( n ) );
+ }
+
+ typename result_of_modulo::deduce::type
+ modulo_deduce()const
+ {
+ typedef functor_aux::deduce_constructor<V> caller_;
+ typedef typename caller_::type cons_;
+ typedef typename result_of_modulo::deduce::type result_;
+ return result_(
+ this->derived().unwrap(),
+ caller_::call()
+ );
+ }
+
+ protected:
+
+ template<typename T>
+ result_type arg_deduct(T& t)const
+ {
+ this->modifier.impl( this->derived().unwrap(), t );
+ return this->derived();
+ }
+
+ template<typename T>
+ result_type arg_deduct(T const& t)const
+ {
+ this->modifier.impl( this->derived().unwrap(), t );
+ return this->derived();
+ }
+ modifier_ modifier;
+ F f;
+ };
+
+}// put_aux
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/wrapper/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/wrapper/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,124 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_WRAPPER_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_WRAPPER_MAKE_ER_2010_HPP
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/put/wrapper/crtp.hpp>
+
+// Modifiers:
+// object % ( _put_tag = Tag() ); Component 1-
+// object % ( _fun = F() ); Component 2-
+// object % ( _incr_lookup ); ++v[ f( xi1, ..., xik(i) ) ];
+// object % ( _repeat = n );
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_aux{
+
+ template<typename V,typename F, typename Tag>
+ class put_wrapper;
+
+ template<typename V,typename F,typename Tag>
+ struct put_wrapper_modifier_traits
+ {
+ template<typename Tag1>
+ struct new_tag{
+ typedef put_wrapper<V,F,Tag1> type;
+ };
+ template<typename F1>
+ struct new_fun{
+ typedef put_wrapper<V,F1,Tag> type;
+ };
+
+ template<typename F1,typename Tag1>
+ struct new_fun_tag{
+ typedef put_wrapper<V,F1,Tag1> type;
+ };
+ };
+
+ template<typename V,typename F, typename Tag>
+ class put_wrapper
+ :
+ protected ref::wrapper< // must be the first base.
+ ref::assign_tag::copy,
+ V
+ >,
+ public put_aux::crtp<
+ V,
+ F,
+ Tag,
+ put_wrapper<V,F,Tag>,
+ put_wrapper_modifier_traits<V,F,Tag>
+ >
+ {
+
+ typedef put_aux::crtp<
+ V,
+ F,
+ Tag,
+ put_wrapper<V,F,Tag>,
+ put_wrapper_modifier_traits<V,F,Tag>
+ > super2_t;
+
+ public:
+
+ typedef typename super2_t::result_type result_type;
+
+ protected:
+
+ typedef put_aux::modifier<Tag> modifier_;
+ typedef ref::assign_tag::copy assign_tag_;
+ typedef ref::wrapper<assign_tag_,V> super1_t;
+
+ public:
+
+ put_wrapper(){}
+ explicit put_wrapper( V& v ) : super1_t( v ) {}
+ explicit put_wrapper( V& v, F const& f1 )
+ : super1_t( v ), super2_t( f1 ){
+ // This constructor is required by crtp
+ // when Tag or F is modified.
+ }
+
+ V& unwrap()const{
+ return static_cast<super1_t const&>(*this).unwrap();
+ }
+
+
+ };
+
+}// put_aux
+namespace result_of{
+
+ template<typename V>
+ struct put
+ {
+ typedef put_aux::crtp_traits<V> traits_;
+ typedef typename traits_::functor_type f_;
+ typedef typename traits_::put_tag put_tag_;
+ typedef put_aux::put_wrapper<V,f_,put_tag_> type;
+ };
+
+}// result_of
+
+ template<typename V>
+ typename result_of::put<V>::type
+ put( V& v )
+ {
+ typedef typename result_of::put<V>::type result_;
+ return result_( v );
+ }
+
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/put/wrapper/wrapper.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/wrapper/wrapper.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_PUT_WRAPPER_WRAPPER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_WRAPPER_WRAPPER_ER_2010_HPP
+
+#include <boost/assign/v2/put/wrapper/crtp.hpp>
+#include <boost/assign/v2/put/wrapper/make.hpp>
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/anon.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/anon.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_ANON_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_ANON_ER_2010_HPP
+
+#include <boost/assign/v2/ref/anon/functor/functor.hpp>
+#include <boost/assign/v2/ref/anon/csv/csv.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_copy.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_copy.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_COPY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_COPY_ER_2010_HPP
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/ref/anon/csv/assign_xxx.hpp>
+
+#define xxx_Tag1 assign_tag::copy
+BOOST_ASSIGN_V2_REF_CSV_ARRAY_ASSIGN_XXX(assign_copy)
+#undef xxx_Tag1
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_rebind.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_rebind.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_REBIND_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_REBIND_ER_2010_HPP
+#include <boost/assign/v2/ref/wrapper/rebind.hpp>
+#include <boost/assign/v2/ref/anon/csv/assign_xxx.hpp>
+
+#define xxx_Tag1 assign_tag::rebind
+BOOST_ASSIGN_V2_REF_CSV_ARRAY_ASSIGN_XXX(assign_rebind)
+#undef xxx_Tag1
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_xxx.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/assign_xxx.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,49 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_XXX_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_ASSIGN_XXX_ER_2010_HPP
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+#include <boost/assign/v2/ref/anon/csv/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/csv/pp.hpp>
+
+// Usage:
+// #define xxx_Tag1 name
+// BOOST_ASSIGN_V2_REF_CSV_ARRAY_ASSIGN_XXX( ns )
+// #undef xxx_Tag1
+
+#define BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter( z, n, data ) \
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl( T , n, 0, xxx_Tag1 ) \
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl( T const, n, 0, xxx_Tag1 ) \
+/**/
+#define BOOST_ASSIGN_V2_REF_CSV_ARRAY_ASSIGN_XXX( NS ) \
+namespace boost{ \
+namespace assign{ \
+namespace v2{ \
+namespace ref{ \
+namespace NS{ \
+namespace nth_result_of{ \
+ template<std::size_t N,typename T> \
+ struct csv_anon : ref::nth_result_of::csv_anon<N,xxx_Tag1,T>{};\
+} \
+BOOST_PP_REPEAT_FROM_TO( \
+ 1, \
+ BOOST_ASSIGN_V2_CSV_ARITY_BOUND, \
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter, \
+ ~ \
+) \
+} \
+} \
+} \
+} \
+} \
+/**/
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/csv.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/csv.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,23 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_CSV_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_CSV_ER_2010_HPP
+#include <boost/assign/v2/ref/anon/csv/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/csv/make.hpp>
+#include <boost/assign/v2/ref/anon/csv/assign_copy.hpp>
+#include <boost/assign/v2/ref/anon/csv/assign_rebind.hpp>
+
+#undef BOOST_ASSIGN_V2_REF_CSV_ARRAY_invoke
+#undef BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl
+#undef xxx_Tag1
+#undef BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter
+#undef BOOST_ASSIGN_V2_REF_CSV_ARRAY_ASSIGN_XXX
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,61 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_MAKE_ER_2010_HPP
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/assign/v2/detail/keyword/nil.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+#include <boost/assign/v2/ref/anon/csv/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/csv/pp.hpp>
+
+// Usage
+// using namespace boost::assign::v2::ref::csv;
+// csv_anon<assign_tag::name>( a, b, c );
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace result_of{
+
+ template<typename Tag1,typename T>
+ struct empty_csv_anon
+ : nth_result_of::csv_anon<0, Tag1, T>{};
+
+}// result_of
+
+ template<typename Tag1, typename T>
+ typename result_of::empty_csv_anon<Tag1, T>::type
+ csv_anon( keyword_aux::nil )
+ {
+ typedef typename result_of::empty_csv_anon<Tag1, T>::type result_;
+ return result_();
+ }
+
+#define BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter( z, n, data )\
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl(T , n, 1, Tag1 ) \
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl(T const, n, 1, Tag1 ) \
+/**/
+
+BOOST_PP_REPEAT_FROM_TO(
+ 1,
+ BOOST_ASSIGN_V2_CSV_ARITY_BOUND,
+ BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter,
+ ~
+)
+
+#undef BOOST_ASSIGN_V2_REF_CSV_ARRAY_iter
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/nth_result_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/nth_result_of.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_NTH_RESULT_OF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_NTH_RESULT_OF_ER_2010_HPP
+#include <boost/mpl/empty_base.hpp>
+#include <boost/assign/v2/ref/anon/detail/fast_alloc_fwd.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+ typedef boost::mpl::empty_base csv_tag2_;
+}// anon_aux
+namespace nth_result_of{
+
+ template<std::size_t N,typename Tag1,typename T>
+ struct csv_anon{
+ typedef anon_aux::fast_alloc<N,Tag1,T> type;
+ };
+
+}// nth_result_of
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/csv/pp.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/csv/pp.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,44 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_PP_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_CSV_PP_ER_2010_HPP
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/expr_if.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/assign/v2/detail/config/arity_bound.hpp>
+#include <boost/assign/v2/ref/anon/generic/make.hpp>
+#include <boost/assign/v2/ref/anon/detail/fast_alloc.hpp>
+#include <boost/assign/v2/ref/anon/csv/nth_result_of.hpp>
+
+#define BOOST_ASSIGN_V2_REF_CSV_ARRAY_invoke(z,n,data) \
+ ( BOOST_PP_CAT(_,n) ) \
+/**/
+
+#define BOOST_ASSIGN_V2_REF_CSV_ARRAY_tpl(U, N, param, Tag1) \
+ template<BOOST_PP_EXPR_IF(param, typename Tag1) \
+ BOOST_PP_COMMA_IF(param) typename T> \
+ typename nth_result_of::csv_anon< \
+ N, \
+ BOOST_PP_EXPR_IF(param, Tag1) BOOST_PP_COMMA_IF(param) \
+ U \
+ >::type \
+ csv_anon( BOOST_PP_ENUM_PARAMS(N, U& _) ) \
+ { \
+ return generic_anon< \
+ Tag1, \
+ anon_aux::csv_tag2_ \
+ > \
+ BOOST_PP_REPEAT( N, BOOST_ASSIGN_V2_REF_CSV_ARRAY_invoke, ~ ) ; \
+ } \
+/**/
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,68 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_FAST_ALLOC_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_FAST_ALLOC_ER_2010_HPP
+#include <boost/assign/v2/ref/wrapper/wrapper.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/assign_array.hpp>
+#include <boost/assign/v2/ref/anon/detail/interface.hpp>
+#include <boost/assign/v2/ref/anon/detail/fast_alloc_fwd.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace alloc_tag{
+ struct fast_alloc{};
+}// alloc_tag
+namespace anon_aux{
+
+ template<std::size_t N,typename Tag, typename T>
+ class fast_alloc
+ : public anon_aux::interface<
+ N, Tag, T, fast_alloc<N,Tag,T>
+ >
+ {
+
+ typedef Tag assign_tag_;
+ typedef typename ref::wrapper<assign_tag_,T> wrapper_;
+ typedef boost::array<wrapper_,N> array_;
+
+ public:
+
+ fast_alloc(){}
+
+ template<typename L>
+ fast_alloc(const L& l){
+ fusion_list_aux::assign_array(
+ this->array,
+ l
+ );
+ }
+
+ array_& impl(){
+ return this->array;
+ }
+
+ array_ const & impl()const{
+ return this->array;
+ }
+
+ protected:
+ mutable array_ array;
+
+ };
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/detail/fast_alloc_fwd.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,29 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_FAST_ALLOC_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_FAST_ALLOC_FWD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace alloc_tag{
+ struct fast_alloc;
+}// alloc_tag
+namespace anon_aux{
+ template<std::size_t N, typename Tag, typename T>
+ class fast_alloc;
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/detail/interface.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/detail/interface.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,215 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_INTERFACE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_INTERFACE_ER_2010_HPP
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/array.hpp>
+#include <boost/range.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <boost/range/iterator_range.hpp> //iterator_range_detail::
+
+#include <boost/assign/v2/ref/wrapper/framework.hpp>
+#include <boost/assign/v2/ref/wrapper/crtp.hpp>
+#include <boost/assign/v2/ref/detail/unwrap/range.hpp>
+#include <boost/assign/v2/detail/relational_op/relational_op.hpp>
+#include <boost/assign/v2/put/range/convert.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ template<std::size_t N,typename Tag,typename T>
+ struct interface_traits{
+
+ typedef Tag assign_tag_;
+ typedef typename ref::wrapper<assign_tag_,T> wrapper_;
+ typedef boost::array<wrapper_,N> impl_;
+ typedef typename ref::result_of::unwrap_range<impl_>::type range_;
+ typedef typename ref::result_of::unwrap_range<
+ impl_ const>::type range_c_;
+
+ typedef typename boost::unwrap_reference<T>::type value_type;
+ typedef typename boost::add_reference<value_type>::type reference;
+ typedef typename boost::call_traits<reference>::const_reference
+ const_reference;
+ typedef typename boost::range_iterator<range_>::type iterator;
+ typedef typename boost::range_iterator<range_c_>::type const_iterator;
+ // wrappers
+ #ifndef BOOST_MSVC
+ typedef typename boost::range_size<impl_>::type size_type;
+ #endif
+ #ifdef BOOST_MSVC
+ typedef std::size_t size_type;
+ #endif
+ typedef typename boost::range_difference<range_>::type difference_type;
+
+ };
+
+ // Requirements:
+ // D.impl() Returns an array of ref-wrappers
+ // D.impl()const Returns a const array of ref-wrappers
+ template<std::size_t N,typename Tag,typename T,typename D>
+ class interface
+ : public relational_op_aux::crtp<
+ interface<N,Tag,T,D>
+ >
+ {
+
+ typedef interface_traits<N,Tag,T> traits_;
+ typedef typename traits_::wrapper_ wrapper_;
+ typedef typename traits_::impl_ impl_;
+ typedef interface<N,T,Tag,D> this_;
+
+ public:
+ typedef typename traits_::value_type value_type;
+ typedef typename traits_::iterator iterator;
+ typedef typename traits_::const_iterator const_iterator;
+ typedef typename traits_::size_type size_type;
+ typedef typename traits_::difference_type difference_type;
+ typedef typename traits_::reference reference;
+ typedef typename traits_::const_reference const_reference;
+
+ BOOST_STATIC_CONSTANT(size_type, static_size = N);
+
+ iterator begin()
+ {
+ return boost::begin( this->unwrap() );
+ }
+ iterator end()
+ {
+ return boost::end( this->unwrap() );
+ }
+ const_iterator begin()const
+ {
+ return boost::begin( this->unwrap() );
+ }
+ const_iterator end()const
+ {
+ return boost::end( this->unwrap() );
+ }
+
+ size_type size() const
+ {
+ return this->impl().size();
+ }
+ bool empty() const
+ {
+ return this->impl().empty();
+ }
+
+ reference operator[](size_type i)
+ {
+ return (this->impl())[i].unwrap();
+ }
+ const_reference operator[](size_type i)const
+ {
+ return (this->impl())[i].unwrap();
+ }
+
+ reference front()
+ {
+ return (this->impl()).front().unwrap();
+ }
+ const_reference front() const
+ {
+ return (this->impl()).front().unwrap();
+ }
+ reference back()
+ {
+ return (this->impl()).back().unwrap();
+ }
+ const_reference back() const
+ {
+ return (this->impl()).back().unwrap();
+ }
+
+ void swap(interface& other)
+ {
+ typedef boost::mpl::int_<N> int_n_;
+ this->swap_impl(other,int_n_());
+ }
+
+ void assign(T& val)
+ {
+ impl_& ra = this->impl();
+ boost::for_each(ra, functional::assigner<T>( val ));
+ }
+
+ BOOST_ASSIGN_V2_CONVERT_CONVERT_MF
+ BOOST_ASSIGN_V2_CONVERT_OPERATOR_MF
+
+ // Relational op
+
+ template<typename R>
+ bool equal_to(const R& r)const{
+ return ::boost::iterator_range_detail::equal(
+ (*this), r );
+ }
+
+ template<typename R>
+ bool less_than(const R& r)const{
+ return ::boost::iterator_range_detail::less_than(
+ (*this), r );
+ }
+
+ protected:
+ typedef boost::mpl::false_ false_;
+ typedef boost::mpl::true_ true_;
+
+ void swap_impl(interface& other, boost::mpl::int_<0>){}
+
+ template<int N1>
+ void swap_impl(interface& other, boost::mpl::int_<N1>)
+ {
+ reference lhs = (*this)[N1-1];
+ reference rhs = (other)[N1-1];
+ lhs.swap(rhs);
+ typedef boost::mpl::int_<N1-1> next_int_;
+ this->swap_impl( other, next_int_() );
+ }
+
+ typename traits_::range_ unwrap()
+ {
+ return ref::unwrap_range( this->impl() );
+ }
+ typename traits_::range_c_ unwrap()const{
+ return ref::unwrap_range( this->impl() );
+ }
+
+ impl_& impl(){
+ return static_cast<D&>(*this).impl();
+ }
+
+ impl_ const& impl()const{
+ return static_cast<const D&>(*this).impl();
+ }
+
+ };
+
+}// anon_aux
+
+namespace container_type_traits{
+ // TODO
+
+// template<typename T,std::size_t sz>
+// struct is_static_array<boost::array<T, sz> > : boost::mpl::true_{};
+
+}// container_type_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,83 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_LAZY_ALLOC_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_LAZY_ALLOC_ER_2010_HPP
+#include <boost/shared_ptr.hpp>
+#include <boost/assign/v2/ref/wrapper/wrapper.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/assign_array.hpp>
+#include <boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp>
+#include <boost/assign/v2/ref/anon/detail/interface.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace alloc_tag{
+ struct lazy_alloc{};
+}// alloc_tag
+namespace anon_aux{
+
+ template<std::size_t N,typename Tag, typename T, typename D>
+ class lazy_alloc : public anon_aux::interface<
+ N, Tag, T, lazy_alloc<N,Tag,T,D>
+ >
+ {
+ typedef Tag assign_tag_;
+ typedef typename ref::wrapper<assign_tag_,T> wrapper_;
+ typedef boost::array<wrapper_,N> array_;
+
+ typedef boost::mpl::int_<N> size_;
+
+ void alloc_if()const{
+ if(!this->ptr){
+ return this->alloc();
+ }
+ }
+
+ void alloc()const{
+ this->ptr = smart_ptr_(new array_);
+ fusion_list_aux::assign_array(
+ *this->ptr,
+ static_cast<const D&>(*this)
+ );
+ }
+
+ typedef anon_aux::interface<
+ N, Tag, T, lazy_alloc
+ > super_t;
+
+ public:
+
+ array_& impl(){
+ this->alloc_if();
+ return (*this->ptr);
+ }
+
+ array_ const & impl()const{
+ this->alloc_if();
+ return (*this->ptr);
+ }
+
+ using super_t::operator[];
+
+ private:
+
+ typedef boost::shared_ptr<array_> smart_ptr_;
+ mutable smart_ptr_ ptr;
+
+ };
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,29 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_LAZY_ALLOC_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_STATIC_ARRAY_DETAIL_LAZY_ALLOC_FWD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace alloc_tag{
+ struct lazy_alloc;
+}// alloc_tag
+namespace anon_aux{
+ template<std::size_t N, typename Tag, typename T, typename D>
+ class lazy_alloc;
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_copy.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_copy.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,18 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_ASSIGN_COPY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_ASSIGN_COPY_ER_2010_HPP
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/ref/anon/functor/make.hpp>
+#include <boost/assign/v2/ref/anon/functor/assign_xxx.hpp>
+
+BOOST_ASSIGN_V2_REF_EXT_ARRAY_ASSIGN_XXX(assign_copy,assign_tag::copy)
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_rebind.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_rebind.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,18 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_ASSIGN_REBIND_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_ASSIGN_REBIND_ER_2010_HPP
+#include <boost/assign/v2/ref/anon/functor/make.hpp>
+#include <boost/assign/v2/ref/anon/functor/assign_xxx.hpp>
+#include <boost/assign/v2/ref/wrapper/rebind.hpp>
+
+BOOST_ASSIGN_V2_REF_EXT_ARRAY_ASSIGN_XXX(assign_rebind, assign_tag::rebind)
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_xxx.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/assign_xxx.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,70 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+
+// Expand like this:
+// #include <boost/assign/v2/ref/anon/generic/make.hpp>
+// #include <boost/assign/v2/ref/wrapper/xxx.hpp> // defines Tag1
+// BOOST_ASSIGN_V2_REF_EXT_ARRAY_ASSIGN_XXX(NS,Tag1)
+//
+// Usage is the same as that in make.hpp but inside namespace NS, and without
+// the need to specify Tag1.
+
+#ifndef BOOST_ASSIGN_V2_REF_EXT_ARRAY_ASSIGN_XXX
+#define BOOST_ASSIGN_V2_REF_EXT_ARRAY_ASSIGN_XXX(NS,Tag1) \
+ \
+namespace boost{ \
+namespace assign{ \
+namespace v2{ \
+namespace ref{ \
+namespace NS{ \
+namespace nth_result_of{ \
+ template<std::size_t N,typename T> \
+ struct anon : ref::nth_result_of::anon<N,Tag1,T>{}; \
+}\
+namespace result_of{ \
+ \
+ template<typename T> \
+ struct anon_nil : ref::result_of::anon_nil< \
+ Tag1, T \
+ >{}; \
+ \
+ template<typename T> \
+ struct anon : ref::result_of::anon< \
+ Tag1, T \
+ >{}; \
+ \
+} \
+ template<typename T> \
+ typename NS::result_of::anon_nil<T>::type \
+ anon( keyword_aux::nil ) \
+ { \
+ return ref::anon<Tag1,T>( v2::_nil ); \
+ } \
+ template<typename T> \
+ typename NS::result_of::anon<T>::type \
+ anon(T& t) \
+ { \
+ return ref::anon<Tag1>( t ); \
+ } \
+ template<typename T> \
+ typename NS::result_of::anon<T const>::type \
+ anon(T const& t) \
+ { \
+ return ref::anon<Tag1>( t ); \
+ } \
+\
+} \
+} \
+} \
+} \
+} \
+/**/
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/functor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/functor.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,18 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_FUNCTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_FUNCTOR_ER_2010_HPP
+
+#include <boost/assign/v2/ref/anon/functor/make.hpp>
+#include <boost/assign/v2/ref/anon/functor/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/functor/assign_copy.hpp>
+#include <boost/assign/v2/ref/anon/functor/assign_rebind.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,65 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_MAKE_ER_2010_HPP
+#include <boost/assign/v2/ref/anon/generic/make.hpp>
+#include <boost/assign/v2/ref/anon/detail/lazy_alloc.hpp>
+#include <boost/assign/v2/ref/anon/functor/nth_result_of.hpp>
+
+// Usage
+// using namespace boost::assign::v2::ref;
+// anon<assign_tag::name>( a )( b )( c );
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace result_of{
+
+ template<typename Tag1,typename T>
+ struct anon_nil
+ : nth_result_of::anon<0, Tag1, T>{};
+
+ template<typename Tag1, typename T>
+ struct anon
+ : nth_result_of::anon<1, Tag1, T>{};
+
+}// result_of
+
+ template<typename Tag1, typename T>
+ typename result_of::anon_nil<Tag1, T>::type
+ anon( keyword_aux::nil )
+ {
+ typedef anon_aux::ext_tag2_ tag2_;
+ return generic_anon<Tag1,tag2_,T>( v2::_nil );
+ }
+
+ template<typename Tag1,typename T>
+ typename result_of::anon<Tag1, T>::type
+ anon(T& t)
+ {
+ typedef anon_aux::ext_tag2_ tag2_;
+ return generic_anon<Tag1,tag2_>( t );
+ }
+
+ template<typename Tag1,typename T>
+ typename result_of::anon<Tag1, T const>::type
+ anon(T const & t)
+ {
+ typedef anon_aux::ext_tag2_ tag2_;
+ return generic_anon<Tag1,tag2_>( t );
+ }
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/functor/nth_result_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/functor/nth_result_of.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,36 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_NTH_RESULT_OF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_ANON_FUNCTOR_NTH_RESULT_OF_ER_2010_HPP
+#include <boost/assign/v2/ref/anon/generic/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+ typedef ref::alloc_tag::lazy_alloc ext_tag2_;
+}// anon_aux
+namespace nth_result_of{
+
+ template<std::size_t N,typename Tag1,typename T>
+ struct anon : ref::nth_result_of::generic_anon<
+ N, Tag1, anon_aux::ext_tag2_, T
+ >
+ {};
+
+}// nth_result_of
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/cont.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/cont.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,82 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_CONTAINER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_CONTAINER_ER_2010_HPP
+#include <boost/mpl/inherit.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/container.hpp>
+#include <boost/assign/v2/ref/anon/generic/traits.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ // N : size of the array
+ // L : link
+ // T : value type
+ // Tag1 : assign tag
+ // Tag2 : policy tag
+ template<std::size_t N, typename L,typename Tag1, typename Tag2, typename T>
+ class cont
+ : public anon_aux::inherit<N,L,Tag1,Tag2,T>::super1_t,
+ public anon_aux::inherit<N,L,Tag1,Tag2,T>::super2_t
+ {
+ typedef anon_aux::inherit<N,L,Tag1,Tag2,T> inherit_;
+ typedef cont<N,L,Tag1,Tag2,T> this_;
+
+ public:
+ typedef typename inherit_::super1_t super1_t; // fusion_list
+ typedef typename inherit_::super2_t super2_t; // interface
+
+ protected:
+ super1_t const& super1()const
+ {
+ return static_cast<super1_t const&>( *this );
+ }
+
+ public:
+
+ typedef typename super1_t::size_type size_type;
+
+ explicit cont(){}
+ explicit cont(const L& link,T& head)
+ : super1_t( link, head ){}
+
+ // Needed by csv
+ template<typename NewL,typename NewTag2>
+ explicit cont(const cont<N,NewL,Tag1,NewTag2,T>& that)
+ :super1_t( that ),super2_t(that){}
+
+ typedef cont<N+1,this_,Tag1,Tag2,T> result_type;
+
+ result_type
+ operator()(T& t)const
+ {
+ this->super1()( t );
+ return result_type( *this, t );
+ }
+
+ //using super1_t::operator[];
+ };
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/fwd.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,28 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_FWD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ template<std::size_t N, typename L,typename Tag1, typename Tag2, typename T>
+ class cont;
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/generic.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/generic.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,17 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_STATIC_LIST_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_STATIC_LIST_ER_2010_HPP
+
+#include <boost/assign/v2/ref/anon/generic/cont.hpp>
+#include <boost/assign/v2/ref/anon/generic/make.hpp>
+#include <boost/assign/v2/ref/anon/generic/nth_result_of.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_MAKE_ER_2010_HPP
+#include <boost/assign/v2/detail/keyword/nil.hpp>
+#include <boost/assign/v2/ref/anon/generic/nth_result_of.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace result_of{
+
+ template<typename Tag1,typename Tag2,typename T>
+ struct empty_generic_anon
+ : nth_result_of::generic_anon<0, Tag1, Tag2, T>{};
+
+ template<typename Tag1,typename Tag2,typename T>
+ struct generic_anon : nth_result_of::generic_anon<1, Tag1, Tag2, T>{};
+
+}// result_of
+
+ template<typename Tag1,typename Tag2,typename T>
+ typename result_of::empty_generic_anon<Tag1, Tag2, T>::type
+ generic_anon( keyword_aux::nil )
+ {
+ typedef typename result_of::empty_generic_anon<
+ Tag1, Tag2, T>::type result_;
+ return result_();
+ }
+
+ template<typename Tag1,typename Tag2,typename T>
+ typename result_of::generic_anon<Tag1, Tag2, T>::type
+ generic_anon(T& t)
+ {
+ return generic_anon<Tag1, Tag2, T>( v2::_nil )( t );
+ }
+
+ template<typename Tag1,typename Tag2,typename T>
+ typename result_of::generic_anon<Tag1, Tag2, T const>::type
+ generic_anon(T const& t)
+ {
+ return generic_anon<Tag1, Tag2, T const>( v2::_nil )( t );
+ }
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/nth_result_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/nth_result_of.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,55 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_NTH_RESULT_OF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_NTH_RESULT_OF_ER_2010_HPP
+#include <boost/mpl/void.hpp>
+#include <boost/assign/v2/ref/anon/generic/cont.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ template<typename Tag1, typename Tag2,typename T>
+ struct empty_generic_anon
+ {
+ typedef boost::mpl::void_ void_;
+ typedef anon_aux::cont<0,void_,Tag1,Tag2,T> type;
+ };
+
+ template<std::size_t n,typename Tag1,typename Tag2,typename T>
+ struct recursive_result
+ {
+ typedef typename recursive_result<
+ n-1, Tag1, Tag2, T
+ >::type previous_;
+ typedef typename previous_::result_type type;
+ };
+
+ template<typename Tag1,typename Tag2, typename T>
+ struct recursive_result<0, Tag1, Tag2, T>
+ : empty_generic_anon<Tag1, Tag2, T>{};
+
+}// fusion_list_aux
+namespace nth_result_of{
+
+ template<std::size_t N,typename Tag1,typename Tag2,typename T>
+ struct generic_anon
+ : anon_aux::recursive_result<N,Tag1,Tag2,T>
+ {};
+
+}// nth_result_of
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/policy.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/policy.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,51 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_POLICY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_POLICY_ER_2010_HPP
+#include <boost/mpl/empty_base.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/assign/v2/ref/anon/generic/fwd.hpp>
+#include <boost/assign/v2/ref/anon/detail/lazy_alloc_fwd.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ template<typename Tag2>
+ struct policy{};
+
+ template<>
+ struct policy<boost::mpl::empty_base> : boost::mpl::always<
+ boost::mpl::empty_base
+ >{};
+
+ template<>
+ struct policy<alloc_tag::lazy_alloc>
+ {
+ template<typename N,typename L,typename Tag1,typename T>
+ struct apply
+ {
+ typedef alloc_tag::lazy_alloc tag2_;
+ typedef anon_aux::cont<N::value, L, Tag1, tag2_, T> d_;
+ typedef anon_aux::lazy_alloc<N::value,Tag1,T, d_> type;
+ };
+
+ };
+
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/anon/generic/traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/anon/generic/traits.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,59 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_ANON_GENERIC_TRAITS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ANON_GENERIC_TRAITS_ER_2010_HPP
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/fwd.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp>
+#include <boost/assign/v2/ref/anon/generic/policy.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace anon_aux{
+
+ template<std::size_t N,typename L,typename Tag1,typename T>
+ struct fusion_list
+ {
+ typedef typename L::super1_t link_;
+ typedef fusion_list_aux::container<N, link_, Tag1, T> type;
+ };
+
+ template<typename L,typename T,typename Tag1>
+ struct fusion_list<0, L, Tag1, T>
+ {
+ typedef typename fusion_list_aux::empty_fusion_list<Tag1, T>::type type;
+ };
+
+ template<std::size_t N, typename L,typename Tag1, typename Tag2, typename T>
+ struct static_array : boost::mpl::apply4<
+ anon_aux::policy<Tag2>,
+ boost::mpl::int_<N>, L, Tag1, T
+ >{};
+
+ template<std::size_t N, typename L,typename Tag1, typename Tag2,typename T>
+ struct inherit
+ {
+ typedef typename
+ anon_aux::fusion_list<N, L, Tag1, T>::type super1_t;
+ typedef typename anon_aux::static_array<
+ N, L, Tag1, Tag2, T
+ >::type super2_t;
+ };
+
+}// anon_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/add_const.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/add_const.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_ADD_CONST_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_ADD_CONST_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace convert_traits{
+
+ template<typename V, bool or_const>
+ struct add_const : boost::mpl::eval_if_c<
+ or_const,
+ boost::add_const<V>,
+ boost::mpl::identity<V>
+ >{};
+
+}// convert_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif
\ No newline at end of file

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/checking.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/checking.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,134 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_CHECKING_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_CHECKING_ER_2010_HPP
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/config.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/promote.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/assign/v2/ref/detail/convert_traits/result.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace convert_traits{
+namespace checking{
+
+ template<typename T1,typename T2,typename T3>
+ struct tester{
+
+ typedef typename convert_traits::result<T1,T2>::type result_;
+
+ static void test()
+ {
+ typedef boost::is_same<result_,T3> pred_;
+ BOOST_STATIC_ASSERT( pred_::value );
+ }
+
+ };
+
+namespace twin_values{
+
+ template<typename T>
+ void do_check()
+ {
+
+ tester<const T &, const T &, const T &>::test();
+ tester<const T &, T &, const T &>::test();
+ tester< T &, const T &, const T &>::test();
+ tester< T &, T &, T &>::test();
+
+ tester<const T &, const T , const T >::test();
+ tester<const T &, T , const T >::test();
+ tester< T &, const T , const T >::test();
+ tester< T &, T , T >::test();
+
+ tester<const T , const T &, const T >::test();
+ tester<const T , T &, const T >::test();
+ tester< T , const T &, const T >::test();
+ tester< T , T &, T >::test();
+
+ tester<const T , const T , const T >::test();
+ tester<const T , T , const T >::test();
+ tester< T , const T , const T >::test();
+ tester< T , T , T >::test();
+
+ };
+
+}// twin_values
+namespace distinct_values{
+namespace arithmetic{
+
+ template<typename T1,typename T2,typename T3>
+ void do_check_impl(const T1&, const T2& ,const T3&)
+ {
+
+ typedef typename boost::mpl::not_<
+ boost::is_same<T1,T2>
+ >::type not_same_;
+
+ BOOST_STATIC_ASSERT(not_same_::value);
+
+ tester<const T1&, const T2&, const T3 >::test();
+ tester<const T1&, T2&, const T3 >::test();
+ tester< T1&, const T2&, const T3 >::test();
+ tester< T1&, T2&, T3 >::test();
+
+ tester<const T1&, const T2 , const T3 >::test();
+ tester<const T1&, T2 , const T3 >::test();
+ tester< T1&, const T2 , const T3 >::test();
+ tester< T1&, T2 , T3 >::test();
+
+ tester<const T1 , const T2&, const T3 >::test();
+ tester<const T1 , T2&, const T3 >::test();
+ tester< T1 , const T2&, const T3 >::test();
+ tester< T1 , T2&, T3 >::test();
+
+ tester<const T1 , const T2 , const T3 >::test();
+ tester<const T1 , T2 , const T3 >::test();
+ tester< T1 , const T2 , const T3 >::test();
+ tester< T1 , T2 , T3 >::test();
+
+ };
+
+
+#define m(T1,T2) \
+ template<typename T> \
+ void do_check( \
+ typename boost::enable_if< \
+ boost::is_same<T,T1> \
+ >::type* = 0 \
+ ) \
+ { \
+ typedef T1 t1_; \
+ typedef T2 t2_; \
+ distinct_values::arithmetic::do_check_impl( t1_(), t2_(), t2_() ); \
+ } \
+/**/
+
+m(short , int)
+m(int , long)
+m(float , double)
+m(double , long double)
+
+#undef m
+}// arithmetic
+}// distinct_values
+}// checking
+}// convert_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/distinct_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/distinct_values.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,70 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_DISTINCT_VALUES_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_DISTINCT_VALUES_ER_2010_HPP
+#include <boost/numeric/conversion/conversion_traits.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/assign/v2/ref/detail/convert_traits/add_const.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace convert_traits{
+namespace distinct_values{
+
+ template<typename V1,typename V2>
+ struct value{
+
+ struct arithmetic
+ {
+ typedef typename boost::numeric::conversion_traits<
+ V1,
+ V2
+ >::supertype type;
+
+ };
+
+ struct non_arithmetic : boost::mpl::eval_if<
+ boost::is_convertible<V1,V2>,
+ boost::mpl::identity<V2>,
+ boost::mpl::identity<V1>
+ >{};
+
+ typedef boost::is_arithmetic<V1> is_ari1_;
+ typedef boost::is_arithmetic<V2> is_ari2_;
+ typedef boost::mpl::and_<is_ari1_,is_ari2_> is_ari_;
+ typedef typename boost::mpl::eval_if<
+ is_ari_,
+ arithmetic,
+ non_arithmetic
+ >::type type;
+
+ }; // value
+
+ // There can be no reference if V1 != V2.
+ template<typename V1,typename V2, bool or_const, bool and_ref>
+ struct reference : convert_traits::add_const<
+ typename distinct_values::value<V1,V2>::type,
+ or_const
+ >{};
+
+}// distinct_values
+}// convert_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/result.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/result.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,97 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_RESULT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_RESULT_ER_2010_HPP
+#include <boost/config.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/assign/v2/ref/detail/convert_traits/twin_values.hpp>
+#include <boost/assign/v2/ref/detail/convert_traits/distinct_values.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace convert_traits{
+
+ template<typename T1,typename T2>
+ struct result
+ {
+
+ template<typename T>
+ struct traits{
+
+ typedef typename boost::is_reference<T>::type is_ref_;
+ typedef typename boost::remove_reference<T>::type const_;
+ typedef typename boost::is_const<const_>::type is_const_;
+ typedef typename boost::remove_const<const_>::type val_;
+
+ };
+
+ typedef traits<T1> traits1_;
+ typedef traits<T2> traits2_;
+
+ typedef typename traits1_::val_ val1_;
+ typedef typename traits2_::val_ val2_;
+
+ typedef boost::is_same<val1_,val2_> same_val_;
+
+ typedef typename boost::mpl::and_<
+ typename traits1_::is_ref_,
+ typename traits2_::is_ref_
+ >::type and_ref_;
+
+ typedef typename boost::mpl::or_<
+ typename traits1_::is_const_,
+ typename traits2_::is_const_
+ >::type or_const_;
+
+ typedef typename boost::mpl::eval_if<
+ same_val_,
+ twin_values::reference<
+ val1_,
+ or_const_::value,
+ and_ref_::value
+ >,
+ distinct_values::reference<
+ val1_,
+ val2_,
+ or_const_::value,
+ and_ref_::value
+ >
+ >::type type;
+
+ typedef boost::mpl::and_<
+ boost::is_convertible<T1,type>,
+ boost::is_convertible<T2,type>
+ > is_valid_type;
+
+ BOOST_STATIC_CONSTANT(bool, is_valid = is_valid_type::value);
+
+ static void test()
+ {
+ BOOST_STATIC_ASSERT( is_valid );
+ }
+
+ };
+
+}// convert_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/twin_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/convert_traits/twin_values.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,43 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_TWIN_VALUES_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONVERT_TRAITS_TWIN_VALUES_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/assign/v2/ref/detail/convert_traits/add_const.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace convert_traits{
+namespace twin_values{
+
+ template<typename V, bool or_const, bool and_ref>
+ struct reference
+ {
+ typedef typename convert_traits::add_const<V,or_const>::type c_;
+ typedef typename boost::mpl::eval_if_c<
+ and_ref,
+ boost::add_reference<c_>,
+ boost::mpl::identity<c_>
+ >::type type;
+ };
+
+}// twin_values
+}// convert_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/assign_array.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/assign_array.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,76 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_ASSIGN_ARRAY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_ASSIGN_ARRAY_ER_2010_HPP
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/fwd.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace fusion_list_aux{
+
+ // ---- assign_array ---- //
+
+ template<
+ std::size_t K,typename A,
+ std::size_t N, typename L, typename Tag, typename T
+ >
+ void assign_array(
+ boost::mpl::true_ /*exit*/,
+ A& a,
+ const fusion_list_aux::container<N, L, Tag, T>& f
+ )
+ {
+ /*exit*/
+ }
+
+ template<
+ std::size_t K,typename A,
+ std::size_t N, typename L, typename Tag, typename T
+ >
+ void assign_array(
+ boost::mpl::false_ /*exit*/,
+ A& a,
+ const fusion_list_aux::container<N, L, Tag, T>& f
+ )
+ {
+ typedef boost::mpl::int_<K-1> index_;
+ a[ K - 1 ].rebind( f.static_lookup( index_() ) ) ;
+ typedef index_ next_size_;
+ typedef boost::mpl::int_<0> zero_;
+ typedef typename boost::mpl::equal_to<next_size_,zero_>::type exit_;
+ assign_array<K-1>( exit_(), a, f );
+ }
+
+ // A must be a static array of reference wrappers
+ template<typename A,std::size_t N, typename L, typename Tag, typename T>
+ void assign_array(A& a, fusion_list_aux::container<N, L, Tag, T> const & f)
+ {
+ // don't replace by size_::value <= N (causes warning)
+ BOOST_STATIC_ASSERT(A::static_size <= N );
+ typedef boost::mpl::int_<0> zero_;
+ typedef boost::mpl::int_<A::static_size> size_;
+ typedef typename boost::mpl::equal_to<size_,zero_>::type exit_;
+ fusion_list_aux::assign_array<size_::value>( exit_(), a, f );
+ }
+
+}// fusion_list_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/container.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/container.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,143 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_CONTAINER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_CONTAINER_ER_2010_HPP
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/config.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/assign/v2/ref/wrapper/framework.hpp>
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace fusion_list_aux{
+
+ template<std::size_t N, typename L, typename Tag,typename T>
+ class container
+ {
+
+ typedef boost::mpl::int_<0> int0_;
+ typedef boost::mpl::int_<1> int1_;
+ typedef boost::mpl::int_<N> size_;
+ typedef typename boost::mpl::minus<size_,int1_>::type index_;
+ typedef Tag assign_tag_;
+ typedef typename ref::wrapper<assign_tag_,T> wrapper_;
+
+ typedef assign_tag::copy link_tag_;
+
+ public:
+
+ typedef std::size_t size_type;
+ BOOST_STATIC_CONSTANT(bool, static_sisze = N);
+ typedef typename boost::mpl::equal_to<size_,int0_>::type is_empty_;
+ typedef typename boost::mpl::if_<
+ is_empty_, L, ref::wrapper<link_tag_, const L>
+ >::type link_;
+ typedef typename boost::mpl::if_<is_empty_, L, wrapper_>::type head_;
+
+ explicit container(){}
+ explicit container(const L& l,T& h)
+ :link( l ),
+ head( h )
+ {}
+
+ // ------ operator() ----- //
+ // adds an element //
+ // ----------------------- //
+
+ template<typename T1>
+ struct result{
+ typedef container this_;
+ typedef container<N+1,this_,Tag,T1> type;
+ };
+
+ template<typename T1>
+ typename result<T1>::type
+ operator()(T1& t)const{
+ typedef typename result<T1>::type result_;
+ return result_( *this, t );
+ }
+
+ template<typename T1>
+ typename result<T1 const>::type
+ operator()(T1 const& t)const{
+ typedef typename result<T1 const>::type result_;
+ return result_( *this, t );
+ }
+
+ // ------ operator[] ----- //
+ // retrieves an element //
+ // ----------------------- //
+
+ template<int I>
+ struct is_head : boost::mpl::bool_< I + 1 == N >{};
+
+ template<int I>
+ struct link_retrieve : L::template retrieve<I>{};
+
+ template<int I>
+ struct retrieve : boost::mpl::eval_if<
+ is_head<I>,
+ boost::mpl::identity<T&>,
+ link_retrieve<I>
+ >{};
+
+ // A template is needed even as the argument is known, to prevent
+ // compiler errors for N = 0.
+ template<int I>
+ typename boost::lazy_enable_if<
+ is_head<I>,
+ retrieve<I>
+ >::type
+ static_lookup(boost::mpl::int_<I> same_index)const
+ {
+ return this->head;
+ }
+
+ template<int I>
+ typename boost::lazy_disable_if<
+ is_head<I>,
+ retrieve<I>
+ >::type
+ static_lookup(boost::mpl::int_<I> smaller_index)const
+ {
+ return this->link.unwrap().static_lookup( smaller_index );
+ }
+
+ link_ pop()const
+ {
+ // Warning : probably inefficient
+ return link;
+ }
+ T& back()const{ return this->head; }
+
+ protected:
+ mutable link_ link; // This is a wrappe
+ mutable head_ head;
+
+ };
+
+}// fusion_list_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fusion_list.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fusion_list.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,18 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_FUSION_LIST_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_FUSION_LIST_ER_2010_HPP
+
+#include <boost/assign/v2/ref/detail/fusion_list/assign_array.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/container.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/make.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/fwd.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,31 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_FWD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace fusion_list_aux{
+
+ template<std::size_t N, typename L, typename Tag,typename T>
+ class container;
+
+ template<typename A, std::size_t N, typename L, typename Tag, typename T>
+ void assign_array(A& a, fusion_list_aux::container<N, L, Tag, T> const & f);
+
+}// fusion_list_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/make.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/make.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,71 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_MAKE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_MAKE_ER_2010_HPP
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/assign/v2/detail/keyword/nil.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace result_of{
+
+ template<typename Tag,typename Tneg1>
+ struct empty_fusion_list : boost::mpl::apply0<
+ nth_result_of::fusion_list<Tag,Tneg1>
+ >{};
+
+ template<typename Tag,typename T0>
+ struct fusion_list : boost::mpl::apply1<
+ nth_result_of::fusion_list<Tag,T0>,
+ T0
+ >{
+ // Tneg1 = T0 is needed for static_list and inconsequential otherwise.
+ };
+
+}// result_of
+
+ template<typename Tag,typename Tneg1>
+ typename result_of::empty_fusion_list<Tag,Tneg1>::type
+ fusion_list( keyword_aux::nil )
+ {
+ typedef typename result_of::empty_fusion_list<
+ Tag,
+ Tneg1
+ >::type result_;
+ return result_();
+ }
+
+ template<typename Tag,typename T>
+ typename result_of::fusion_list<Tag,T>::type
+ fusion_list(T& t)
+ {
+ return fusion_list<Tag,T>( v2::_nil )( t );
+ }
+
+ template<typename Tag,typename T>
+ typename result_of::fusion_list<Tag,T const>::type
+ fusion_list(T const& t)
+ {
+ return fusion_list<Tag,T const>( v2::_nil )( t );
+ }
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/fusion_list/nth_result_of.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,81 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_NTH_RESULT_OF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_CONTAINER_FUSION_LIST_NTH_RESULT_OF_ER_2010_HPP
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp>
+#include <boost/assign/v2/ref/detail/fusion_list/fwd.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace fusion_list_aux{
+
+ template<typename Tag,typename Tneg1>
+ struct empty_fusion_list
+ {
+ typedef boost::mpl::void_ link_;
+ typedef fusion_list_aux::container<0,link_,Tag,Tneg1> type;
+ };
+
+ template<typename Tag,typename Tneg1>
+ struct nth_result
+ {
+
+ typedef typename
+ fusion_list_aux::empty_fusion_list<Tag,Tneg1>::type state_;
+
+ template<typename State,typename T>
+ struct result : State::template result<T>{};
+
+ template<typename Vec>
+ struct apply : boost::mpl::fold<
+ Vec,
+ state_,
+ result<boost::mpl::_1,boost::mpl::_2>
+ >{};
+
+ };
+
+}// fusion_list_aux
+namespace nth_result_of{
+
+ template<typename Tag,typename Tneg1>
+ struct fusion_list
+ {
+ template<
+ typename T0 = boost::mpl::na,
+ typename T1 = boost::mpl::na,
+ typename T2 = boost::mpl::na,
+ typename T3 = boost::mpl::na,
+ typename T4 = boost::mpl::na
+ >
+ struct apply : boost::mpl::apply1<
+ fusion_list_aux::nth_result<Tag,Tneg1>,
+ boost::mpl::vector<T0,T1,T2,T3,T4>
+ >{};
+ };
+
+}// nth_result_of
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/iterator.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,109 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_UNWRAP_ITERATOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_UNWRAP_ITERATOR_ER_2010_HPP
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/assign/v2/ref/detail/unwrap/reference.hpp>
+
+// Calling
+// *unwrap_iterator( it );
+// is equivalent to
+// (*it).unwrap();
+// if *it is a reference wrapper, otherwise
+// (*it);
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace unwrap_aux{
+
+ template<typename I>
+ struct reference_of_iterator : unwrap_aux::reference<
+ typename boost::iterator_reference<I>::type
+ >{};
+
+ template<
+ typename I,
+ typename R = typename unwrap_aux::reference_of_iterator<I>::type,
+ typename V = typename boost::remove_reference<R>::type
+ >
+ struct iterator : boost::iterator_adaptor<
+ iterator<I,R,V> // Derived
+ ,I // Base
+ ,V // Value
+ ,use_default // CategoryOrTraversal
+ ,R // Reference
+ ,use_default // Difference
+ >{
+ typedef boost::iterator_adaptor<
+ iterator<I,R,V>,
+ I,
+ V,
+ use_default,
+ R,
+ use_default
+ > super_;
+
+ iterator(){}
+ iterator(I base):super_(base)
+ {
+ typedef typename boost::iterator_reference<I>::type ref_;
+ typedef typename boost::is_convertible<ref_,R>::type is_convertible_;
+ BOOST_MPL_ASSERT(is_convertible_);
+ }
+ };
+
+ template<typename It>
+ struct is_iterator : boost::mpl::false_{};
+
+ template<typename I, typename R, typename V>
+ struct is_iterator< unwrap_aux::iterator<I,R,V> >
+ : boost::mpl::true_{};
+
+}// unwrap_aux
+
+ template<typename It>
+ struct is_unwrapped_iterator : unwrap_aux::is_iterator<
+ typename boost::remove_cv<It>::type
+ >{};
+
+namespace result_of{
+
+ template<typename I>
+ struct unwrap_iterator
+ {
+ typedef unwrap_aux::iterator<I> type;
+ };
+
+}// result_of
+
+ template<typename I>
+ typename result_of::unwrap_iterator<I>::type
+ unwrap_iterator(const I& base)
+ {
+ typedef typename result_of::unwrap_iterator<I>::type result_;
+ return result_( base );
+ }
+
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif
+

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/range.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,96 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_UNWRAP_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_UNWRAP_RANGE_ER_2010_HPP
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/assign/v2/ref/detail/unwrap/iterator.hpp>
+
+// See iterator.hpp
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace unwrap_aux{
+
+ template<typename R>
+ struct is_range : is_unwrapped_iterator<
+ typename boost::range_iterator<R>::type
+ >{};
+
+// TODO remove
+// I guess this is subsumed by range_reference
+// template<typename R>
+// struct reference_of_unwrapped_range
+// : unwrap::reference_of_iterator<
+// typename boost::range_iterator<R>::type
+// >{};
+
+ template<typename R, bool = unwrap_aux::is_range<R>::value>
+ struct result_of_unwrap_range
+ {
+ typedef typename boost::range_iterator<R>::type base_it_;
+ typedef typename result_of::unwrap_iterator<base_it_>::type it_;
+ typedef boost::iterator_range<it_> type;
+
+ static type call( R& r){
+ return type(
+ ref::unwrap_iterator( boost::begin( r ) ),
+ ref::unwrap_iterator( boost::end( r ) )
+ );
+ }
+ };
+
+ // No need to unwrap twice
+ template<typename R>
+ struct result_of_unwrap_range<R,true>
+ {
+ typedef R type; // don't change this to R&
+ static type call( R& r){ return r; }
+ };
+
+}// unwrap_aux
+
+ template<typename R>
+ struct is_unwrapped_range : unwrap_aux::is_range<R>{};
+
+namespace result_of{
+
+ template<typename R>
+ struct unwrap_range : unwrap_aux::result_of_unwrap_range<R>{};
+
+}// result_of
+
+ template<typename R>
+ typename result_of::unwrap_range<R>::type
+ unwrap_range( R& r)
+ {
+ typedef result_of::unwrap_range<R> result_;
+ return result_::call( r );
+ }
+
+ template<typename R>
+ typename result_of::unwrap_range<R const>::type
+ unwrap_range( R const& r)
+ {
+ typedef result_of::unwrap_range<R const> result_;
+ return result_::call( r );
+ }
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/reference.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/detail/unwrap/reference.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,52 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_UNWRAP_REFERENCE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_UNWRAP_REFERENCE_ER_2010_HPP
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/assign/v2/ref/wrapper/framework.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace unwrap_aux{
+
+ // U Result
+ // ref::wrapper<Tag,T> T&
+ // ref::wrapper<Tag,T>& T&
+ // T& T&
+ template<typename U,typename T = typename boost::remove_reference<U>::type>
+ struct reference : boost::mpl::eval_if<
+ boost::is_reference_wrapper<T>,
+ boost::add_reference<
+ typename boost::unwrap_reference<T>::type
+ >,
+ boost::mpl::identity<U>
+ >{
+ static void test()
+ {
+ BOOST_MPL_ASSERT_NOT( boost::is_reference<T> );
+ };
+ };
+
+}// unwrap_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/ref.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/ref.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,16 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_REF_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_REF_ER_2010_HPP
+
+#include <boost/assign/v2/ref/anon/anon.hpp>
+#include <boost/assign/v2/ref/wrapper/wrapper.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/base.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/base.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,49 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_BASE
+#include <boost/config.hpp>
+#include <boost/type_traits/is_const.hpp>
+ template<typename D, typename T>
+ class wrapper_crtp;
+#define BOOST_ASSIGN_V2_REF_WRAPPER_BASE(X) \
+ typedef T type; \
+ BOOST_STATIC_CONSTANT( \
+ bool, \
+ is_const = boost::is_const<T>::value \
+ ); \
+ \
+ X(){} \
+ \
+ explicit X( T& r ) : ref_(&r) \
+ { } \
+ \
+ void rebind(T& r ) \
+ { \
+ this->ref_ = &r; \
+ } \
+ \
+ T& unwrap() const \
+ { \
+ return *this->ref_; \
+ } \
+ \
+ T* get_pointer() const { return this->ref_; } \
+ \
+ using wrapper_crtp<wrapper,T>::operator=; \
+ \
+ protected: \
+ friend class wrapper_crtp<wrapper,T>; \
+ \
+ T* ref_; \
+ public: \
+/**/
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/copy.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/copy.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,72 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_COPY_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_COPY_ER_2010_HPP
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/assign/v2/ref/wrapper/framework.hpp>
+#include <boost/assign/v2/ref/wrapper/base.hpp>
+#include <boost/assign/v2/ref/wrapper/crtp.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace assign_tag{ struct copy{}; }
+namespace assign_copy{ typedef assign_tag::copy assign_tag_; }
+
+ template< class T >
+ struct wrapper<ref::assign_tag::copy, T>
+ :
+ public ref::wrapper_crtp< wrapper<ref::assign_tag::copy, T>, T>
+ {
+ BOOST_ASSIGN_V2_REF_WRAPPER_BASE( wrapper )
+
+ typedef ref::assign_tag::copy assign_tag;
+
+ void assign(typename boost::call_traits<T>::param_type r )
+ {
+ this->unwrap() = r;
+ }
+
+ void swap( wrapper& r )
+ {
+ std::swap( this->unwrap(), r.unwrap() );
+ }
+
+ };
+
+namespace type_traits{
+
+ template<typename T>
+ struct copy_wrapper{ typedef ref::wrapper<assign_tag::copy,T> type; };
+
+ template<typename T>
+ struct does_assign_copy_impl : boost::mpl::false_{};
+
+ template<typename T>
+ struct does_assign_copy_impl<
+ ref::wrapper<assign_tag::copy, T>
+ > : boost::mpl::true_{};
+
+ template<typename T>
+ struct does_assign_copy : does_assign_copy_impl<
+ typename boost::remove_cv<T>::type
+ >{};
+
+}// type_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/crtp.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/crtp.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,137 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Manuel Peinado Gallego //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_CRTP_ER_MPG_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_CRTP_ER_MPG_2010_HPP
+#include <boost/call_traits.hpp>
+#include <boost/operators.hpp>
+
+// This design is an outgrowth of assign_detail::assign_reference<> by TO. The
+// new feature is that the assignment operator and swap member function are
+// customizable and there are two options (for now), identified by MPG : the
+// reference is assigned a new value (copy), or a new address (rebind).
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+
+ template<typename D, typename T>
+ class wrapper_crtp
+ :
+ boost::less_than_comparable1<
+ wrapper_crtp<D,T>,
+ boost::less_than_comparable2<
+ wrapper_crtp<D,T>,
+ T,
+ boost::equality_comparable1<
+ wrapper_crtp<D,T>,
+ boost::equality_comparable2<
+ wrapper_crtp<D,T>,
+ T
+ >
+ >
+ >
+ >
+ {
+
+ public:
+ // protected
+
+ D& derived()
+ {
+ return static_cast<D&>( *this );
+ }
+
+ D const & derived()const
+ {
+ return static_cast<D const&>( *this );
+ }
+
+ public:
+
+ void operator=(T& r )
+ {
+ this->derived().assign( r );
+ }
+
+ void swap( wrapper_crtp& r )
+ {
+ return this->derived().swap( r );
+ }
+
+ operator T&() const
+ {
+ return this->derived().unwrap();
+ }
+
+ bool operator==( const wrapper_crtp& r )const
+ {
+ return this->derived().unwrap() == r.derived().unwrap();
+ }
+
+ bool operator<( const wrapper_crtp& r )const
+ {
+ return this->derived().unwrap() < r.derived().unwrap();
+ }
+
+ bool operator==( typename boost::call_traits<T>::param_type r )const
+ {
+ return this->derived().unwrap() == r;
+ }
+
+ bool operator<( typename boost::call_traits<T>::param_type r )const
+ {
+ return this->derived().unwrap() < r;
+ }
+
+ bool operator>( typename boost::call_traits<T>::param_type r )const
+ {
+ return this->derived().unwrap() > r;
+ }
+
+
+ };
+
+ template<typename D,typename T>
+ void rebind( wrapper_crtp<D,T>& a, T& r ){ a.rebind( r ); }
+
+ template<typename D,typename T>
+ inline void swap( wrapper_crtp<D,T>& l, wrapper_crtp<D,T>& r )
+ {
+ l.swap( r );
+ }
+
+namespace functional{
+
+ template<typename T>
+ struct assigner
+ {
+ assigner(T& val):value( val ){}
+
+ typedef void result_type;
+
+ template<typename D>
+ void operator()(wrapper_crtp<D,T>& w)const
+ {
+ w = this->value;
+ }
+ private:
+ assigner();
+ mutable T& value;
+ };
+
+}// functional
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,40 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_DEDUCE_ASSIGN_TAG_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_DEDUCE_ASSIGN_TAG_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost{
+ struct use_default;
+namespace assign{
+namespace v2{
+namespace ref{
+namespace assign_tag{
+ struct copy;
+}// assign_tag
+namespace wrapper_aux{
+
+ template<typename Tag>
+ struct deduce_assign_tag : boost::mpl::eval_if<
+ boost::is_same<Tag, boost::use_default>,
+ boost::mpl::identity<ref::assign_tag::copy>,
+ boost::mpl::identity<Tag>
+ >
+ {};
+
+}// wrapper_aux
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/framework.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/framework.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,89 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_FRAMEWORK_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_FRAMEWORK_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+
+ template<typename Tag,typename T>
+ struct wrapper{
+ // specialize on Tag
+ };
+
+namespace result_of{
+ template<typename Tag,typename T>
+ struct wrap{
+ typedef ref::wrapper<Tag,T> type;
+ };
+}
+
+
+template<typename Tag, typename T>
+inline ref::wrapper<Tag,T>
+wrap(T & t)
+{
+ typedef ref::wrapper<Tag,T> result_;
+ return result_( t );
+}
+
+template<typename Tag, typename T>
+inline ref::wrapper<Tag,T const>
+wrap(T const & t)
+{
+ typedef ref::wrapper<Tag,T const> result_;
+ return result_( t );
+}
+
+}// ref
+}// v2
+}// assign
+}// boost
+
+#include <boost/mpl/bool.hpp>
+#include <boost/ref.hpp>
+#include <boost/assign/v2/ref/wrapper/wrapper.hpp>
+
+// These are specializations of classes in boost/ref.hpp.
+
+namespace boost{
+
+#define t assign::v2::ref::wrapper<Tag,T>
+
+# define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(suffix) \
+template<typename Tag,typename T> \
+class is_reference_wrapper< t suffix> \
+ : public mpl::true_ \
+{ \
+}; \
+\
+template<typename Tag,typename T> \
+class unwrap_reference< t suffix > \
+{ \
+ public: \
+ typedef T type; \
+}; \
+/**/
+
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF( )
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF( const )
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF( volatile )
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF( const volatile )
+#endif
+
+#undef t
+#undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
+
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/rebind.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/rebind.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,60 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_REBIND_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_REBIND_ER_2010_HPP
+#include <algorithm>
+//#include <boost/call_traits.hpp>
+#include <boost/assign/v2/ref/wrapper/framework.hpp>
+#include <boost/assign/v2/ref/wrapper/base.hpp>
+#include <boost/assign/v2/ref/wrapper/crtp.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace assign_tag{ struct rebind{}; }
+namespace assign_rebind{ typedef assign_tag::rebind assign_tag_; }
+
+ template< class T >
+ struct wrapper<assign_tag::rebind, T>
+ : public wrapper_crtp< wrapper<assign_tag::rebind, T>, T >
+ {
+ typedef assign_tag::rebind assign_tag;
+
+ BOOST_ASSIGN_V2_REF_WRAPPER_BASE( wrapper )
+
+ void assign( T& r )
+ {
+ this->rebind( r );
+ }
+
+ void swap( wrapper& r )
+ {
+ T* tmp = this->ref_;
+ this->rebind( r.unwrap() );
+ r.rebind( tmp );
+ }
+
+ };
+
+namespace type_traits{
+
+ template<typename T>
+ struct rebind_wrapper{
+ typedef ref::wrapper<assign_tag::rebind,T> type;
+ };
+
+}// type_traits
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/ref/wrapper/wrapper.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/ref/wrapper/wrapper.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,17 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_REF_WRAPPER_WRAPPER_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_WRAPPER_WRAPPER_ER_2010_HPP
+
+#include <boost/assign/v2/ref/wrapper/deduce_assign_tag.hpp>
+#include <boost/assign/v2/ref/wrapper/copy.hpp>
+#include <boost/assign/v2/ref/wrapper/rebind.hpp>
+
+#endif

Added: sandbox/statistics/support/boost/assign/v2/v2.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/v2.hpp 2010-08-06 15:34:45 EDT (Fri, 06 Aug 2010)
@@ -0,0 +1,20 @@
+//////////////////////////////////////////////////////////////////////////////
+// Boost.Assign v2 //
+// //
+// Copyright (C) 2003-2004 Thorsten Ottosen //
+// Copyright (C) 2010 Erwann Rogard //
+// Use, modification and distribution are subject to the //
+// Boost Software License, Version 1.0. (See accompanying file //
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) //
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_ASSIGN_V2_V2_ER_2010_HPP
+#define BOOST_ASSIGN_V2_V2_ER_2010_HPP
+
+#include <boost/assign/v2/anon/anon.hpp>
+#include <boost/assign/v2/chain/chain.hpp>
+#include <boost/assign/v2/detail/detail.hpp>
+#include <boost/assign/v2/put/put.hpp>
+#include <boost/assign/v2/put/range/range.hpp>
+#include <boost/assign/v2/ref/ref.hpp>
+
+#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