$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60221 - in sandbox/statistics/detail/assign: boost/assign/auto_size/array boost/assign/auto_size/detail libs/assign/example
From: erwann.rogard_at_[hidden]
Date: 2010-03-05 20:25:52
Author: e_r
Date: 2010-03-05 20:25:51 EST (Fri, 05 Mar 2010)
New Revision: 60221
URL: http://svn.boost.org/trac/boost/changeset/60221
Log:
m
Text files modified: 
   sandbox/statistics/detail/assign/boost/assign/auto_size/array/interface.hpp |     2 +                                       
   sandbox/statistics/detail/assign/boost/assign/auto_size/detail/expr.hpp     |    76 ++++++++++++++++++++++++--------------- 
   sandbox/statistics/detail/assign/libs/assign/example/ref_list_of.cpp        |    38 ++++++++++++-------                     
   3 files changed, 72 insertions(+), 44 deletions(-)
Modified: sandbox/statistics/detail/assign/boost/assign/auto_size/array/interface.hpp
==============================================================================
--- sandbox/statistics/detail/assign/boost/assign/auto_size/array/interface.hpp	(original)
+++ sandbox/statistics/detail/assign/boost/assign/auto_size/array/interface.hpp	2010-03-05 20:25:51 EST (Fri, 05 Mar 2010)
@@ -45,6 +45,8 @@
         typedef typename boost::range_difference<
             ref_array_>::type difference_type;
                 
+		BOOST_STATIC_CONSTANT(int, static_size = N);
+                
         iterator begin()
         {
             return boost::begin(this->ref_array());
Modified: sandbox/statistics/detail/assign/boost/assign/auto_size/detail/expr.hpp
==============================================================================
--- sandbox/statistics/detail/assign/boost/assign/auto_size/detail/expr.hpp	(original)
+++ sandbox/statistics/detail/assign/boost/assign/auto_size/detail/expr.hpp	2010-03-05 20:25:51 EST (Fri, 05 Mar 2010)
@@ -53,7 +53,8 @@
         // ---- describe ---- //
     
         void describe(std::ostream& os,const top_& e){}
-    template<typename E,typename T,int N,template<typename> class Ref,typename P>
+    template<
+        typename E,typename T,int N,template<typename> class Ref,typename P>
         void describe(std::ostream& os,const expr<E,T,N,Ref,P>& e){
             describe(os,e.previous);
             os << ',' << e.ref;
@@ -78,6 +79,43 @@
 
     }
 
+	// ---- next ---- //
+
+    // BUG K>1
+    template<int K,typename E,typename T,int N,
+    	template<typename>class Ref,typename P,typename ForwardIterator>
+    typename result_of::expr<T,N+K,Ref,P>::type
+    next_impl(const expr<E,T,N,Ref,P>& e, ForwardIterator first)
+    {
+        typedef boost::mpl::int_<K> k_;
+        return next_impl(k_(),e,first);	
+    }
+
+    template<int K,typename E,typename T,int N,
+    	template<typename>class Ref,typename P,typename ForwardIterator>
+    typename result_of::expr<T,N+K,Ref,P>::type
+    next_impl(boost::mpl::int_<K>,const expr<E,T,N,Ref,P>& e,
+        ForwardIterator first)
+    {
+        typedef typename result_of::expr<T,N+1,Ref,P>::type next_;
+        next_ n = e(*first);
+        typedef boost::mpl::int_<K-1> k_;
+        return next_impl(k_(),n,boost::next(first));	
+    }
+
+    template<typename E,typename T,int N,
+    	template<typename>class Ref,typename P,typename ForwardIterator>
+    const typename result_of::expr<T,N,Ref,P>::type&
+    next_impl(boost::mpl::int_<0>,const expr<E,T,N,Ref,P>& e,
+        ForwardIterator first)
+    {
+        std::cout << "debugging only : ";
+        describe(std::cout,e); 
+        std::cout << std::endl; 
+        return e;	
+    }
+
+
     // ---- Collection builder ---- //
 
     template<
@@ -99,7 +137,7 @@
         typedef typename boost::mpl::if_<is_1st_,E,const E&>::type previous_;
         typedef typename next<expr>::type result_type;
 
-        // expr( T& r ); // (!= static_generic_list<>)
+        // expr( T& r ); 
 
         expr(const E& p,T& t):previous(p),ref(t){} 
         // Needed by csv.hpp :
@@ -113,7 +151,6 @@
 
         // TODO csv here.
 
-
 //		template<typename K,typename ForwardIterator>
 //        typename result_of::expr<T,N+K,Ref,P>::type
 //        range(ForwardIterator b,ForwardIterator e){
@@ -122,37 +159,16 @@
 //        }
 
 //		template<typename Range>
-//        range(const Range& r)
+//      range(const Range& r)	// enable if static_size only
+//
+//		template<int K,typename Range>
+//      range(const Range& r)   // valid for dynamic size 	
 
         mutable previous_ previous;
         mutable ref_ ref;
 
-        // private: // temporarily commented out
-                
-        // BUG K>1
-        template<int K,typename ForwardIterator>
-        typename result_of::expr<T,N+K,Ref,P>::type
-        next_impl(ForwardIterator first)const{
-            typedef boost::mpl::int_<K> k_;
-            return this->next_impl(k_(),first);	
-        }
-
-        template<int K,typename ForwardIterator>
-        typename result_of::expr<T,N+K,Ref,P>::type
-        next_impl(boost::mpl::int_<K>,ForwardIterator first)const{
-            result_type res = (*this)(*first);
-            typedef boost::mpl::int_<K-1> k_;
-            return res.next_impl(k_(),boost::next(first));	
-        }
-
-        template<typename ForwardIterator>
-		const expr&
-        next_impl(boost::mpl::int_<0>,ForwardIterator end)const{
-        	std::cout << "debugging only : ";
-            describe(std::cout,*this); 
-            std::cout << std::endl;
-            return (*this);	
-        }
+        private:
+        expr();
 
     };
 
Modified: sandbox/statistics/detail/assign/libs/assign/example/ref_list_of.cpp
==============================================================================
--- sandbox/statistics/detail/assign/libs/assign/example/ref_list_of.cpp	(original)
+++ sandbox/statistics/detail/assign/libs/assign/example/ref_list_of.cpp	2010-03-05 20:25:51 EST (Fri, 05 Mar 2010)
@@ -10,6 +10,7 @@
 #include <vector>
 #include <algorithm>
 #include <boost/typeof/typeof.hpp>
+#include <boost/assign/auto_size/detail/has_static_size.hpp> // temporary
 #include <boost/assign/auto_size/ref_list_of.hpp> // temporary
 #include <boost/assign/auto_size/ref_list_of_csv.hpp>
 #include <boost/assign/auto_size/ref_rebind_list_of_csv.hpp>
@@ -22,7 +23,7 @@
 {
     os << "-> example_ref_listof : ";
     using namespace boost::assign;
-    
+    using namespace boost::assign::detail::auto_size;
     typedef std::vector<int> ints_;
     typedef boost::array<int,3> array_;
     array_ array;
@@ -35,7 +36,28 @@
         // cref_list_of_csv
 
             int a=1, b=2, c=3;
-    
+
+		{
+			// debugging cref_list_of().range()
+			// BUG for K > 1
+        	ints_ ints(3);
+            ints[0] =  a; ints[1] = b; ints[2] = c;
+            typedef tag::no_policy tag;
+            typedef boost::mpl::int_<3> K_;
+    		BOOST_AUTO(tmp,
+            	next_impl<K_::value>(
+                	cref_list_of<tag>(a)(b)(3)
+            		,boost::begin(ints)
+                )
+            );
+			describe(os,tmp);
+
+            //BOOST_ASSERT(tmp[0] == a);    
+            //BOOST_ASSERT(tmp[1] == b);    
+            //BOOST_ASSERT(tmp[2] == c);    
+
+		}
+/*
         {
                     ints.clear();
 
@@ -44,20 +66,8 @@
             BOOST_ASSERT(ints[0] == a);    
             BOOST_ASSERT(ints[1] == b);    
             BOOST_ASSERT(ints[2] == c);    
-
-			// BUG for K > 1
-            typedef boost::mpl::int_<3> K_;
-    		BOOST_AUTO(tmp,cref_list_of(a)(b)(3)
-            	.next_impl<K_::value>(boost::begin(ints))
-            );
-
-            BOOST_ASSERT(tmp[0] == a);    
-            BOOST_ASSERT(tmp[1] == b);    
-            BOOST_ASSERT(tmp[2] == c);    
-//			describe(os,tmp);
             
         }
-/*
         {
             array.assign(-1);
             array = cref_list_of_csv(a,b,3);