/* Test various multidimensional array features */ using namespace oadl; proc arrsay(a) { var shp, rnk, idx; var ia; var i, j, sz; shp = a.shape(); rnk = a.rank(); idx = new PackInt(rnk); sz = 1; forall(shp[ii]) { sz *= shp[ii]; } forall(idx[ii]) { idx[ii] = 0; } for (i = 0; i < sz; i++) { ia = a; for (j = 0; j < rnk; j++) { ia = ia[idx[j]]; } if (idx[rnk-1] > 0) " "; say(ia); // Increment the array for (j = rnk-1; j >= 0; j--) { idx[j]++; if (idx[j] < shp[j]) break; if (i < (sz-1)) "\n"; idx[j] = 0; } } "\n"; } proc main() { var a; a = [2,3,5].iterate(); "a = iterate(2,3,5):\n"; arrsay(a); "\na[0:1,1:2,2:3]:\n"; arrsay(a.subr(0,1,1,2,2,3)); "\nreshape(a,3,3,4):\n"; arrsay(a.reshape(3,3,4)); }