Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r55852 - sandbox/statistics/matrix_view/boost/matrix_view/algorithm
From: erwann.rogard_at_[hidden]
Date: 2009-08-28 20:46:49


Author: e_r
Date: 2009-08-28 20:46:49 EDT (Fri, 28 Aug 2009)
New Revision: 55852
URL: http://svn.boost.org/trac/boost/changeset/55852

Log:
modif
Text files modified:
   sandbox/statistics/matrix_view/boost/matrix_view/algorithm/transform_column.hpp | 80 ++++++++++++++++++++++++++++++++++++----
   1 files changed, 72 insertions(+), 8 deletions(-)

Modified: sandbox/statistics/matrix_view/boost/matrix_view/algorithm/transform_column.hpp
==============================================================================
--- sandbox/statistics/matrix_view/boost/matrix_view/algorithm/transform_column.hpp (original)
+++ sandbox/statistics/matrix_view/boost/matrix_view/algorithm/transform_column.hpp 2009-08-28 20:46:49 EDT (Fri, 28 Aug 2009)
@@ -10,6 +10,8 @@
 #include <iterator>
 #include <boost/utility.hpp>
 #include <boost/lambda/lambda.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/iterator/iterator_concepts.hpp>
 
 namespace boost{
 namespace matrix_view{
@@ -23,38 +25,100 @@
     // A k-step iterator + algorithm would be more general, but until then...
     template<unsigned k,typename F,typename It,typename ItO>
     ItO transform_column(
+ It b, // first matrix elem
+ It e, // last matrix elem
+ unsigned offset,
+ F f,
+ ItO i_o // column
+ );
+
+ template<unsigned k,typename F,typename It,typename ItO>
+ ItO transform_to_column(
+ It b, // first of column
+ It e, // end of column
+ unsigned offset,
+ F f,
+ ItO i_o // first matrix elem
+ );
+
+ template<unsigned k,typename It,typename ItO>
+ ItO copy_column(
+ It b,
+ It e,
+ unsigned offset,
+ ItO i_o
+ ){
+ return transform_column<k>(b, e, offset, boost::lambda::_1, i_o);
+ }
+
+
+ template<unsigned k,typename It,typename ItO>
+ ItO copy_to_column(
+ It b,
+ It e,
+ unsigned offset,
+ ItO i_o
+ ){
+ return transform_to_column<k>(b, e, offset, boost::lambda::_1, i_o);
+ }
+
+
+ // Implementation //
+
+ template<unsigned k,typename F,typename It,typename ItO>
+ ItO transform_column(
         It b,
         It e,
         unsigned offset,
         F f,
         ItO i_o
     ){
+ BOOST_CONCEPT_ASSERT((boost_concepts::IncrementableIterator<It>));
+ BOOST_CONCEPT_ASSERT((boost_concepts::IncrementableIterator<ItO>));
+ BOOST_CONCEPT_ASSERT((boost_concepts::WritableIterator<It>));
+
         typedef typename iterator_difference<It>::type diff_;
- diff_ d = std::distance(b,e);
+ diff_ d = std::distance( b, e );
         BOOST_ASSERT(d>=0);
         if(d<offset){
             return i_o;
         }
- b = next(b,offset);
+ b = boost::next( b, offset );
         diff_ n = d / k;
- i_o = f(*b);
+ *i_o = f(*b);
+ ++i_o;
         for(unsigned i = 1; i<n; ++i){
- std::advance(b,k);
- i_o = f(*b);
+ b = boost::next( b, k );
+ *i_o = f(*b);
             ++i_o;
         }
         return i_o;
     }
 
 
- template<unsigned k,typename It,typename ItO>
- ItO copy_column(
+ template<unsigned k,typename F,typename It,typename ItO>
+ ItO transform_to_column(
         It b,
         It e,
         unsigned offset,
+ F f,
         ItO i_o
     ){
- return transform_column<k>(b, e, offset, boost::lambda::_1, i_o);
+ BOOST_CONCEPT_ASSERT((boost_concepts::IncrementableIterator<It>));
+ BOOST_CONCEPT_ASSERT((boost_concepts::IncrementableIterator<ItO>));
+ BOOST_CONCEPT_ASSERT((boost_concepts::WritableIterator<It>));
+
+ typedef typename iterator_difference<It>::type diff_;
+ i_o = boost::next( i_o, offset );
+ diff_ n = std::distance(b, e);
+ *i_o = f( *b );
+ ++b;
+ for(unsigned i = 1; i<n; ++i){
+ i_o = boost::next( i_o, k );
+ *i_o = f( *b );
+ ++b;
+ }
+ return ++i_o;
     }
 
 }// algorithm


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