in packages/core/micro/src/permutation/index.ts [478:515]
indexOf(permutation: number) {
const start = this.permutationTree.zoom(0).leaf;
let pos = 0;
let final = -1;
forEachInSegmentRange(start, (len, entry) => {
switch (entry.kind) {
case PermutationKind.Empty:
pos += len;
return true;
case PermutationKind.Direct:
const n = entry.content.indexOf(permutation);
if (n > -1) {
pos += n
final = pos;
return false;
}
pos += len;
return true;
case PermutationKind.RunLength: {
const content = entry.content;
for (let i = 0; i < content.length; i += 2) {
const count = content[i];
const p = content[i+1];
if (p !== UNALLOCATED && permutation >= p && permutation < (p + count)) {
pos += permutation - p;
final = pos;
return false;
}
pos += count;
}
return true;
}
}
});
return final;
}