import * as TSU from "@panyam/tsutils";
import { TimedEntity } from "./entity";
import { Atom, LeafAtom } from "./core";
export declare class FlatAtom extends TimedEntity {
    atom: LeafAtom;
    readonly TYPE = "FlatAtom";
    depth: number;
    duration: TSU.Num.Fraction;
    offset: TSU.Num.Fraction;
    private isContinuation;
    constructor(atom: LeafAtom, config?: any);
    get endOffset(): TSU.Num.Fraction;
    debugValue(): any;
}
export declare class AtomIterator {
    private atomQueue;
    private currOffset;
    private peeked;
    constructor(...atoms: Atom[]);
    push(...atoms: Atom[]): this;
    next(): TSU.Nullable<FlatAtom>;
    peek(): TSU.Nullable<FlatAtom>;
    get hasNext(): boolean;
    static getMin(iterators: AtomIterator[]): [number, FlatAtom];
}
export declare class WindowIterator {
    private atomQueue;
    private currOffset;
    private peeked;
    constructor(...atoms: Atom[]);
    push(...atoms: Atom[]): this;
    next(): TSU.Nullable<Atom>;
    peek(): TSU.Nullable<Atom>;
    get hasMore(): boolean;
    get(duration: TSU.Num.Fraction): [Atom[], boolean];
}
export declare class DurationIterator {
    private atomIterator;
    private spillOver;
    constructor(atomIterator: AtomIterator);
    get hasMore(): boolean;
    get(duration: TSU.Num.Fraction): [FlatAtom[], boolean];
}
