inline void assert_shapes_are_equal( const Shape<xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> & x , const Shape<ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> & y ) { typedef Shape<xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> x_type ; typedef Shape<ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> y_type ; if ( x != y ) { assert_shapes_are_equal_throw( x_type::scalar_size, x_type::rank, x.N0, x.N1, x.N2, x.N3, x.N4, x.N5, x.N6, x.N7, y_type::scalar_size, y_type::rank, y.N0, y.N1, y.N2, y.N3, y.N4, y.N5, y.N6, y.N7 ); } }
void assert_shapes_are_equal( const Shape<xLayout,xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> & x , const Shape<yLayout,ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> & y ) { typedef Shape<xLayout,xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> x_type ; typedef Shape<yLayout,ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> y_type ; if ( x != y ) { assert_shapes_are_equal_throw( typeid(typename x_type::array_layout), x_type::value_size , x_type::rank, x.Stride, x.N0, x.N1, x.N2, x.N3, x.N4, x.N5, x.N6, x.N7, typeid(typename y_type::array_layout), y_type::value_size , y_type::rank, y.Stride, y.N0, y.N1, y.N2, y.N3, y.N4, y.N5, y.N6, y.N7 ); } }
void assert_shapes_equal_dimension( const Shape<xLayout,xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> & x , const Shape<yLayout,ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> & y ) { typedef Shape<xLayout,xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> x_type ; typedef Shape<yLayout,ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> y_type ; if ( x.rank != y.rank || x.N0 != y.N0 || x.N1 != y.N1 || x.N2 != y.N2 || x.N3 != y.N3 || x.N4 != y.N4 || x.N5 != y.N5 || x.N6 != y.N6 || x.N7 != y.N7 ) { assert_shapes_are_equal_throw( typeid(typename x_type::array_layout), x_type::value_size , x_type::rank, x.Stride, x.N0, x.N1, x.N2, x.N3, x.N4, x.N5, x.N6, x.N7, typeid(typename y_type::array_layout), y_type::value_size , y_type::rank, y.Stride, y.N0, y.N1, y.N2, y.N3, y.N4, y.N5, y.N6, y.N7 ); } }
void assert_shapes_equal_dimension( const Shape<xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> & x , const Shape<ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> & y ) { typedef Shape<xSize,xRank,xN0,xN1,xN2,xN3,xN4,xN5,xN6,xN7> x_type ; typedef Shape<ySize,yRank,yN0,yN1,yN2,yN3,yN4,yN5,yN6,yN7> y_type ; // Omit comparison of scalar_size. if ( unsigned( x.rank ) != unsigned( y.rank ) || size_t( x.N0 ) != size_t( y.N0 ) || unsigned( x.N1 ) != unsigned( y.N1 ) || unsigned( x.N2 ) != unsigned( y.N2 ) || unsigned( x.N3 ) != unsigned( y.N3 ) || unsigned( x.N4 ) != unsigned( y.N4 ) || unsigned( x.N5 ) != unsigned( y.N5 ) || unsigned( x.N6 ) != unsigned( y.N6 ) || unsigned( x.N7 ) != unsigned( y.N7 ) ) { assert_shapes_are_equal_throw( x_type::scalar_size, x_type::rank, x.N0, x.N1, x.N2, x.N3, x.N4, x.N5, x.N6, x.N7, y_type::scalar_size, y_type::rank, y.N0, y.N1, y.N2, y.N3, y.N4, y.N5, y.N6, y.N7 ); } }