indexOf()

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;
    }