/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { ChangesetLocalId, RevisionTag } from "../core";
/**
 * A unique ID allocator that returns the output ID for the same input ID.
 *
 * @public
 */
export interface MemoizedIdRangeAllocator {
    /**
     * A unique ID allocator that returns the output ID for the same input ID.
     *
     * "The same" here includes cases where a prior call allocated a range of IDs that partially or fully overlap with the
     * current call.
     * @param revision - The revision associated with the range of IDs to allocate.
     * @param startId - The first ID to allocate.
     * @param count - The number of IDs to allocate. Interpreted as 1 if undefined.
     */
    allocate(revision: RevisionTag | undefined, startId: ChangesetLocalId, count?: number): IdRange[];
    /**
     * Allocates a new range of IDs.
     *
     * @param count - The number of IDs to allocate. Interpreted as 1 if undefined.
     */
    mint(count?: number): ChangesetLocalId;
}
/**
 * @public
 */
export interface IdRange {
    readonly first: ChangesetLocalId;
    readonly count: number;
}
/**
 * @public
 */
export declare const MemoizedIdRangeAllocator: {
    fromNextId(nextId?: number): MemoizedIdRangeAllocator;
};
//# sourceMappingURL=memoizedIdRangeAllocator.d.ts.map