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