/* Test vector indexing based on overloading [] and [=] */
class vector {
var arr;
public proc create(n) {
arr = new Array(n);
}
public operator [] (idx) {
var res;
if (idx.isarray()) {
res = new Array(idx.length());
forall (idx[i]) {
res[i] = arr[idx[i]];
}
return res;
}
else {
return arr[idx];
}
}
public operator [=] (idx,val) {
if (idx.isarray()) {
if (val.isarray()) {
if (val.length() != idx.length()) {
throw oadl::RangeCheck;
}
forall (idx[i]) {
arr[idx[i]] = val[i];
}
}
else {
forall (idx[i]) {
arr[idx[i]] = val;
}
}
}
else {
arr[idx] = val;
}
}
}
proc main()
{
var a, b;
a = new vector(10);
a[{1,2,3,4,5}] = 4;
a[{4,5}] = {4,5};
b = a[{2,3,4,5}];
say("length(b) = ", b.length(), "\n");
say("b[0] = ", b[0], "\n");
say("b[1] = ", b[1], "\n");
say("b[2] = ", b[2], "\n");
say("b[3] = ", b[3], "\n");
}