import { FactorsType, ScalarType, PairByKeyType, CandidateType, RowType, OptionsType, PairType, SuggestRowType } from "./types";
export declare class Row extends Map<ScalarType, number> implements RowType {
    consumed: PairByKeyType;
    constructor(row: CandidateType);
    getPairKey(...newPair: number[]): ScalarType;
    copy(row: Row): void;
}
export declare class Controller<T extends FactorsType> {
    factors: FactorsType;
    options: OptionsType<T>;
    factorLength: number;
    factorIsArray: Boolean;
    private serials;
    private parents;
    private indices;
    incomplete: PairByKeyType;
    private numAllChunks;
    private rejected;
    row: Row;
    constructor(factors: FactorsType, options?: OptionsType<T>);
    private serialize;
    private setIncomplete;
    private setPair;
    consume(pair: PairType): void;
    consumeRow(row: Row): void;
    getCandidate(pair: PairType): CandidateType;
    storable(candidate: CandidateType): number | null;
    isFilled(row: Row): boolean;
    private toMap;
    private toProxy;
    private toObject;
    private reset;
    private discard;
    private restore;
    private close;
    get pairwiseCount(): number;
    get isComplete(): boolean;
    get progress(): number;
    makeAsync<T extends FactorsType>(): Generator<SuggestRowType<T>, void, unknown>;
}
