/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { RevisionTag } from "../../core";
import { IdAllocator } from "../../util";
import { Mark } from "./types";
import { MoveEffectTable } from "./moveEffectTable";
export declare class MarkQueue<T> {
    private readonly list;
    readonly revision: RevisionTag | undefined;
    private readonly moveEffects;
    private readonly consumeEffects;
    private readonly genId;
    private readonly composeChanges?;
    private readonly stack;
    private index;
    constructor(list: readonly Mark<T>[], revision: RevisionTag | undefined, moveEffects: MoveEffectTable<T>, consumeEffects: boolean, genId: IdAllocator, composeChanges?: ((a: T | undefined, b: T | undefined) => T | undefined) | undefined);
    isEmpty(): boolean;
    dequeue(): Mark<T>;
    tryDequeue(): Mark<T> | undefined;
    /**
     * Dequeues the first `length` sized portion of the next mark.
     * The caller must verify that the next mark (as returned by peek) is longer than this length.
     * @param length - The length to dequeue, measured in the input context.
     */
    dequeueUpTo(length: number): Mark<T>;
    peek(): Mark<T> | undefined;
}
//# sourceMappingURL=markQueue.d.ts.map