Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r59479 - in sandbox/statistics/detail/assign: boost/assign libs/assign/example
From: erwann.rogard_at_[hidden]
Date: 2010-02-04 15:15:47


Author: e_r
Date: 2010-02-04 15:15:46 EST (Thu, 04 Feb 2010)
New Revision: 59479
URL: http://svn.boost.org/trac/boost/changeset/59479

Log:
m
Text files modified:
   sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp | 26 ++++++++++---
   sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp | 75 ++++++++++++++-------------------------
   2 files changed, 48 insertions(+), 53 deletions(-)

Modified: sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp
==============================================================================
--- sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp (original)
+++ sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp 2010-02-04 15:15:46 EST (Thu, 04 Feb 2010)
@@ -31,10 +31,17 @@
 namespace cref_list_of2_impl{
             
         typedef boost::mpl::void_ top_;
+
+ template<typename T,bool do_const>
+ struct value : boost::mpl::if_<
+ boost::mpl::bool_<do_const>,
+ typename add_const<T>::type,
+ T
+ >{};
             
     template<typename T>
     struct ref{
- typedef boost::assign_detail::assign_reference<const T> type;
+ typedef boost::assign_detail::assign_reference<T> type;
     };
             
     template<typename T,int N>
@@ -69,10 +76,10 @@
         // public:
         typedef next_ result_type;
                 
- expr(const T& t):ref(t){} // only for N == 1
- expr(E& p,const T& t):previous(p),ref(t){}
+ expr(T& t):ref(t){} // only for N == 1
+ expr(E& p,T& t):previous(p),ref(t){}
                 
- next_ operator()(const T& t){ return next_(*this,t); }
+ next_ operator()(T& t){ return next_(*this,t); }
                 
         template<typename T1>
         operator boost::array<T1,N>(){
@@ -167,12 +174,19 @@
 }// cref_list_of2_impl
         
     template<typename T>
- typename cref_list_of2_impl::first<T>::type
+ typename cref_list_of2_impl::first<const T>::type
     cref_list_of2(const T& t){
+ typedef typename cref_list_of2_impl::first<const T>::type expr_;
+ return expr_(t);
+ }
+
+ template<typename T>
+ typename cref_list_of2_impl::first<T>::type
+ ref_list_of2(T& t){
         typedef typename cref_list_of2_impl::first<T>::type expr_;
         return expr_(t);
     }
-
+
 }// assign
 }// boost
 

Modified: sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp
==============================================================================
--- sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp (original)
+++ sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp 2010-02-04 15:15:46 EST (Thu, 04 Feb 2010)
@@ -16,78 +16,59 @@
 
 void example_cref_list_of2(std::ostream& os)
 {
- os << "-> example_cref_listof2 : " << std::endl;
+ os << "-> example_cref_listof2 : ";
         using namespace boost::assign;
     
           typedef std::vector<int> ints_;
 
         {
- int a=1,b=2;
+ int a=1,b=2,c=3;
             ints_ ints;
     
             ints = cref_list_of<3>(a)(b)(3);
                 BOOST_ASSERT(ints[0] == a);
                 BOOST_ASSERT(ints[1] == b);
                 BOOST_ASSERT(ints[2] == 3);
+
+ // cref_list_of2
             ints.clear();
                 ints = cref_list_of2(a)(b)(3);
                 BOOST_ASSERT(ints[0] == a);
                 BOOST_ASSERT(ints[1] == b);
                 BOOST_ASSERT(ints[2] == 3);
-
- ints = cref_list_of2(a)(b)(3);
 
- BOOST_AUTO(
- tmp,
- cref_list_of2(a)(b)(3)
- );
- ints = ints_(boost::begin(tmp),boost::end(tmp));
+ {
+ ints.clear();
+ BOOST_AUTO(
+ tmp,
+ cref_list_of2(a)(b)(3)
+ );
+ ints = ints_(boost::begin(tmp),boost::end(tmp));
+ BOOST_ASSERT(ints[0] == a);
+ BOOST_ASSERT(ints[1] == b);
+ BOOST_ASSERT(ints[2] == 3);
+ }
 
+ // ref_list_of2
+ ints.clear();
+ ints = ref_list_of2(a)(b)(c);
                 BOOST_ASSERT(ints[0] == a);
                 BOOST_ASSERT(ints[1] == b);
- BOOST_ASSERT(ints[2] == 3);
+ BOOST_ASSERT(ints[2] == c);
         
- }
- {
- const int n = 100 * 1000;
- typedef std::vector<ints_> vec_ints_;
- ints_ a( n );
- ints_ b( n );
- boost::timer t;
-
- {
- t.restart();
- vec_ints_ vec_ints = cref_list_of<3>( a )( b )( ints_( n ) );
- double t_val = t.elapsed();
- os << "cref_list_of : t = " << t_val << std::endl;
- BOOST_ASSERT(vec_ints[0] == a);
- BOOST_ASSERT(vec_ints[1] == b);
- BOOST_ASSERT(vec_ints[2] == ints_( n ));
- }
                 {
- t.restart();
- vec_ints_ vec_ints = cref_list_of2( a )( b )( ints_( n ) );
- double t_val = t.elapsed();
- os << "conversion cref_list_of2 : t = " << t_val << std::endl;
- BOOST_ASSERT(vec_ints[0] == a);
- BOOST_ASSERT(vec_ints[1] == b);
- BOOST_ASSERT(vec_ints[2] == ints_( n ));
- }
- {
- t.restart();
- BOOST_AUTO(
+ ints.clear();
+ BOOST_AUTO(
                 tmp,
- cref_list_of2( a )( b )( ints_( n ) )
+ ref_list_of2(a)(b)(c)
             );
- vec_ints_ vec_ints(boost::begin(tmp),boost::end(tmp));
- double t_val = t.elapsed();
- os << "copy cref_list_of2 : t = " << t_val << std::endl;
- BOOST_ASSERT(vec_ints[0] == a);
- BOOST_ASSERT(vec_ints[1] == b);
- BOOST_ASSERT(vec_ints[2] == ints_( n ));
- }
+ ints = ints_(boost::begin(tmp),boost::end(tmp));
+ BOOST_ASSERT(ints[0] == a);
+ BOOST_ASSERT(ints[1] == b);
+ BOOST_ASSERT(ints[2] == 3);
+ }
         
- }
+ }
 
     
         os << "<- " << std::endl;


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