Dir: TYPE = {ll, rr, lr, rl};
Addr: TYPE = LIST OF INT;
Xform: TYPE = REF XformSeq;
Xforms: TYPE = LIST OF XformRec; -- LIST OF [size, toLev]
XformSeq: TYPE = RECORD[seq: SEQUENCE size: NAT OF XformRec];
XformRec: TYPE = RECORD[size, toLev, fmLev, toSubSize, fmSubSize, temp: INT ← -1];
GenXform: PROC[xforms: Xforms] RETURNS[ xform: Xform ← NIL];
GenXforms: PROC[xform: Xform] RETURNS[ xforms: Xforms ← NIL];
GetXform: PROC[from: REF] RETURNS[ xform: Xform ← NIL];
GetXforms: PROC[from: REF] RETURNS[ xforms: Xforms ← NIL];
SetXform: PROC[on: REF, xform: Xform];
SetXforms: PROC[on: REF, xforms: Xforms];
XformSize: PROC[from: REF] RETURNS[domain: INT𡤀];
XformIndex: PROC[xform: Xform, dir: Dir, index: INT] RETURNS[i: INT, a: Addr];
XformAddr: PROC[xform: Xform, dir: Dir, addr: Addr] RETURNS[i: INT, a: Addr];
Coord: TYPE = RECORD[degrees, degree, index: INT];
FlatTreeIndex: PROC[size, index: INT] RETURNS[coord: Coord];
LIST[ [6, 0], [4, 1], [8, 2]] => logical-original (Word/Byte/Bit) access
LIST[ [6, 2], [4, 0], [8, 1]] => sequencial (Byte/Bit/Word) access
LIST[ [6, 2], [4, 1], [8, 0]] => Interleaved (Bit/Byte/Word) access
END.