/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { RevisionTag } from "../../core";
import { IdAllocator } from "../modular-schema";
import { InputSpanningMark, Mark } from "./format";
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.
     */
    dequeueInput(length: number): InputSpanningMark<T>;
    /**
     * 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 output context.
     * @param includeBlockedCells - If true, blocked marks that target empty cells will note be treated as 0-length.
     */
    dequeueOutput(length: number, includeBlockedCells?: boolean): Mark<T>;
    peek(): Mark<T> | undefined;
}
//# sourceMappingURL=markQueue.d.ts.map