Boost logo

Boost-Commit :

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


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