Classes var_lens_less_range and con_lens_less_range cause the subscript ranges of a matrix to appear reduced, while the number of dimensions appears the same. Thus some components are not longer accessible.
Employed the example program below, function alone_non_var will be fully described later. However, a brief explanation is that it performs the same operation on every element of a matrix.
#include "SOME_DIRECTORY/mat_gen_dim.h" using namespace mat_gen_dim; struct add_5 { void operator () (double & a) { a += 5.0; } }; int main () { form const frm_a {blt{1,3},blt{2,6},blt{5,8}}; cout << "\nfrm_a: " << frm_a; var_matrix<double> mat_a {sub_matrix_linear (frm_a,2.0)}; cout << "\nmat_a before: " << mat_a; form const frm_b {blt{1,3},blt{3,6},blt{5,7}}; cout << "\nfrm_b: " << frm_b; var_lens_less_range<double> adr_b {mat_a, frm_b}; cout << "\nadr_b before: " << adr_b; alone_non_var<add_5,double> (adr_b); cout << "\nadr_b after: " << adr_b; cout << "\nmat_a after: " << mat_a; return 0; }delivers this result:
frm_a: ( 1 =< 3, 2 =< 6, 5 =< 8 ) mat_a before: ( 1 2 5 ) = 2.125 ( 1 2 6 ) = 2.126 ( 1 2 7 ) = 2.127 ( 1 3 5 ) = 2.135 ( 1 3 6 ) = 2.136 ( 1 3 7 ) = 2.137 ( 1 4 5 ) = 2.145 ( 1 4 6 ) = 2.146 ( 1 4 7 ) = 2.147 ( 1 5 5 ) = 2.155 ( 1 5 6 ) = 2.156 ( 1 5 7 ) = 2.157 ( 2 2 5 ) = 2.225 ( 2 2 6 ) = 2.226 ( 2 2 7 ) = 2.227 ( 2 3 5 ) = 2.235 ( 2 3 6 ) = 2.236 ( 2 3 7 ) = 2.237 ( 2 4 5 ) = 2.245 ( 2 4 6 ) = 2.246 ( 2 4 7 ) = 2.247 ( 2 5 5 ) = 2.255 ( 2 5 6 ) = 2.256 ( 2 5 7 ) = 2.257 frm_b: ( 1 =< 3, 3 =< 6, 5 =< 7 ) adr_b before: ( 1 3 5 ) = 2.135 ( 1 3 6 ) = 2.136 ( 1 4 5 ) = 2.145 ( 1 4 6 ) = 2.146 ( 1 5 5 ) = 2.155 ( 1 5 6 ) = 2.156 ( 2 3 5 ) = 2.235 ( 2 3 6 ) = 2.236 ( 2 4 5 ) = 2.245 ( 2 4 6 ) = 2.246 ( 2 5 5 ) = 2.255 ( 2 5 6 ) = 2.256 adr_b after: ( 1 3 5 ) = 7.135 ( 1 3 6 ) = 7.136 ( 1 4 5 ) = 7.145 ( 1 4 6 ) = 7.146 ( 1 5 5 ) = 7.155 ( 1 5 6 ) = 7.156 ( 2 3 5 ) = 7.235 ( 2 3 6 ) = 7.236 ( 2 4 5 ) = 7.245 ( 2 4 6 ) = 7.246 ( 2 5 5 ) = 7.255 ( 2 5 6 ) = 7.256 mat_a after: ( 1 2 5 ) = 2.125 ( 1 2 6 ) = 2.126 ( 1 2 7 ) = 2.127 ( 1 3 5 ) = 7.135 ( 1 3 6 ) = 7.136 ( 1 3 7 ) = 2.137 ( 1 4 5 ) = 7.145 ( 1 4 6 ) = 7.146 ( 1 4 7 ) = 2.147 ( 1 5 5 ) = 7.155 ( 1 5 6 ) = 7.156 ( 1 5 7 ) = 2.157 ( 2 2 5 ) = 2.225 ( 2 2 6 ) = 2.226 ( 2 2 7 ) = 2.227 ( 2 3 5 ) = 7.235 ( 2 3 6 ) = 7.236 ( 2 3 7 ) = 2.237 ( 2 4 5 ) = 7.245 ( 2 4 6 ) = 7.246 ( 2 4 7 ) = 2.247 ( 2 5 5 ) = 7.255 ( 2 5 6 ) = 7.256 ( 2 5 7 ) = 2.257