$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r71066 - in sandbox/assign_v2: boost/assign/v2/interpreter boost/assign/v2/option boost/assign/v2/option/modifier boost/assign/v2/put boost/assign/v2/put/cpp03 boost/assign/v2/ref/array libs/assign/v2 libs/assign/v2/src libs/assign/v2/test libs/assign/v2/test/option libs/assign/v2/test/pipe libs/assign/v2/test/put
From: erwann.rogard_at_[hidden]
Date: 2011-04-06 23:04:10
Author: e_r
Date: 2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
New Revision: 71066
URL: http://svn.boost.org/trac/boost/changeset/71066
Log:
upd assign_v2
Text files modified: 
   sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp      |     4                                         
   sandbox/assign_v2/boost/assign/v2/option/list.hpp               |     4                                         
   sandbox/assign_v2/boost/assign/v2/option/modifier/iterate.hpp   |     4 +                                       
   sandbox/assign_v2/boost/assign/v2/option/modifier/row_major.hpp |    32 +++++++---                              
   sandbox/assign_v2/boost/assign/v2/put/cpp03/delay_csv_put.hpp   |    81 ---------------------------             
   sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp               |    81 +++++++++++++++++++++++++++             
   sandbox/assign_v2/boost/assign/v2/put/delay_csv_put.hpp         |    89 -----------------------------           
   sandbox/assign_v2/boost/assign/v2/ref/array/as_arg_list.hpp     |    55 ++++++++++++++++++                      
   sandbox/assign_v2/libs/assign/v2/src/main.cpp                   |     1                                         
   sandbox/assign_v2/libs/assign/v2/test/option/data.cpp           |    15 +---                                    
   sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp         |    16 ++---                                   
   sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp   |    18 +++---                                  
   sandbox/assign_v2/libs/assign/v2/test/pipe.cpp                  |    26 --------                                
   sandbox/assign_v2/libs/assign/v2/test/pipe.h                    |    23 -------                                 
   sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.cpp          |    86 ----------------------------            
   sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.h            |    24 -------                                 
   sandbox/assign_v2/libs/assign/v2/test/put/put.cpp               |   118 +++++++++++++++++++++++++++++++++------ 
   sandbox/assign_v2/libs/assign/v2/tutorial.cpp                   |    90 +++++++++++++++++------------           
   18 files changed, 342 insertions(+), 425 deletions(-)
Modified: sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/interpreter/modifier.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -65,10 +65,10 @@
 }// switch_tag
 
 #define BOOST_ASSIGN_V2_SWITCH_TAG modifier_tag
-BOOST_ASSIGN_V2_SWITCH_CASE( 0, container_aux::is_multi_array, modifier_tag::row_major )
+BOOST_ASSIGN_V2_SWITCH_CASE( 0, container_aux::is_multi_array, modifier_tag::row_major<> )
 BOOST_ASSIGN_V2_SWITCH_CASE( 1, container_aux::is_associative, modifier_tag::insert )
 BOOST_ASSIGN_V2_SWITCH_CASE( 2, container_aux::is_array, modifier_tag::iterate<> )
-BOOST_ASSIGN_V2_SWITCH_CASE( 3, container_aux::has_push_deduced_value,     modifier_tag::push )
+BOOST_ASSIGN_V2_SWITCH_CASE( 3, container_aux::has_push_deduced_value, modifier_tag::push )
 BOOST_ASSIGN_V2_SWITCH_CASE_DEFAULT( 4, modifier_tag::push_back )
 #undef BOOST_ASSIGN_V2_SWITCH_TAG
 
Modified: sandbox/assign_v2/boost/assign/v2/option/list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/list.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -202,9 +202,9 @@
 
 }// result_of
 }// interpreter_aux
+	typedef interpreter_aux::empty_list_option empty_list_option_;
 namespace{
-    interpreter_aux::empty_list_option _list_option
-        = interpreter_aux::empty_list_option();
+    empty_list_option_ _list_option = empty_list_option_();
 }
 namespace interpreter_aux{
 namespace result_of{
Modified: sandbox/assign_v2/boost/assign/v2/option/modifier/iterate.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/modifier/iterate.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/modifier/iterate.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -51,7 +51,9 @@
 
         public:
                     
-        interpreter_modifier(): ptr( new arg_() ){}
+        interpreter_modifier()
+        	: ptr( new arg_() )
+        {}
         explicit interpreter_modifier( 
             ignore_,  
             typename boost::call_traits<arg_>::param_type arg 
Modified: sandbox/assign_v2/boost/assign/v2/option/modifier/row_major.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/option/modifier/row_major.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/option/modifier/row_major.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -12,19 +12,25 @@
 #include <cstddef>
 #include <boost/assert.hpp>
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
+#include <boost/assign/v2/detail/functor/iterate.hpp>
 #include <boost/assign/v2/detail/keyword.hpp>
 #include <boost/assign/v2/option/modifier/framework.hpp>
 #include <boost/call_traits.hpp>
+#include <boost/shared_ptr.hpp>
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 #include <utility>
 #endif
 
+#include <iostream>
+
 namespace boost{
 namespace assign{
 namespace v2{
 //[syntax_option_row_major
 namespace modifier_tag{ 
-    struct row_major{}; 
+
+    template<typename Arg = functor_aux::iterate> struct row_major{}; 
+
 }// modifier_tag
 namespace interpreter_aux{
 
@@ -71,28 +77,34 @@
         row_major_::assign( array, index, BOOST_ASSIGN_V2_forward );
     }
 
-    template<>
-    class interpreter_modifier< modifier_tag::row_major >
+    template<typename Arg>
+    class interpreter_modifier< modifier_tag::row_major<Arg> >
     {
 
-        typedef std::size_t size_type;
+        typedef Arg arg_;
+        typedef boost::shared_ptr<arg_> ptr_; 
 
         public:
         interpreter_modifier()
-            : index_( 0 )
+        	: ptr( new arg_() )
         {}
-        interpreter_modifier( ignore_, size_type n )
-            : index_( n )
+        interpreter_modifier(
+            ignore_,  
+            typename boost::call_traits<arg_>::param_type arg 
+        ) 
+        	: ptr( new arg_( arg ) )
         {}
 
         template<typename C, typename T>
         void impl(C& cont, BOOST_ASSIGN_V2_arg, data_tag::value )const
         {
-            row_major_assign( cont, this->index_++, BOOST_ASSIGN_V2_forward );
+        	int n = (*this->ptr)();
+            std::cout << "n = " << n << std::endl;
+            row_major_assign( cont, n, BOOST_ASSIGN_V2_forward );
         }
 
         private:
-        mutable size_type index_;
+        mutable ptr_ ptr;
     };
 
 #undef BOOST_ASSIGN_V2_arg
@@ -101,7 +113,7 @@
 }// interpreter_aux
 //]
 BOOST_ASSIGN_V2_OPTION_MODIFIER_KEYWORD(row_major)
-BOOST_ASSIGN_V2_OPTION_MODIFIER_META_MODIFIER_TAG(row_major, modifier_tag::row_major)
+BOOST_ASSIGN_V2_OPTION_MODIFIER_META_MODIFIER_TAG(row_major, modifier_tag::row_major<Arg>)
 }// v2
 }// assign
 }// boost
Modified: sandbox/assign_v2/boost/assign/v2/put/cpp03/delay_csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/cpp03/delay_csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/cpp03/delay_csv_put.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,80 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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_CPP03_DELAY_CSV_PUT_HPP_ER_2010
-#define BOOST_ASSIGN_V2_PUT_CPP03_DELAY_CSV_PUT_HPP_ER_2010
-#include <boost/assign/v2/detail/config/limit_csv_arity.hpp>
-#include <boost/mpl/aux_/na.hpp>
-#include <boost/preprocessor/arithmetic/inc.hpp>
-#include <boost/preprocessor/repetition.hpp>
-
-namespace boost{
-namespace assign{
-namespace v2{
-//[syntax_delay_csv_put
-namespace interpreter_aux{
-
-    template<typename U>
-    typename result_of::delay_csv_put<U, 0>::type
-    delay_csv_put()
-    {
-        return typename result_of::delay_csv_put<U, 0>::type(
-            ref::csv_array<U>();
-        );
-    }
-
-#define BOOST_ASSIGN_V2_MACRO2(z, N, U)\
-    template<typename T, arg_list_size_type N>\
-    typename result_of::delay_csv_put<U, N>::type\
-    delay_csv_put( BOOST_PP_ENUM_PARAMS(N, U &_) )\
-    {\
-        return typename result_of::delay_csv_put<U, N>::type(\
-            ref::csv_array<U>( BOOST_PP_ENUM_PARAMS(N, _) )\
-        );\
-    }\
-    template<typename T, typename O, bool is, arg_list_size_type N>\
-    typename result_of::delay_csv_put<U, N>::type\
-    delay_csv_put(\
-        option_crtp<O, is> const& crtp,\
-        BOOST_PP_ENUM_PARAMS(N, U &_)\
-    )\
-    {\
-        typedef O const& options_;\
-        options_ options = static_cast<options_>( crtp );\
-        return typename result_of::delay_csv_put<U, N>::type(\
-            ref::csv_array<U>( BOOST_PP_ENUM_PARAMS(N, _) )\
-        );\
-    }\
-/**/
-
-BOOST_PP_REPEAT_FROM_TO(
-    1,
-    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
-    BOOST_ASSIGN_V2_MACRO2,
-    T
-)
-BOOST_PP_REPEAT_FROM_TO(
-    1,
-    BOOST_PP_INC(BOOST_ASSIGN_V2_LIMIT_CSV_ARITY),
-    BOOST_ASSIGN_V2_MACRO2,
-    T const
-)
-#undef BOOST_ASSIGN_V2_MACRO1
-#undef BOOST_ASSIGN_V2_MACRO2
-
-}// interpreter_aux 
-
-	using interpreter_aux::delay_csv_put;
-
-}// v2
-}// assign
-}// boost
-
-#endif // BOOST_ASSIGN_V2_PUT_CPP03_DELAY_CSV_PUT_HPP_ER_2010
-
+// TODO remove file
\ No newline at end of file
Modified: sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/csv_put.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_PUT_CSV_PUT_ER_2010_HPP
 #include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/detail/pp/ignore.hpp>
+#include <boost/assign/v2/interpreter/as_arg_list.hpp>
 #include <boost/assign/v2/interpreter/csv.hpp>
 #include <boost/assign/v2/put/put.hpp>
 #include <boost/assign/v2/option/data.hpp>
@@ -132,7 +133,74 @@
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
 
-}// interpreter_aux
+
+    template<typename R, typename Os = empty_list_option>
+    struct delayed_csv_put/*<-*/
+    	: Os, as_arg_list_adapter<R>
+    {
+
+		typedef Os super1_t;
+		typedef as_arg_list_adapter<R> super2_t;
+
+        explicit delayed_csv_put(R& r)
+        	: super2_t( r )
+        {}
+
+        explicit delayed_csv_put(Os options, R& r)
+        	: super1_t( options ), super2_t( r )
+        {}
+
+		template<typename C>
+		C& apply(C& cont)const
+        {
+			make_csv_ready(
+            	put( cont ) % static_cast<super1_t const&>( *this )
+            )(
+            	static_cast<super2_t const&>( *this )
+            );
+            
+            return cont;
+        }
+
+
+    }/*->*/;
+
+    template<typename C, typename R, typename Os>
+    C& operator|(C& cont, delayed_csv_put<R, Os> const& rhs)/*<-*/
+    {
+        return rhs.apply( cont );
+
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
+
+namespace result_of{
+
+	template<typename R, typename Os = empty_list_option>
+	struct delay_csv_put/*<-*/
+    {
+    	typedef delayed_csv_put<R, Os> type;
+    }/*->*/;
+
+
+}// result_of
+    
+    template<typename R>
+    typename result_of::delay_csv_put<R const>::type
+    delay_csv_put(R const& range)/*<-*/
+    {
+        return delayed_csv_put<R const>( range );
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
+
+
+    template<typename Os, typename R>
+    typename result_of::delay_csv_put<R const, Os>::type
+    delay_csv_put(option_crtp<Os> const& options, R const& range)/*<-*/
+    {
+        return delayed_csv_put<R const, Os>( 
+            static_cast<Os const&>( options ), range 
+        );
+    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
+
+}// interpreter_aux 
 //<-
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
@@ -140,6 +208,17 @@
 //<-
 #endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 //->
+
+	using interpreter_aux::delay_csv_put;
+
+namespace result_of{
+
+	template<typename R, typename Os = empty_list_option_>
+	struct delay_csv_put 
+    	: interpreter_aux::result_of::delay_csv_put<R, Os>
+    {};
+
+}// result_of
 //]
 
 }// v2
Modified: sandbox/assign_v2/boost/assign/v2/put/delay_csv_put.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/delay_csv_put.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/delay_csv_put.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,88 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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_DELAYED_CSV_PUT_HPP_ER_2010
-#define BOOST_ASSIGN_V2_PUT_DELAYED_CSV_PUT_HPP_ER_2010
-#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
-#include <boost/assign/v2/detail/pp/ignore.hpp>
-#include <boost/assign/v2/put/put.hpp>
-#include <boost/assign/v2/option/list.hpp>
-#include <boost/assign/v2/ref/array/as_arg_list.hpp> 
-#include <boost/call_traits.hpp>
-#include <boost/concept_check.hpp>
-#if BOOST_ASSIGN_V2_ENABLE_CPP0X
-#include <utility>
-#endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
-
-namespace boost{
-    struct use_default;
-namespace assign{
-namespace v2{
-//[syntax_delay_csv_put
-namespace interpreter_aux{
-
-    template<typename R, typename Os = empty_list_option>
-    struct delayed_csv_put/*<-*/
-    	: as_arg_list_adapter<
-        	typename boost::add_const<R>::type
-        >,
-        Os 
-    {
-		typedef as_arg_list_adapter<
-        	typename boost::add_const<R>::type
-        > super1_t;
-
-		typedef Os super2_t;
-
-        explicit delayed_csv_put(typename call_traits<R>::param_type r)
-        	: super1_t( r )
-        {}
-
-        explicit delayed_csv_put(
-        	Os options, 
-            typename call_traits<R>::param_type r
-        )
-        	: super1_t( r ), super2_t( options )
-        {}
-
-		template<typename C>
-		C& apply(C& cont)
-        {
-
-			make_csv_ready(
-            	put( cont ) % static_cast<super2_t const&>( *this )
-            )(
-            	static_cast<super1_t const&>( *this )
-            );
-            
-            return cont;
-        
-        }
-
-
-    }/*->*/;
-
-    template<typename C, typename R, typename Os>
-    C& operator|(C& cont, delayed_csv_put<R, O> const& rhs)/*<-*/
-    {
-        return rhs.apply( cont )
-
-    }BOOST_ASSIGN_V2_IGNORE(/*->*/;/*<-*/)/*->*/
-
-}// interpreter_aux 
-
-	using interpreter_aux::delay_csv_put;
-
-//]
-}// v2
-}// assign
-}// boost
-
-#endif // BOOST_ASSIGN_V2_PUT_DELAYED_CSV_PUT_HPP_ER_2010
-
+// TODO remove file
\ No newline at end of file
Modified: sandbox/assign_v2/boost/assign/v2/ref/array/as_arg_list.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/array/as_arg_list.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/array/as_arg_list.hpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1 +1,54 @@
-// TODO remove file
\ No newline at end of file
+//////////////////////////////////////////////////////////////////////////////
+//  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_ARRAY_AS_ARG_LIST_ER_2010_HPP
+#define BOOST_ASSIGN_V2_REF_ARRAY_AS_ARG_LIST_ER_2010_HPP
+#include <boost/assign/v2/ref/array/interface.hpp>
+#include <boost/assign/v2/ref/array/size_type.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost{
+namespace assign{
+namespace v2{
+namespace ref{
+namespace array_aux{
+
+    // --- Implementation --- //
+
+    template<size_type I, typename F, typename Impl, typename D>
+    typename boost::enable_if_c<
+        D::static_size == I
+    >::type
+    as_arg_list( F const& f, interface<Impl, D> const& array)
+    {}
+
+    template<size_type I, typename F, typename Impl, typename D>
+    typename boost::enable_if_c< I < D::static_size >::type
+    as_arg_list(F const& f , interface<Impl, D> const& array)
+    {
+        f( array[ I ].get() );
+        as_arg_list<I + 1>( f, array );
+    }
+
+    // --- User interface --- //
+
+    template<typename F, typename Impl, typename D>
+    void as_arg_list(F const& f , interface<Impl, D> const& array)
+    {
+        as_arg_list<0>( f, array );
+    }
+
+}// array_aux
+using array_aux::as_arg_list;
+}// ref
+}// v2
+}// assign
+}// boost
+
+#endif // BOOST_ASSIGN_V2_REF_ARRAY_AS_ARG_LIST_ER_2010_HPP
Modified: sandbox/assign_v2/libs/assign/v2/src/main.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/src/main.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/src/main.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -67,7 +67,6 @@
         xxx_deque::test();
         xxx_interpreter::test();
         xxx_option::test();
-        //xxx_pipe::test();
         xxx_put::test();
         xxx_ref::test();
     }
Modified: sandbox/assign_v2/libs/assign/v2/test/option/data.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/data.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/data.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -53,19 +53,14 @@
         }
         {
             //[test_option_data_recursive
-            int i = 1, k = 1;
+            int k = 1;
             
-            BOOST_AUTO(
-                factorials, (
-                    as2::deque<int>( as2::_nil ) % (
-                        as2::_data = ( lambda::var( k ) *= ( lambda::var( i )++ ) )
-                    )
-                )()()()()()
-            );
-
             BOOST_ASSIGN_V2_CHECK( 
                 range::equal( 
-                    factorials, 
+                    as2::csv_deque<int>( 
+                    	as2::_data = ( lambda::var( k ) *= lambda::_1 ), 
+                        1, 2, 3, 4, 5 
+                    ), 
                     as2::csv_deque( 1, 2, 6, 24, 120 ) 
                 ) 
             );
Modified: sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/mapped.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -61,17 +61,15 @@
         }
         {
             //[test_option_mapped_deque
-            BOOST_AUTO(
-                alternating,
-                (
-                    as2::deque<int>( 
-                        as2::as_arg_list( std::list<int>( 10, 1 ) ) 
-                    ) % ( as2::_mapped = ( lambda::_1 *= -1 ) )
-                )( 1 )( 3 )( 5 )( 7 )( 9 )
-            );
+            std::list<int> source(10, 1); 
+            BOOST_AUTO( option, ( as2::_mapped = ( lambda::_1 *= -1 ) ) );
+            
             BOOST_ASSIGN_V2_CHECK( 
                 range::equal(
-                    alternating,
+                    (
+                    	as2::deque<int>( as2::as_arg_list( source ) ) 
+                        % option
+                	)( 1 )( 3 )( 5 )( 7 )( 9 ),
                     as2::csv_deque( +1, -1, +1, -1, +1, -1, +1, -1, +1, -1 )
                 )
             );
Modified: sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/option/std_modifier.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -36,9 +36,6 @@
         using namespace boost;
         namespace as2 = assign::v2;
 
-        // Note: In many cases, the default is already set at that invoked with 
-        // operator% 
-
         // PUT
         {
             //[test_option_standard_meta
@@ -56,16 +53,19 @@
             // fully qual boost::begin/end demanded by MSVC - error C2668
             //[test_option_push_front
             boost::circular_buffer<int> cb( 3 ); 
-            as2::csv_put( cb, as2::_push_front, 3, 2, 1 );
-             
+            
             BOOST_ASSIGN_V2_CHECK(
-                range::equal(cb, as2::csv_deque(1, 2, 3) )
+                range::equal(
+                	cb | as2::delay_csv_put( as2::_push_front, as2::csv_deque( 3, 2, 1 ) ), 
+                    as2::csv_deque( 1, 2, 3 ) 
+                )
             );
 
-            as2::csv_put( cb, 4, 5 );
-
             BOOST_ASSIGN_V2_CHECK(
-                range::equal(cb, as2::csv_deque(3, 4, 5) )
+                range::equal(
+                	cb | as2::delay_csv_put( as2::csv_deque( 4, 5 ) ), 
+                    as2::csv_deque( 3, 4, 5 ) 
+                )
             );    
 
             //]
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,25 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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)        //
-//////////////////////////////////////////////////////////////////////////////
-#include <libs/assign/v2/test/pipe/csv_put.h>
-#include <libs/assign/v2/test/pipe/option.h>
-#include <libs/assign/v2/test/pipe.h>
-
-namespace test_assign_v2{
-namespace xxx_pipe{
-
-    void test()
-    {
-        xxx_csv_put::test();
-        xxx_option::test();
-    }
-
-}// xxx_pipe
-}// xxx_test_assign
-
+// TODO remove file
\ No newline at end of file
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe.h
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe.h	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe.h	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,22 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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 LIBS_ASSIGN_V2_TEST_PIPE_ER_2010_H
-#define LIBS_ASSIGN_V2_TEST_PIPE_ER_2010_H
-
-namespace test_assign_v2{
-namespace xxx_pipe{
-
-    void test();
-
-}// xxx_pipe
-}// xxx_test_assign
-
-#endif // LIBS_ASSIGN_V2_TEST_PIPE_ER_2010_H
-
+// TODO remove file
\ No newline at end of file
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,85 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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)        //
-//////////////////////////////////////////////////////////////////////////////
-#include <map>
-#include <deque>
-#include <string>
-#include <boost/assign/v2/detail/config/check.hpp>
-#include <boost/assign/v2/detail/traits/container.hpp>
-#include <boost/assign/v2/include/csv_deque.hpp>
-#include <boost/assign/v2/pipe/csv_put.hpp> 
-#include <boost/ptr_container/ptr_map.hpp>
-#include <boost/range/algorithm/equal.hpp>
-
-#include <libs/assign/v2/test/pipe/csv_put.h>
-
-namespace test_assign_v2{
-namespace xxx_pipe{
-namespace xxx_csv_put{ 
-
-    void test(){
-    
-        using namespace boost;
-        namespace as2 = assign::v2;
-        {
-            //[test_pipe_csv_put_str_literal
-            typedef const char* T; typedef std::string str_; 
-            std::deque<T> cont;
-
-            BOOST_ASSIGN_V2_CHECK( 
-                boost::range::equal(
-                    cont | /*<<`"x"`, `"y"` and `"z"` are kept as `const char(&)[2]`>>*/as2::_csv_put( "x", "y", "z" ),
-                    as2::csv_deque<str_>( "x", "y", "z" )
-                )
-            );
-            //]
-        }
-        {
-            //[test_pipe_csv_put_map
-            typedef std::map<std::string, int> C; typedef C::value_type T;
-            C cal; C benchmark; 
-            benchmark["jan"] = 31;
-            benchmark["feb"] = 28;
-            benchmark["mar"] = 31;
-            
-            cal  | as2::_csv_put( T("jan", 31), T( "feb", 28 ), T("mar", 31) );
-            
-            BOOST_ASSIGN_V2_CHECK( 
-                range::equal(
-                    cal  | as2::_csv_put( T("jan", 31), T("feb", 28 ), T("mar", 31) ),
-                    benchmark
-                )
-            );
-            //]
-        }
-        {
-            //[test_pipe_csv_put_map_ptr
-            typedef boost::ptr_map<std::string, int> C; 
-            typedef as2::value_container_value<C>::type T; 
-
-            C benchmark; 
-            benchmark["jan"] = 31;
-            benchmark["feb"] = 28;
-            benchmark["mar"] = 31;
-            
-            C cal; 
-            BOOST_ASSIGN_V2_CHECK( 
-                range::equal(
-                    cal  | as2::_csv_put( T("jan", 31), T("feb", 28 ), T("mar", 31) ),
-                    benchmark
-                )
-            );
-            //]
-        }
-
-    }// test()
-
-}// xxx_csv_put
-}// xxx_pipe
-}// xxx_test_assign
+// TODO remove file
Modified: sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.h
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.h	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/pipe/csv_put.h	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -1,23 +1 @@
-//////////////////////////////////////////////////////////////////////////////
-//  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 LIBS_ASSIGN_V2_TEST_PIPE_CSV_PUT_ER_2010_H
-#define LIBS_ASSIGN_V2_TEST_PIPE_CSV_PUT_ER_2010_H
-
-namespace test_assign_v2{
-namespace xxx_pipe{
-namespace xxx_csv_put{
-
-    void test();
-
-}// xxx_csv_put
-}// xxx_pipe
-}// test_assign_v2
-
-#endif // LIBS_ASSIGN_V2_TEST_PIPE_CSV_PUT_ER_2010_H
+// TODO remove file
Modified: sandbox/assign_v2/libs/assign/v2/test/put/put.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/test/put/put.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/test/put/put.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -18,25 +18,29 @@
 #include <stack>
 #include <string>
 #include <utility>
-#include <boost/circular_buffer.hpp>
-#include <boost/unordered_map.hpp>
-#include <boost/unordered_set.hpp>
+
+#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
+#if !BOOST_ASSIGN_V2_ENABLE_CPP0X
+#define BOOST_ASSIGN_V2_LIMIT_CSV_ARITY 30
+#endif // BOOST_ASSIGN_V2_ENABLE_CPP0X
 
 #include <boost/assign/v2/detail/config/check.hpp>
 #include <boost/assign/v2/detail/traits.hpp>
 #include <boost/assign/v2/include/csv_deque.hpp>
 #include <boost/assign/v2/include/put.hpp>
 #include <boost/assign/v2/include/csv_put.hpp>
-#include <boost/tuple/tuple.hpp>
+#include <boost/circular_buffer.hpp>
+#include <boost/multi_array.hpp>
+#include <boost/numeric/conversion/bounds.hpp>
 #include <boost/range/algorithm_ext/iota.hpp>
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/unordered_map.hpp>
+#include <boost/unordered_set.hpp>
 #include <boost/variant.hpp>
 #include <libs/assign/v2/test/put/put.h>
 
-#include <iostream>
-
 namespace test_assign_v2{
 namespace xxx_put{
 namespace xxx_put{
@@ -54,7 +58,7 @@
             std::queue<int> adapter;     as2::csv_put( adapter, 1, 10, 100 );
             array<int, 3> array;         as2::csv_put( array,   1, 10, 100 );
             std::set<int> assoc;         as2::csv_put( assoc,   1, 10, 100 );
-            std::list<int> seq;         as2::csv_put( seq,     1, 10, 100 );
+            std::list<int> seq;          as2::csv_put( seq,     1, 10, 100 );
             //]
             BOOST_ASSIGN_V2_CHECK(  adapter.front()    == 1 );
             BOOST_ASSIGN_V2_CHECK(  adapter.back()     == 100 );
@@ -147,11 +151,22 @@
         //SET
         {    
             //[test_csv_put_unordered_set
-            boost::unordered_set<std::string> set; 
-            as2::csv_put( set, "foo", "bar", "baz" );
-
-            BOOST_ASSIGN_V2_CHECK( set.count( "foo" ) == 1 );
-            BOOST_ASSIGN_V2_CHECK( set.count( "baz" ) == 1 );
+            typedef std::string word_;
+            typedef boost::unordered_set<word_> C;
+            
+            C set, benchmark;
+            benchmark.insert( "foo" );
+            benchmark.insert( "bar" );
+            benchmark.insert( "baz" );
+            
+            BOOST_ASSIGN_V2_CHECK(
+            	range::equal(
+                	set | as2::delay_csv_put( 
+                    	as2::csv_deque<word_>( "foo", "bar", "baz" ) 
+                    ),
+                    benchmark
+                )
+            );
             //]
         }
         // MAP
@@ -162,7 +177,8 @@
             const char y[4] = { 'b', 'a', 'r', '\0' };
             word_ z = "***baz";
             boost::unordered_map<int, word_> map;
-            as2::put( map )/*<<Calls `map.insert( 1, str_( foo, 3 ) )`>>*/( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
+                        
+            as2::put( map )( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
 
             assert( map[1] == "foo" ); assert( map[2] == "bar" );
             assert( map[3] == "baz" ); assert( map[4] == "qux" );
@@ -173,12 +189,77 @@
             typedef std::string month_; typedef int days_;
             typedef std::map<month_, days_> C; 
             typedef C::value_type T;
-            C map; as2::csv_put( map, T("jan", 31 ), T( "feb", 28 ), T( "mar", 31 ) );
+            C map, benchmark;
+                        
+            as2::csv_put( map, T("jan", 31 ), T( "feb", 28 ), T( "mar", 31 ) );
 
             BOOST_ASSIGN_V2_CHECK( map["jan"] == 31 );
+            BOOST_ASSIGN_V2_CHECK( map["feb"] == 28 );
             BOOST_ASSIGN_V2_CHECK( map["mar"] == 31 );
             //]
         }
+        // MULTI-ARRAY
+        {
+        	//[test_csv_put_multi_array
+        	typedef boost::multi_array<int, 3> array3_;
+        	typedef array3_::size_type size_;
+        
+        	typedef const int dim_;
+            dim_ dim1 = 2, dim2 = 3, dim3 = 4; 
+            
+	        using boost::extents;
+        	array3_ array3( extents[dim1][dim2][dim3] );
+
+	        as2::csv_put( 
+    	        array3,
+        	     0,  1,  2,  3,    
+            	 4,  5,  6,  7,    
+                 8,  9, 10, 11,    
+
+   		         12, 13, 14, 15,    
+        	     16, 17, 18, 19,    
+            	 20, 21, 22, 23    
+        	);
+            
+        	size_ i = 0;
+        	for( size_ i1 = 0; i1 < dim1; i1++ )
+        	{
+            	for( size_ i2 = 0; i2 < dim2; i2++ )
+              	{
+                	for( size_ i3 = 0; i3 < dim3; i3++ )
+                	{
+                    	BOOST_ASSIGN_V2_CHECK( array3[ i1 ][ i2 ][ i3 ] == i++ );
+                	}
+            	}
+        	}
+
+			//]
+
+	        using boost::indices;
+    	    typedef boost::multi_array_types::index_range range;
+    	    array3_::array_view<2>::type view =
+    	    array3[ indices[1][range(0,2)][range(1,3)] ];
+
+        	as2::csv_put(
+            	view,
+            	99, 98,
+            	97, 96
+        	);
+
+        	BOOST_ASSIGN_V2_CHECK(
+            	boost::range::equal(
+                	as2::csv_deque( 
+                    	view[0][0], view[0][1], 
+                    	view[1][0], view[1][1]
+                	),
+                	as2::csv_deque( 
+                    	99, 98, 
+                    	97, 96
+                	)
+            	)
+        	);
+        
+        }
         // OTHER
         {
             //test_csv_put_cb
@@ -189,10 +270,11 @@
                 range::equal(cb, as2::csv_deque(1, 2, 3) )
             );
 
-            as2::csv_put( cb, 4, 5 );
-
             BOOST_ASSIGN_V2_CHECK(
-                range::equal(cb, as2::csv_deque(3, 4, 5) )
+                range::equal(
+                	cb | as2::delay_csv_put( as2::csv_deque( 4, 5 ) ), 
+                    as2::csv_deque(3, 4, 5) 
+                )
             );
             //]
         }
Modified: sandbox/assign_v2/libs/assign/v2/tutorial.cpp
==============================================================================
--- sandbox/assign_v2/libs/assign/v2/tutorial.cpp	(original)
+++ sandbox/assign_v2/libs/assign/v2/tutorial.cpp	2011-04-06 23:04:08 EDT (Wed, 06 Apr 2011)
@@ -9,10 +9,11 @@
 //////////////////////////////////////////////////////////////////////////////
 #include <assert.h>
 #include <cstddef>
-#include <vector>
 #include <deque>
+#include <list>
 #include <map>
 #include <queue>
+#include <vector>
 #include <boost/assign/v2.hpp>
 #include <boost/array.hpp>
 #include <boost/lambda/lambda.hpp>
@@ -34,10 +35,11 @@
         using namespace boost;
         using namespace assign::v2;
         {
-            //[tutorial_assign
+            //[tutorial_assign1
             std::vector<int> numeric( 10 ); iota( numeric, 0 ); 
             typedef std::string str_; typedef variant< int, str_ > data_; 
             array<data_, 16> keypad;
+            
             csv_put( keypad
                 , "+", "-", "*", "/", "=", "." 
                 , as_arg_list( numeric ) 
@@ -48,12 +50,18 @@
             //]
         }
         {
-            //[tutorial_piping
-            std::deque<int> cont;
-            range::stable_partition( cont | _csv_put( 0, 1, 2, 3, 4, 5 ), lambda::_1 % 2 );
-            //]
-            //[tutorial_container_generation
-            assert( range::equal( cont, csv_deque(1, 3, 5, 0, 2, 4) ) );
+            //[tutorial_delay_csv_put
+            std::deque<int> source( 6 ), sorted; iota( source, 0 );
+            
+            range::stable_partition( 
+            	sorted | delay_csv_put( source ), 
+                lambda::_1 % 2 
+            );
+			//]
+			//[tutorial_csv_deque
+            assert( 
+            	range::equal( sorted, csv_deque(1, 3, 5, 0, 2, 4) ) 
+            );
             //]
         }
         {
@@ -66,69 +74,75 @@
         }
         {
             //[tutorial_ptr_container
-            typedef std::string T; ptr_set<T> assoc;
-            T x = "isomer", y = "ephemeral", z = "prosaic";
-            /*<<Calls `assoc.insert( new T( t ) )` for [^t = x, y, z]>>*/
-            assoc | _csv_put( x, z, y );
+            typedef std::string word_; ptr_set<word_> words;
+            /*<<Calls `assoc.insert( new word_( s ) )` for [^s = "isomer", "ephemeral", "prosaic"]>>*/
+            csv_put( words, "isomer", "ephemeral", "prosaic" );
 
-            assert( assoc.count( x ) == 1 );
-            assert( assoc.count( z ) == 1 );
+            assert( words.count( "isomer" ) == 1 );
+            assert( words.count( "prosaic" ) == 1 );
             //]
         }
         {
             //[tutorial_chain
-            std::vector<int> iota8( 8 ); 
-            for(int i = 0; i < 8; i++){ iota8[i] = 1 + i; }
-            array<int, 5> iota5; int six, seven, eight;
+            std::vector<int> source( 8 ); boost::iota( source, 1 );
+            
+            array<int, 5> copies; int x, y, z;
             boost::copy(
-                iota8,
+                source,
                 boost::begin(
-                    iota5 | _chain( ref::csv_array( six, seven, eight ) | ref::_get )
+                    copies | _chain( 
+                    	ref::csv_array( x, y, z ) | ref::_get 
+                    )
                 )
             );
 
-            assert( 
-                range::equal( iota5, csv_deque(1, 2, 3, 4, 5) ) 
-            );
-            assert( six == 6 ); 
-            assert( seven == 7 ); 
-            assert( eight == 8 );
+            assert( range::equal( copies, csv_deque(1, 2, 3, 4, 5) ) );
+            assert( x == 6 ); assert( y == 7 ); assert( z == 8 );
             //]
         }
         {
-            //[tutorial_conversion
-            std::queue<int> fifo = converter( csv_deque( 1, 10, 100 ) );
+            //[tutorial_converter
+            typedef std::queue<int> C;
+            
+            C fifo = converter( csv_deque( 1, 2, 3 ) );
+            assert( fifo.front() == 1 ); assert( fifo.back() == 3 );
+			//]
 
-            assert( fifo.front() == 1 ); assert( fifo.back() == 100 );
+            //[tutorial_convert
+            assert(
+            	( csv_deque( 1, 1, 3 ) | convert<C>() ) < fifo
+            );
             //]
         }
         {
-            //[tutorial_data_gen
+            //[tutorial_map
             typedef std::string word_; 
             const char x[] = "foo";
             const char y[4] = { 'b', 'a', 'r', '\0' };
             word_ z = "***baz";
             std::map<int, word_> map;
-             put( map )/*<<Calls `map.insert( 1, str_( foo, 3 ) )`>>*/( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
+            put( map )/*<<Calls `map.insert( 1, str_( foo, 3 ) )`>>*/( 1, x, 3 )( 2, y )( 3, z, 3, 3 )( 4, "qux");
 
             assert( map[1] == "foo" ); assert( map[2] == "bar" );
             assert( map[3] == "baz" ); assert( map[4] == "qux" );
             //]
         }
         {
-            //[tutorial_option
-            typedef array<int, 10> C; C alternating; 
-            alternating[0] = -1; alternating[1] = +1; 
-            alternating[2] = -2;
+            //[tutorial_modifier
+            typedef array<int, 10> C; C series; 
+            series[0] = -1; series[1] = +1; 
+            series[2] = -2;
 
             C::size_type index = 3; 
-            ( 
-                put( alternating ) % ( _iterate = lambda::var( index )++ ) 
-            )( +2 )( -3 )( +3 )( -4 )( +4 )( -5 )( +5 );
+            csv_put( 
+            	series
+                , _iterate = lambda::var( index )++
+            	, +2, -3, +3, -4, +4, -5 , +5 
+            );
 
             assert( 
                 range::equal( 
-                    alternating, 
+                    series, 
                     csv_deque( -1, +1, -2, +2, -3, +3, -4, +4, -5, +5 ) 
                 )
             );