$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69830 - in sandbox/assign_v2/boost/assign/v2: put put/container put/frame put/modifier/iterate put/modifier/lookup put/modifier/repeat put/pipe ref/array utility/conversion
From: erwann.rogard_at_[hidden]
Date: 2011-03-10 17:18:33
Author: e_r
Date: 2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
New Revision: 69830
URL: http://svn.boost.org/trac/boost/changeset/69830
Log:
update assign_v2
Text files modified: 
   sandbox/assign_v2/boost/assign/v2/put/container.hpp                |     1                                         
   sandbox/assign_v2/boost/assign/v2/put/container/put_range.hpp      |    52 --------------------------------------  
   sandbox/assign_v2/boost/assign/v2/put/frame/crtp.hpp               |    53 +++++++++++++++++++++++++++++++++++++++ 
   sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/impl.hpp    |    28 +++++++++++++-------                    
   sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/tag.hpp     |    24 ++++++++++++++++-                       
   sandbox/assign_v2/boost/assign/v2/put/modifier/lookup/impl.hpp     |     4 +-                                      
   sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/impl.hpp     |     3 -                                       
   sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/tag.hpp      |     3 +                                       
   sandbox/assign_v2/boost/assign/v2/put/pipe.hpp                     |     2                                         
   sandbox/assign_v2/boost/assign/v2/put/pipe/range.hpp               |     3 ++                                      
   sandbox/assign_v2/boost/assign/v2/ref/array/conversion.hpp         |     3 ++                                      
   sandbox/assign_v2/boost/assign/v2/utility/conversion/convert.hpp   |     4 ++                                      
   sandbox/assign_v2/boost/assign/v2/utility/conversion/converter.hpp |     1                                         
   13 files changed, 108 insertions(+), 73 deletions(-)
Modified: sandbox/assign_v2/boost/assign/v2/put/container.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/container.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/container.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -12,6 +12,5 @@
 #include <boost/assign/v2/put/container/adapter.hpp>
 #include <boost/assign/v2/put/container/fwd.hpp>
 #include <boost/assign/v2/put/container/put.hpp>
-#include <boost/assign/v2/put/container/put_range.hpp>
 
 #endif // BOOST_ASSIGN_V2_PUT_CONTAINER_ER_2010_HPP
Modified: sandbox/assign_v2/boost/assign/v2/put/container/put_range.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/container/put_range.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/container/put_range.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -1,51 +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_CONTAINER_PUT_RANGE_ER_2010_HPP
-#define BOOST_ASSIGN_V2_PUT_CONTAINER_PUT_RANGE_ER_2010_HPP
-#include <boost/assign/v2/put/container/put.hpp>
-#include <boost/range/algorithm/for_each.hpp>
-
-namespace boost{
-namespace assign{
-namespace v2{
-namespace result_of{
-
-	template<typename /*<<C& has to be a reference>>*/C, typename R, bool binary = true>
-    struct put_range
-    {
-    	typedef C& type;
-    };
-
-	template<typename C, typename R>
-    struct put_range<C, R>
-    {
-		typedef C type;     
-    };
-
-}// result_of
-
-    template<typename C, typename R>
-    C& put_range( C& cont, R const& r )
-    {
-        return ::boost::for_each( r, put( cont ) ).container();
-    }
-
-    template<typename C, typename R>
-    C put_range( R const& r )
-    {
-        C cont;
-        return put_range( cont, r );
-    }
-
-}// v2
-}// assign
-}// boost
-
-#endif // BOOST_ASSIGN_V2_PUT_CONTAINER_PUT_RANGE_ER_2010_HPP
+// TODO remove file
\ No newline at end of file
Modified: sandbox/assign_v2/boost/assign/v2/put/frame/crtp.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/frame/crtp.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/frame/crtp.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -9,14 +9,17 @@
 //////////////////////////////////////////////////////////////////////////////
 #ifndef BOOST_ASSIGN_V2_PUT_FRAME_CRTP_ER_2010_HPP
 #define BOOST_ASSIGN_V2_PUT_FRAME_CRTP_ER_2010_HPP
+#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/detail/pp/forward.hpp>
 #include <boost/assign/v2/detail/traits/container/is_ptr_container.hpp>
+#include <boost/assign/v2/put/frame/as_arg_list.hpp>
 #include <boost/assign/v2/put/frame/fwd.hpp>
 #include <boost/assign/v2/put/frame/modifier.hpp>
 #include <boost/mpl/always.hpp>
 #include <boost/mpl/apply.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <boost/ref.hpp>
 #include <boost/utility/enable_if.hpp>
-#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 #include <utility>
 #else
@@ -60,6 +63,46 @@
 
     };
 
+	template<typename D>
+    struct wrapper
+    {
+
+        wrapper(D const& d):d_( d ){}
+            
+        operator D const&()const{ return this->d_; }
+			        
+        typedef wrapper const& result_type;            
+        
+#if BOOST_ASSIGN_V2_ENABLE_CPP0X
+        template<typename T>
+        result_type operator()( T&& t )const
+        {
+            this->d_(
+                /*<< Instance of F >>*/ this->fun( std::forward<Args>(args)... )
+            );
+            return (*this);
+        }
+#else
+        
+        template<typename T>
+        result_type operator()(T& t)const
+        {
+            this->d_( t ); return (*this);
+        }
+        
+        template<typename T>
+        result_type operator()(T const & t)const
+        {
+            this->d_( t ); return (*this);
+        }
+#endif
+                 
+        private:
+        D const& d_;
+        
+    };
+
+
     // D has to model concept_sub::Pre3, with respect to container C, functor F
     // and Tag. It then models concept_sub::Post
     template<typename C, typename F, typename Tag, typename D>
@@ -93,6 +136,14 @@
         explicit crtp( F const& f, modifier_ const& m )
             : fun_holder_( f ), modifier_holder_( m ){}
 
+		template<typename R>
+        result_type 
+        operator()( as_arg_list_adapter<R> range )const
+        {
+             return ::boost::for_each( range(), wrapper<D>( this->derived() ) ); 
+        }
+
+
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 
         //[frame_crtp_functor
Modified: sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/impl.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/impl.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/impl.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -10,10 +10,11 @@
 #ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_ITERATE_IMPL_ER_2010_HPP
 #define BOOST_ASSIGN_V2_PUT_MODIFIER_ITERATE_IMPL_ER_2010_HPP
 #include <boost/assign/v2/detail/keyword/ignore.hpp>
+#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
 #include <boost/assign/v2/put/frame/modifier.hpp>
 #include <boost/assign/v2/put/modifier/iterate/tag.hpp>
-
-#include <boost/assign/v2/detail/config/enable_cpp0x.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/shared_ptr.hpp>
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
 #include <utility>
 #include <boost/type_traits/is_reference.hpp>
@@ -30,12 +31,17 @@
     {
 
                 typedef keyword_aux::ignore ignore_;
+        typedef Arg arg_;
+        // storing a copy of lambda::something has caused pbs, hence ptr
+        typedef boost::shared_ptr<arg_> ptr_; 
                     
         public:
                     
-        modifier(){}
-        explicit modifier( ignore_, Arg arg )
-            : arg_( arg )
+        modifier(): ptr( new arg_() ){}
+        explicit modifier( 
+        	ignore_,  
+        	typename boost::call_traits<arg_>::param_type arg 
+        ) : ptr( new arg_( arg ) )
         {}
 
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
@@ -46,7 +52,7 @@
 		>::type
         impl(C& cont, T&& t )const
         {
-            cont.at( this->arg_() ) = std::move( t ); // TODO ?
+			cont.at( (*this->ptr)() ) = std::move( t ); 
         }
 
 #endif
@@ -54,17 +60,19 @@
         template<typename C, typename T>
         void impl(C& cont, T& t )const
         {
-            cont.at( this->arg_() ) = t;
+            cont.at( (*this->ptr)() ) = t;
         }
-
+        
+		// TODO verify
         template<typename C, typename T>
         void impl(C& cont, T* t)const
         {
-            cont.replace( this->arg_() , t);
+			cont.replace( this->arg_() , t);
         }
                     
         protected:
-        mutable Arg arg_;
+        ptr_ ptr;
+
     };
 
 }// put_aux
Modified: sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/tag.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/tag.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/modifier/iterate/tag.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -9,14 +9,34 @@
 //////////////////////////////////////////////////////////////////////////////
 #ifndef BOOST_ASSIGN_V2_PUT_MODIFIER_ITERATE_TAG_ER_2010_HPP
 #define BOOST_ASSIGN_V2_PUT_MODIFIER_ITERATE_TAG_ER_2010_HPP
-#include <boost/assign/v2/detail/functor/post_increment.hpp>
+#include <cstddef>
+//#include <boost/lambda/lambda.hpp>
+//#include <boost/typeof/typeof.hpp>
 
 namespace boost{
 namespace assign{
 namespace v2{
 namespace modifier_tag{ 
 
-	template<typename Arg = functor_aux::post_increment<> > struct iterate{}; 
+	// TODO think of lambda expression
+	struct iterate_arg
+    {
+        
+		typedef std::size_t result_type;
+        
+        iterate_arg():i( 0 ){}
+        iterate_arg( result_type i_ ):i( i_ ){}
+        
+        result_type operator()()const{ return this->i++; }
+
+        typedef iterate_arg type;
+        
+        private:
+        mutable result_type i;
+    };
+
+
+	template<typename Arg = iterate_arg::type > struct iterate{}; 
 
 }// modifier_tag
 }// v2
Modified: sandbox/assign_v2/boost/assign/v2/put/modifier/lookup/impl.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/modifier/lookup/impl.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/modifier/lookup/impl.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -24,13 +24,13 @@
     {
 
         typedef Arg arg_;
-        // storing a copy of Arg has caused problems with lambda::, hence ptr
+        // storing a copy of lambda::something has caused pbs, hence ptr
         typedef boost::shared_ptr<arg_> ptr_; 
                 typedef keyword_aux::ignore ignore_;
                 
         public:
 
-        modifier(){}
+        modifier() : ptr( new arg_() ){}
         explicit modifier(
                 ignore_,
             typename boost::call_traits<arg_>::param_type arg
Modified: sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/impl.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/impl.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/impl.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -36,8 +36,7 @@
         modifier() : n_( 0 ){}
         explicit modifier( inner_type inner, size_type n )
             : inner_( inner ), n_( n )
-        {
-        }
+        {}
 
 #if BOOST_ASSIGN_V2_ENABLE_CPP0X
                 template<typename C, typename T>
Modified: sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/tag.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/tag.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/modifier/repeat/tag.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -16,7 +16,8 @@
 namespace v2{
 namespace modifier_tag{ 
 
-	template<typename /*<<Arg is the modifier-tag of the implementation to override>>*/> struct repeat{}; 
+	template<typename /*<<Arg is the modifier-tag of the implementation to override>>*/ Arg> 
+    struct repeat{}; 
 
 }// modifier_tag
 }// v2
Modified: sandbox/assign_v2/boost/assign/v2/put/pipe.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/pipe.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -11,6 +11,6 @@
 #define BOOST_ASSIGN_V2_PUT_PIPE_ER_2010_HPP
 #include <boost/assign/v2/put/pipe/csv_put.hpp>
 #include <boost/assign/v2/put/pipe/put.hpp>
-#include <boost/assign/v2/put/pipe/range.hpp>
+//#include <boost/assign/v2/put/pipe/range.hpp>
 
 #endif // BOOST_ASSIGN_V2_PUT_PIPE_ER_2010_HPP
Modified: sandbox/assign_v2/boost/assign/v2/put/pipe/range.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/put/pipe/range.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/put/pipe/range.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -1,3 +1,5 @@
+// TODO keep in working copy
+/*
 //////////////////////////////////////////////////////////////////////////////
 //  Boost.Assign v2                                                         //
 //                                                                          //
@@ -66,3 +68,4 @@
 }// boost
 
 #endif // BOOST_ASSIGN_V2_PUT_PIPE_RANGE_ER_2010_HPP
+*/
Modified: sandbox/assign_v2/boost/assign/v2/ref/array/conversion.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/ref/array/conversion.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/ref/array/conversion.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -27,6 +27,9 @@
 #undef BOOST_ASSIGN_V2_R
 
 }// array_aux
+
+using array_aux::convert;
+
 }// ref
 }// v2
 }// assign
Modified: sandbox/assign_v2/boost/assign/v2/utility/conversion/convert.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/utility/conversion/convert.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/utility/conversion/convert.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -11,6 +11,7 @@
 #define BOOST_ASSIGN_V2_UTILITY_CONVERSION_CONVERT_ER_2010_HPP
 #include <boost/assign/v2/put/container/put_range.hpp>
 #include <boost/assign/v2/utility/conversion/deduce_tag.hpp>
+#include <boost/range/algorithm/for_each.hpp>
 
 namespace boost{
 namespace assign{
@@ -21,7 +22,7 @@
     C convert(R const& r, convert_tag::put)
     {
         C cont;
-        return v2::put_range( cont, r );
+        return ::boost::for_each( r, put( cont ) ).container();
     }
 
     template<typename C, typename R>
@@ -45,6 +46,7 @@
     struct convert{ typedef C type; };
 
 }//result_of
+
 }// v2
 }// assign
 }// boost
Modified: sandbox/assign_v2/boost/assign/v2/utility/conversion/converter.hpp
==============================================================================
--- sandbox/assign_v2/boost/assign/v2/utility/conversion/converter.hpp	(original)
+++ sandbox/assign_v2/boost/assign/v2/utility/conversion/converter.hpp	2011-03-10 17:18:29 EST (Thu, 10 Mar 2011)
@@ -73,7 +73,6 @@
 }// assign
 }// boost
 
-
 #if defined( BOOST_ASSIGN_V2_UTILITY_CONVERSION_CONVERTER_NAME_LOOKUP_PARAM ) || defined ( BOOST_ASSIGN_V2_UTILITY_CONVERSION_CONVERTER_NAME_LOOKUP )
 #error
 #endif