$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67984 - in sandbox/statistics/support/boost/assign/v2: . misc misc/chain misc/chain/checking put/deque
From: erwann.rogard_at_[hidden]
Date: 2011-01-11 16:05:17
Author: e_r
Date: 2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
New Revision: 67984
URL: http://svn.boost.org/trac/boost/changeset/67984
Log:
upd boost/assign/v2
Added:
   sandbox/statistics/support/boost/assign/v2/misc.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/
   sandbox/statistics/support/boost/assign/v2/misc/chain.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/adaptor.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/checking/
   sandbox/statistics/support/boost/assign/v2/misc/chain/checking/distinct_values.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/checking/twin_values.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/iterator.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/pipe.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/range.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/result.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/short.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/chain/use_lvalue.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/misc/sub_range.hpp   (contents, props changed)
   sandbox/statistics/support/boost/assign/v2/put/deque/fwd.hpp   (contents, props changed)
Added: sandbox/statistics/support/boost/assign/v2/misc.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_MISC_ER_2010_HPP
+#define BOOST_ASSIGN_V2_MISC_ER_2010_HPP
+
+#include <boost/assign/v2/misc/chain.hpp>
+#include <boost/assign/v2/misc/sub_range.hpp>
+#include <boost/assign/v2/misc/convert.hpp>
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_MISC_CHAIN_ER_2010_HPP
+#define BOOST_ASSIGN_V2_MISC_CHAIN_ER_2010_HPP
+
+#include <boost/assign/v2/misc/chain/pipe.hpp>
+
+// While && is convenient it's safer not to include it by default
+// 	#include <boost/assign/v2/misc/chain/short.hpp>
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/adaptor.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/adaptor.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,68 @@
+//////////////////////////////////////////////////////////////////////////////
+//  Boost.Assign v2                                                         //
+//                                                                          //
+//  Copyright (C) 2003-2004 Thorsten Ottosen                                //
+//  Copyright (C) 2009 Neil Groves                                          //
+//  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_ADAPTOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_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 traits/type/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
+namespace{
+	const chain_aux::adaptor2<> _chain = chain_aux::adaptor2<>();
+}
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/checking/distinct_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/checking/distinct_values.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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/misc/chain/pipe.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 MACRO(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 ) );\
+        }\
+    }\
+/**/
+
+
+MACRO(short  , int)
+MACRO(int    , long)
+MACRO(float  , double)
+MACRO(double , long double)
+
+#undef MACRO
+
+}// distinct_values
+}// chain
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/checking/twin_values.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/checking/twin_values.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,181 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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/mpl/assert.hpp>
+#include <boost/range/algorithm/copy.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/misc/chain/use_lvalue.hpp>
+#include <boost/assign/v2/misc/chain/pipe.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace checking{
+namespace chain{
+namespace twin_values{
+
+template<typename cr1_, typename cr2_, bool the_value>
+void verify_use_lvalue()
+{
+    typedef v2::chain_aux::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_>, // why?
+        v2::result_of::chain<cr1_, cr2_> 
+    >::type result_; 
+}
+
+template<bool x, typename T>
+struct add_const_if : boost::mpl::eval_if_c<
+	x, boost::add_const<T>, boost::mpl::identity<T>
+>{};
+
+template<typename T, bool qual_v1, bool qual_e2, bool qual_v2, bool the_value>
+void verify_mpl()
+{
+	namespace as2 = assign::v2;
+    typedef std::vector<T> vec_t_;
+    typedef typename add_const_if<qual_v1, vec_t_ >::type vec1_; 
+    typedef typename as2::ref::copy_wrapper<
+    	typename add_const_if<qual_e2, T>::type
+    >::type w_; 
+    typedef std::vector<w_> vec_w_;
+    typedef typename add_const_if<qual_v2, vec_w_ >::type 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_;
+        verify_use_lvalue<cr1_, cr2_, the_value>();
+    } 
+    {  
+        typedef r1_       cr1_;
+        typedef r2_ const cr2_;
+        verify_use_lvalue<cr1_, cr2_, the_value>();
+    } 
+    {  
+        typedef r1_       cr1_;
+        typedef r2_ const cr2_;
+        verify_use_lvalue<cr1_, cr2_, the_value>();
+    } 
+    {  
+        typedef r1_ const cr1_;
+        typedef r2_ const cr2_;
+        verify_use_lvalue<cr1_, cr2_, 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_MPL_ASSERT((is_same1_));
+        	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_MPL_ASSERT((is_same2_));
+	    }
+
+//      verify_mpl<T, qual_v1, qual_e2 , qual_v2 , the_value>()
+		verify_mpl<T, false  , false   , false   , true     >();
+		//verify_mpl<T, false  , false   , true    , true     >();
+		//verify_mpl<T, false  , true    , false   , false    >();
+		//verify_mpl<T, false  , true    , true    , false    >();
+		//verify_mpl<T, true   , false   , false   , false    >();
+		//verify_mpl<T, true   , false   , true    , false    >();
+		//verify_mpl<T, true   , true    , false   , false    >();
+		//verify_mpl<T, true   , true    , true    , 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 );
+                {
+                    using namespace adaptor;
+                    boost::copy(
+                        vt,
+                        boost::begin( vt1 | _chain( vt2 ) | _chain( vt3 ))
+                    );
+                }
+                {
+                	using namespace adaptor;
+                	typedef v2::container_tag::range tag_;
+                    v2::checking::do_check(
+                    	tag_(),
+                        vt1 | _chain( vt2 ) | _chain( vt3 )
+                    );
+                }
+            }
+            {
+	            T a1 = -1, b1 = -1, c1 = -1, d1 = -1, 
+                  e1 = -1, f1 = -1, g1 = -1, h1 = -1;
+
+                typedef typename ref::copy_wrapper<T>::type w_;
+    	        typedef boost::is_reference_wrapper<w_> is_;
+
+                boost::array<int, 3> vw2;
+                std::vector<int> vw1( 2 );
+                std::vector<int> vw3( 3 );
+				using namespace adaptor;
+                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 )
+                    );
+                }
+                // suppresses warning unused
+                if(a1 && b1 && c1 && d1 && e1 && f1 && g1 && h1){} 
+			}
+        }// runtime checks
+*/
+    }// do_check
+
+}// twin_values
+}// chain
+}// checking
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/iterator.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/iterator.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,69 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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_ITERATOR_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_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/join_iterator.hpp>
+#include <boost/range/detail/demote_iterator_traversal_tag.hpp>
+#include <boost/assign/v2/detail/traits/type/meta_convert.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_aux{
+
+	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;
+
+/*
+typename demote_iterator_traversal_tag<
+                                  typename iterator_traversal<Iterator1>::type
+                                , typename iterator_traversal<Iterator2>::type>::type
+*/
+
+    
+//    	typedef boost::range_detail::chain_iterator<
+    	typedef boost::range_detail::join_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_aux
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/pipe.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/pipe.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,57 @@
+//////////////////////////////////////////////////////////////////////////////
+//  Boost.Assign v2                                                         //
+//                                                                          //
+//  Copyright (C) 2003-2004 Thorsten Ottosen                                //
+//  Copyright (C) 2009 Neil Groves                                          //
+//  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_CHAIN_PIPE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_PIPE_ER_2010_HPP
+#include <boost/mpl/void.hpp>
+#include <boost/assign/v2/misc/chain/result.hpp>
+#include <boost/assign/v2/misc/chain/adaptor.hpp>
+
+// Design:
+// - Original design was boost::chain in RangeEx
+// - ER modified as follows:
+// 	- sets the underlying iterator's Reference to one which both inputs are
+// 	convertible to, and is lvalue-preserving
+// - Finally, MPG proposed a way to compose chains http://gist.github.com/287791
+
+namespace boost{
+namespace assign{
+namespace v2{
+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 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/misc/chain/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/range.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_CHAIN_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_RANGE_ER_2010_HPP
+#include <boost/concept/assert.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/assign/v2/misc/chain/iterator.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace chain_aux{
+
+    template<typename R1, typename R2, template<typename> class F, typename Tag>
+    struct range{
+
+        typedef typename chain_aux::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_;
+            typedef ns::join_iterator_begin_tag begin_tag_;
+            typedef ns::join_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_aux::range< R1, R2, boost::range_iterator,Tag>{};
+    
+    template<typename R1, typename R2, typename Tag>
+    struct range_r
+    	: chain_aux::range<R1, R2, boost::range_const_iterator,Tag>{};
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/result.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/result.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_RESULT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_RESULT_ER_2010_HPP
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/assign/v2/misc/chain/use_lvalue.hpp>
+#include <boost/assign/v2/misc/chain/range.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_aux::use_lvalue<R1,R2,Tag>,
+        	boost::mpl::identity< chain_aux::range_l<R1, R2, Tag> >,
+        	boost::mpl::identity< chain_aux::range_r<R1, R2, Tag> >
+    	>::type caller_;
+        
+        typedef typename caller_::type type;
+        
+        static type call(R1& r1, R2& r2)
+        {
+            return caller_::call( r1, r2 );
+        }
+    };
+
+}// chain_aux
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/short.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/short.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,41 @@
+//////////////////////////////////////////////////////////////////////////////
+//  Boost.Assign v2                                                         //
+//                                                                          //
+//  Copyright (C) 2003-2004 Thorsten Ottosen                                //
+//  Copyright (C) 2009 Neil Groves                                          //
+//  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_SHORT_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_SHORT_ER_2010_HPP
+#include <boost/assign/v2/misc/chain/pipe.hpp>
+#include <boost/assign/v2/misc/chain/result.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+
+#define MACRO(U1, U2) \
+template<typename R1,typename R2> \
+typename chain_aux::result< \
+    U1, \
+    U2  \
+>::type \
+operator&&(U1& r1, U2 & r2) \
+{ \
+    return r1 | _chain( r2 ); \
+} \
+/**/
+MACRO( R1      , R2       )
+MACRO( R1      , R2 const )
+MACRO( R1 const, R2       )
+MACRO( R1 const, R2 const )
+#undef MACRO
+
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/chain/use_lvalue.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/chain/use_lvalue.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_CHAIN_USE_LVALUE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_CHAIN_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_aux{
+
+    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_aux
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/misc/sub_range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/misc/sub_range.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -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_MISC_SUB_RANGE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_MISC_SUB_RANGE_ER_2010_HPP
+//#include <boost/range/sub_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace result_of{
+	
+    template<typename R>
+    struct sub_range
+    {
+
+		// typedef boost::sub_range<R> type; // Compiler error    
+        // Workaround:
+        typedef typename ::boost::range_iterator<R>::type it_;
+        typedef typename ::boost::iterator_range<it_>::type type;
+    };
+
+}// result_of
+
+	// Use it, for example, to do comparisons:
+    // v2::sub_range( ref::csv_array(-1, 0 ,1) ) < r;
+
+	template<typename R>
+	typename v2::result_of::sub_range<R>::type
+    sub_range( R& r)
+    {
+    	typedef typename v2::result_of::sub_range<R>::type result_;
+    	return result_( boost::begin( r ), boost::end( r ) ); 
+    }
+
+	template<typename R>
+	typename v2::result_of::sub_range<R const>::type
+    sub_range( R const& r)
+    {
+    	typedef typename v2::result_of::sub_range<R const>::type result_;
+    	return result_( boost::begin( r ), boost::end( r ) ); 
+    }
+
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/statistics/support/boost/assign/v2/put/deque/fwd.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/support/boost/assign/v2/put/deque/fwd.hpp	2011-01-11 16:05:15 EST (Tue, 11 Jan 2011)
@@ -0,0 +1,25 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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_DEQUE_FWD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_DEQUE_FWD_ER_2010_HPP
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_deque_aux{
+
+    template<typename T,typename F,typename Tag> class cont;
+
+}// put_deque_aux
+}// v2
+}// assign
+}// boost
+
+#endif