add()

in packages/core/micro/src/permutation/index.ts [197:228]


    add(range: SegmentRange<PermutationSegment>) {
        let freed: SegmentRange<PermutationSegment> | undefined = range;
        while (freed) {
            const segments = freed.segments;
            for (let i = 0; i < freed.size; i++) {
                const s = segments[i];
                switch (s.kind) {
                    case PermutationKind.Direct:
                        const content = s.content;
                        for (let i = 0; i < content.length; i++) {
                            const n = content[i];
                            if (n !== UNALLOCATED) {
                                this.permutations.push(n);
                            }
                        }
                        break;

                    case PermutationKind.RunLength:
                        const contentRL = s.content;
                        for (let i = 0; i < contentRL.length; i += 2) {
                            const n = contentRL[i + 1];
                            if (n !== UNALLOCATED) {
                                this.permutationsRL.push(contentRL[i]);
                                this.permutationsRL.push(n);
                            }
                        }
                        break;
                }
            }
            freed = freed.next;
        }
    }