//============================================================================ template<class T> inline std::size_t ndims( T const& xpr ) { typename meta::call<tag::extent_(T const&)>::type sz = nt2::extent(xpr); std::size_t i = sz.size(); while((i != 0) && (sz[i-1] == 1)) { i--; } return std::max ( std::size_t(2) , (i == 0 ? sz.size() : std::max(std::size_t(2),i)) ); }
//============================================================================ template<class T> inline std::size_t nbdims( T const& xpr ) { typename meta::call<tag::size_(T const&)>::type sz = nt2::size(xpr); std::size_t i = sz.size(); if(i != 0) { while(sz(--i) == 1); return i>0 ? i : sz.size(); } else // Not sure 0D should return 0 or 2 here return 0; }