Index: bindings/traits/ublas_banded.hpp =================================================================== --- bindings/traits/ublas_banded.hpp (Revision 43794) +++ bindings/traits/ublas_banded.hpp (Arbeitskopie) @@ -76,20 +76,24 @@ static int leading_dimension (matrix_type& m) { // g++ 2.95.4 and 3.0.4 (with -pedantic) dislike // identifier_type::functor_type::size2() - return lower_bandwidth(m) + upper_bandwidth(m) + 1 ; + //return lower_bandwidth(m) + upper_bandwidth(m) + 1 ; + typedef typename identifier_type::orientation_category orientation_category; + return detail::ublas_banded_ordering::leading_dimension(m) ; } // stride1 == distance (m (i, j), m (i+1, j)) static int stride1 (matrix_type& m) { typedef typename identifier_type::orientation_category orientation_category; - typedef typename detail::ublas_ordering::functor_type functor_t ; - return functor_t::one2 ( std::max(m.size1(), m.size2()), leading_dimension(m)-1 ) ; + //typedef typename detail::ublas_ordering::functor_type functor_t ; + //return functor_t::one2 ( std::max(m.size1(), m.size2()), leading_dimension(m)-1 ) ; + return detail::ublas_banded_ordering::stride1(m) ; } // stride2 == distance (m (i, j), m (i, j+1)) static int stride2 (matrix_type& m) { typedef typename identifier_type::orientation_category orientation_category; - typedef typename detail::ublas_ordering::functor_type functor_t ; - return functor_t::one1 ( std::max(m.size1(), m.size2()), leading_dimension(m)-1 ) ; + //typedef typename detail::ublas_ordering::functor_type functor_t ; + //return functor_t::one1 ( std::max(m.size1(), m.size2()), leading_dimension(m)-1 ) ; + return detail::ublas_banded_ordering::stride2(m) ; } }; Index: bindings/traits/detail/ublas_ordering.hpp =================================================================== --- bindings/traits/detail/ublas_ordering.hpp (Revision 43794) +++ bindings/traits/detail/ublas_ordering.hpp (Arbeitskopie) @@ -68,6 +68,46 @@ } }; + template + struct ublas_banded_ordering {}; + + template<> + struct ublas_banded_ordering { + + template + static int leading_dimension( M const& m ) { + return m.lower() + m.upper() + 1 ; + } + + template + static int stride1( M const& m ) { + return 1 ; + } + + template + static int stride2( M const& m ) { + return leading_dimension(m)-1 ; + } + }; + + template<> + struct ublas_banded_ordering { + + template + static int leading_dimension( M const& m ) { + return m.lower() + m.upper() + 1 ; + } + + template + static int stride1( M const& m ) { + return std::max(m.size1(), m.size2()) ; + } + + template + static int stride2( M const& m ) { + return 1 ; + } + }; } }}}}