#define _SCL_SECURE_NO_WARNINGS #include using std::cout; using std::endl; #include using boost::multi_array; using boost::multi_array_ref; using boost::const_multi_array_ref; #include "MultiArrayRotation.h" int main(){ const unsigned short dimensionality = 3; typedef multi_array< int, dimensionality > IntArray; typedef IntArray::size_type size_type; typedef const_multi_array_ref< int, dimensionality > IntArrayCRef; boost::array sizes = { { 2,3,4 } }; IntArray a( sizes ); boost::cyclic_storage_order cyclic_storage(1); boost::array sizesRotated = { { 3, 4, 2 } }; IntArrayCRef rotated( a.data(), sizesRotated, cyclic_storage ); //initialize: for ( size_t i = 0 ; i != sizes[0]; ++i ) for ( size_t j = 0 ; j != sizes[1]; ++j ) for ( size_t k = 0 ; k != sizes[2]; ++k ) a[i][j][k] = (i+1) + 10 * (j+1) + 100*(k+1); typedef IntArray::const_iterator iterator3; typedef boost::subarray_gen::type::const_iterator iterator2; typedef boost::subarray_gen::type::const_iterator iterator1; for ( iterator3 it3 = a.begin(); it3 != a.end(); ++ it3 ) { cout << "in first iterator:"; boost::detail::multi_array::const_sub_array & d2 = *it3; cout << (d2.shape())[0] << "x" << (d2.shape())[1] << endl; for ( iterator2 it2 = it3->begin(); it2 != it3->end(); ++ it2 ) { // cout << "\t" << it2->shape()[0] << endl; for ( iterator1 it1 = it2->begin(); it1 != it2->end(); ++ it1 ) cout << "\t\t" << (*it1) << endl; } } //for a rotated system: typedef IntArrayCRef::const_iterator iterator3CRef; typedef boost::subarray_gen::type::const_iterator iterator2CRef; typedef boost::subarray_gen::type::const_iterator iterator1CRef; cout << endl << "In Rotated System" << endl; for ( iterator3CRef it3 = rotated.begin(); it3 != rotated.end(); ++ it3 ) { cout << "in first iterator:"; //boost::const_multi_array_ref::const_sub_array & d2 = *it3; cout << (it3->shape())[0] << "x" << (it3->shape())[1] << endl; for ( iterator2CRef it2 = it3->begin(); it2 != it3->end(); ++ it2 ) { // cout << "\t" << it2->shape()[0] << endl; for ( iterator1CRef it1 = it2->begin(); it1 != it2->end(); ++ it1 ) cout << "\t\t" << (*it1) << endl; } } return 1; }