//Purpose: // Compare storage order's in multi_array and array_dyn. //Results: // multi_array fortran_storage == array_dyn dir_fwd // multi_array c_storage == array_dyn dir_rev #include #include #include #include #include #include using namespace boost; typedef unsigned element_t; template < typename MultiArray > struct is_multi_array : mpl::false_ { }; template < typename T , std::size_t NumDims > struct is_multi_array < multi_array > : mpl::true_ {}; template < typename T , std::size_t NumDims , typename TPtr > struct is_multi_array < detail::multi_array::const_sub_array > : mpl::true_ {}; template < typename MultiArray > typename enable_if, std::ostream&>::type operator<< ( std::ostream& sout , MultiArray const& arr ) { //unsigned num_dims=arr.num_dimensions(); typename MultiArray::const_iterator beg(arr.begin()), now(beg), end(arr.end()); sout<<"{ "; for(unsigned i=0; now!=end; ++now,++i) { if(0 void iota_init ( Array& arr , element_t value0=0 ) { std::iota( arr.data(), arr.data()+arr.num_elements(), value0); } template < typename T > void iota_init ( array_stepper::array_dyn& arr , element_t value0=0 ) { std::iota( arr.my_data.begin(), arr.my_data.end(), value0); } template < std::size_t NumDims > std::ostream& operator<< ( std::ostream& sout , general_storage_orderconst& so ) { sout<<"{ "; for(unsigned i=0; i indent_outbuf(std::cout,2); std::size_t const num_dims=3; { std::cout<<"multi_array:\n"; std::cout< array_type; enum {fortran_so, c_so}; general_storage_order so[c_so+1] ={ fortran_storage_order() , c_storage_order() }; char const*name_so[c_so+1]={"fortran","c"}; for(unsigned iso=fortran_so; iso<=c_so; iso++) { std::cout< array_type; array_type::lengths_t a_lengths({2,3,4}); dirs so[dir_rev+1]={dir_fwd,dir_rev}; char const*name_so[dir_rev+1]={"fwd","rev"}; for(unsigned iso=dir_fwd; iso<=dir_rev; iso++) { std::cout<<"dir="<