/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { assert } from "@fluidframework/common-utils";
import { brand, getFirstFromRangeMap, getOrAddInMap, setInRangeMap, } from "../../util";
export function addCrossFieldQuery(set, revision, id, count) {
    setInCrossFieldMap(set, revision, id, count, true);
}
export function setInCrossFieldMap(map, revision, id, count, value) {
    setInRangeMap(getOrAddInMap(map, revision, []), id, count, value);
}
export function getFirstFromCrossFieldMap(map, revision, id, count) {
    return getFirstFromRangeMap(map.get(revision) ?? [], id, count);
}
/**
 * @alpha
 */
export var CrossFieldTarget;
(function (CrossFieldTarget) {
    CrossFieldTarget[CrossFieldTarget["Source"] = 0] = "Source";
    CrossFieldTarget[CrossFieldTarget["Destination"] = 1] = "Destination";
})(CrossFieldTarget || (CrossFieldTarget = {}));
/**
 * @alpha
 */
export function idAllocatorFromMaxId(maxId = undefined) {
    return idAllocatorFromState({ maxId: maxId ?? brand(-1) });
}
export function idAllocatorFromState(state) {
    return (c) => {
        const count = c ?? 1;
        assert(count > 0, 0x5cf /* Must allocate at least one ID */);
        const id = brand(state.maxId + 1);
        state.maxId = brand(state.maxId + count);
        return id;
    };
}
//# sourceMappingURL=crossFieldQueries.js.map