/* 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));
}