#ifndef UBLASBEGIN_H #define UBLASBEGIN_H #include "boost/numeric/ublas/detail/config.hpp" /** work around an ublas bug. access to the column iterator (iter2) given a row iterator (iter1) works different for different compilers */ ///row_major template inline typename MatrixT::const_iterator2 getBegin(const typename MatrixT::const_iterator1& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.begin(); #else return begin(iter, iterator1_tag() ); #endif } template inline typename MatrixT::iterator2 getBegin(const typename MatrixT::iterator1& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.begin(); #else return begin(iter, iterator1_tag() ); #endif } ///column_major template inline typename MatrixT::const_iterator1 getBegin(const typename MatrixT::const_iterator2& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.begin(); #else return begin(iter, iterator2_tag() ); #endif } template inline typename MatrixT::iterator1 getBegin(const typename MatrixT::iterator2& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.begin(); #else return begin(iter, iterator2_tag() ); #endif } ///row_major template inline typename MatrixT::const_iterator2 getEnd(const typename MatrixT::const_iterator1& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.end(); #else return end(iter, iterator1_tag() ); #endif } template inline typename MatrixT::iterator2 getEnd(const typename MatrixT::iterator1& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.end(); #else return end(iter, iterator1_tag() ); #endif } ///column_major template inline typename MatrixT::const_iterator1 getEnd(const typename MatrixT::const_iterator2& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.end(); #else return end(iter, iterator2_tag() ); #endif } template inline typename MatrixT::iterator1 getEnd(const typename MatrixT::iterator2& iter ) { #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION return iter.end(); #else return end(iter, iterator2_tag() ); #endif } #endif