$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r68510 - in sandbox/assign_v2/boost/assign/v2/put/pipe: csv functor modulo
From: erwann.rogard_at_[hidden]
Date: 2011-01-27 18:50:12
Author: e_r
Date: 2011-01-27 18:50:11 EST (Thu, 27 Jan 2011)
New Revision: 68510
URL: http://svn.boost.org/trac/boost/changeset/68510
Log:
upd assign_v2
Added:
   sandbox/assign_v2/boost/assign/v2/put/pipe/csv/rhs.hpp   (contents, props changed)
   sandbox/assign_v2/boost/assign/v2/put/pipe/functor/rhs.hpp   (contents, props changed)
   sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/
   sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/forward.hpp   (contents, props changed)
   sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/size_type.hpp   (contents, props changed)
   sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/traits.hpp   (contents, props changed)
Added: sandbox/assign_v2/boost/assign/v2/put/pipe/csv/rhs.hpp
==============================================================================
--- (empty file)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/csv/rhs.hpp	2011-01-27 18:50:11 EST (Thu, 27 Jan 2011)
@@ -0,0 +1,66 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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_PIPE_CSV_RHS_HPP_ER_2010
+#define BOOST_ASSIGN_V2_PUT_PIPE_CSV_RHS_HPP_ER_2010
+#include <boost/mpl/apply.hpp>
+#include <boost/assign/v2/ref/array/csv.hpp>
+#include <boost/assign/v2/put/pipe/modulo/size_type.hpp>
+#include <boost/assign/v2/put/pipe/modulo/traits.hpp>
+#include <boost/assign/v2/put/pipe/csv/size_type.hpp>
+
+namespace boost{
+	struct use_default;
+namespace assign{
+namespace v2{
+namespace put_pipe_aux{
+
+	template<typename Pars, csv_size_type N, typename U>
+    struct csv_rhs
+    {
+        typedef boost::use_default tag2_;
+        typedef modulo_traits<Pars> modulo_traits_;
+        typedef typename modulo_traits_::size pars_size;
+        typedef typename modulo_traits_::cont_ pars_cont_type;
+    	typedef typename v2::ref::nth_result_of::csv_array<
+    		N,
+        	U
+    	>::type seq_arg_cont_type; //notice it's arg, not args
+
+        csv_rhs(){}
+        csv_rhs(pars_cont_type const& p, seq_arg_cont_type const& s)
+        	: pars_cont( p ), seq_arg( s ){}
+
+		pars_cont_type const& pars()const
+        {
+        	return this->pars_cont;
+        }
+
+		seq_arg_cont_type const& seq_args()const
+        {
+        	return this->seq_arg;
+        }
+		seq_arg_cont_type& seq_args()
+        {
+        	return this->seq_arg;
+        }
+
+		protected:
+		pars_cont_type pars_cont;
+        seq_arg_cont_type seq_arg;
+
+    };
+
+}// put_pipe_aux
+}// v2
+}// assign
+}// boost
+
+#endif
+
Added: sandbox/assign_v2/boost/assign/v2/put/pipe/functor/rhs.hpp
==============================================================================
--- (empty file)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/functor/rhs.hpp	2011-01-27 18:50:11 EST (Thu, 27 Jan 2011)
@@ -0,0 +1,272 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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_PIPE_FUNCTOR_RHS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_PIPE_FUNCTOR_RHS_ER_2010_HPP
+#include <boost/mpl/vector/vector0.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/apply.hpp>
+
+#include <boost/assign/v2/put/pipe/modulo/size_type.hpp>
+#include <boost/assign/v2/put/pipe/modulo/traits.hpp>
+
+#include <boost/assign/v2/ref/list_tuple.hpp>
+
+#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+#include <utility>
+#include <boost/assign/v2/temporary/variadic_vector.hpp>
+#else
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/repetition.hpp>
+#include <boost/assign/v2/detail/functor/crtp_unary_and_up.hpp>
+#endif
+
+namespace boost{
+    struct use_default;
+namespace assign{
+namespace v2{
+namespace put_pipe_aux{
+
+    template<
+    	typename Pars = ::boost::mpl::vector0<>,
+    	typename SeqArgs = ::boost::mpl::vector0<>,
+        bool enable_pars = (boost::mpl::size<SeqArgs>::value == 0)
+    >
+	class rhs;
+
+    template<typename Pars, typename SeqArgs, bool enable_pars>
+    struct rhs_result_helper
+    {
+
+    	template<typename V>
+    	struct apply
+    	{
+        	typedef typename ::boost::mpl::push_back<
+                SeqArgs,
+                V
+            >::type new_;
+        	typedef put_pipe_aux::rhs<
+                Pars,
+                new_
+            > type;
+    	};
+
+    };
+
+#if! BOOST_ASSIGN_V2_ENABLE_CPP0X
+    typedef ref::list_tuple_aux::na_type na_type;
+#endif
+
+    template<typename Pars, typename SeqArgs, bool enable_pars>
+    struct rhs_result
+    {
+        typedef rhs_result_helper<
+            Pars,
+            SeqArgs,
+            enable_pars
+        > helper_;
+
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+
+    	template<typename...Args>
+        struct apply : helper_::template apply<
+            typename ::boost::mpl::detail::variadic_vector<
+                Args...
+            >::type
+        >
+        {};
+
+#else
+
+    	template<typename V>
+        struct apply : helper_::template apply<V>{};
+
+#endif
+
+    };
+
+
+	template<typename Pars, typename SeqArgs, bool enable_pars>
+	class rhs
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+//do nothing
+#else
+    	:	public functor_aux::crtp_unary_and_up<
+                rhs<Pars, SeqArgs, enable_pars>,
+                rhs_result<Pars, SeqArgs, enable_pars>
+    		>
+#endif
+    {
+    	typedef boost::use_default list_tag_;
+        typedef modulo_traits<Pars> modulo_traits_;
+		typedef ref::nth_result_of::list_tuple meta2_;
+
+        public:
+
+        typedef typename modulo_traits_::size pars_size;
+        typedef typename modulo_traits_::cont_ pars_cont_type;
+
+		BOOST_STATIC_CONSTANT(
+        	std::size_t,
+            seq_args_size = ::boost::mpl::size<SeqArgs>::value
+        );
+
+        typedef typename ::boost::mpl::apply1<
+            meta2_,
+            SeqArgs
+        >::type seq_args_cont_type;
+
+        rhs(){}
+        explicit rhs(
+        	pars_cont_type const& p,
+            seq_args_cont_type const& s
+        ) : pars_cont( p ),
+        seq_args_cont( s ){}
+
+        // operator%
+
+        template<typename T>
+        struct modulo_result
+        {
+			typedef typename modulo_traits_:: template new_pars<T>::type new_;
+            typedef rhs<new_, SeqArgs> type;
+        };
+
+        template<typename T>
+        typename boost::lazy_enable_if_c<
+        	enable_pars,
+        	modulo_result<T>
+        >::type
+        operator%(T const& t)const
+        {
+        	typedef typename modulo_result<T>::type result_;
+            return result_(
+                this->pars_cont( t ),
+                this->seq_args_cont
+            );
+        }
+
+        // operator()
+
+        template<
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+            typename...Args
+#else
+            typename VArgs
+#endif
+        >
+        struct result : rhs_result<
+            Pars,
+            SeqArgs,
+            enable_pars
+        >::template apply<
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+            Args...
+#else
+            VArgs
+#endif
+        >{};
+
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+
+        public:
+
+        template<typename ...Args>
+        typename result<Args...>::type
+        operator()(Args&&...args )const
+        {
+            typedef typename result<Args...>::type result_;
+            return result_(
+                this->pars_cont,
+                this->seq_args_cont(
+                    std::forward<Args>( args )...
+                )
+            );
+        }
+
+#else
+        protected:
+
+		typedef functor_aux::crtp_unary_and_up<
+            rhs,
+            rhs_result<Pars, SeqArgs, enable_pars>
+    	> super_t;
+
+        typedef ::boost::mpl::vector0<> v0_;
+
+        public:
+
+        typename result<v0_>::type
+        operator()()const
+        {
+            typedef typename result<v0_>::type result_;
+            return result_(
+                this->pars_cont,
+                this->seq_args_cont()
+            );
+        }
+
+		using super_t::operator();
+
+#define MACRO1( z, n, data )\
+ ( BOOST_PP_CAT(_,n) )\
+/**/
+#define MACRO2(z, N1, data)\
+    template<BOOST_PP_ENUM_PARAMS(N1, typename U)>\
+    typename result<\
+        ::boost::mpl::vector<\
+            BOOST_PP_ENUM_PARAMS(N1, U)\
+        >\
+    >::type\
+    impl( BOOST_PP_ENUM_BINARY_PARAMS(N1, U, &_) )const{\
+        typedef ::boost::mpl::vector<\
+            BOOST_PP_ENUM_PARAMS(N1, U)\
+        > v_;\
+        typedef typename result<v_>::type result_;\
+        return result_(\
+        	this->pars_cont,\
+            this->seq_args_cont( BOOST_PP_ENUM_PARAMS(N1, _) )\
+        );\
+    }\
+/**/
+BOOST_PP_REPEAT_FROM_TO(
+	1,
+    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_ARITY),
+    MACRO2,
+    ~
+)
+#undef MACRO1
+#undef MACRO2
+
+#endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
+
+        pars_cont_type const& pars()const
+        {
+        	return this->pars_cont;
+        }
+        seq_args_cont_type const& seq_args()const
+        {
+        	return this->seq_args_cont;
+        }
+
+        protected:
+
+        pars_cont_type pars_cont;
+        seq_args_cont_type seq_args_cont;
+
+    };
+
+}// put_pipe_aux
+}// v2
+}// assign
+}// boost
+
+#endif // BOOST_ASSIGN_V2_PUT_PIPE_CONTAINER_ER_2010_HPP
Added: sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/forward.hpp
==============================================================================
--- (empty file)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/forward.hpp	2011-01-27 18:50:11 EST (Thu, 27 Jan 2011)
@@ -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_PUT_PIPE_MODULO_FORWARD_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_PIPE_MODULO_FORWARD_ER_2010_HPP
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/assign/v2/put/modulo.hpp>
+#include <boost/assign/v2/put/pipe/modulo/size_type.hpp>
+#include <boost/assign/v2/ref/list/at.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_pipe_aux{
+namespace result_of{
+
+	template<modulo_size_type N, typename Pars, typename T,
+    	bool exit = (N == ::boost::mpl::size<Pars>::value)>
+	struct forward_pars
+    {
+    	typedef typename ::boost::mpl::at_c<Pars, N>::type at_;
+        typedef result_of_modulo::generic_<T> meta_;
+        typedef typename ::boost::mpl::apply1<meta_, at_>::type new_t_;
+
+        typedef forward_pars<N+1, Pars, new_t_> next_;
+
+        typedef typename next_::type type;
+
+        template<typename H>
+        static type call(H const& h, T const& t)
+        {
+        	typedef ::boost::mpl::int_<N> int_;
+        	return next_::call(h, t % ref::at<N>( h ) );
+        }
+
+    };
+
+	template<modulo_size_type N,typename Pars, typename T>
+	struct forward_pars<N, Pars, T, true>
+    {
+
+		typedef T type;
+
+        template<typename H>
+        static type call(H const& h, T const& t)
+        {
+        	return t;
+        }
+
+    };
+
+}// result_of
+
+	template<typename Pars, typename T,typename C>
+    typename result_of::forward_pars<0, Pars, T>::type
+	forward_pars(
+        T const& object,
+        C const& c
+	)
+    {
+    	typedef result_of::forward_pars<0, Pars, T> caller_;
+        return caller_::call( c, object );
+	}
+
+}// put_pipe_aux
+namespace result_of{
+
+	template<typename T,typename Pars>
+    struct forward_pars : put_pipe_aux::result_of::forward_pars<
+		0,
+        Pars,
+        T
+    >{};
+
+}// result_of
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/size_type.hpp
==============================================================================
--- (empty file)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/size_type.hpp	2011-01-27 18:50:11 EST (Thu, 27 Jan 2011)
@@ -0,0 +1,26 @@
+//////////////////////////////////////////////////////////////////////////////
+//  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_MODULO_SIZE_TYPE_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_MODULO_SIZE_TYPE_ER_2010_HPP
+#include <boost/assign/v2/ref/list/size_type.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace put_pipe_aux{
+
+	typedef ref::list_aux::size_type modulo_size_type;
+    
+}// put_pipe_aux
+}// v2
+}// assign
+}// boost
+
+#endif
Added: sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/traits.hpp
==============================================================================
--- (empty file)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/modulo/traits.hpp	2011-01-27 18:50:11 EST (Thu, 27 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_PUT_PIPE_MODULO_TRAITS_ER_2010_HPP
+#define BOOST_ASSIGN_V2_PUT_PIPE_MODULO_TRAITS_ER_2010_HPP
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/assign/v2/ref/list/at.hpp>
+#include <boost/assign/v2/ref/list/container.hpp>
+#include <boost/assign/v2/ref/list/nth_result_of.hpp>
+#include <boost/assign/v2/ref/list/make.hpp>
+
+namespace boost{
+	struct use_default;
+namespace assign{
+namespace v2{
+namespace put_pipe_aux{
+
+	template<typename Pars>
+	struct modulo_traits
+    {
+    	typedef ref::nth_result_of::list<use_default> meta_;
+        typedef typename ::boost::mpl::apply1<meta_, Pars>::type cont_;
+        typedef typename ::boost::mpl::size<Pars>::type size;
+
+        template<typename T>
+        struct new_pars : ::boost::mpl::push_back<Pars, T const&>{};
+
+	};
+
+}// put_pipe_aux
+}// v2
+}// assign
+}// boost
+
+#endif