/**
 * Returned by {@link PairUint32Map#get} when the key pair is absent.
 * @type {number}
 */
export const PAIR_UINT32_MAP_ABSENT: number;
/**
 * Open-addressed Robin Hood map from a pair of uint32 keys to a uint32 value.
 *
 * Layout: a single `Uint32Array` of `3 * capacity` words. Slot `s` is
 * `[key_a + 1, key_b, value]`. The first word doubles as the slot-occupied
 * marker (0 = empty).
 *
 * Hashing: `mix = imul(key_a + 1, MIX_A) ^ imul(key_b + 1, MIX_B)`, indexed via
 * the high bits (right-shift, not low-bit mask — high bits of a multiplicative
 * hash have more entropy, see Skarupke 2018).
 *
 * Collision resolution: Robin Hood linear probing with backward-shift deletion.
 *
 * Symmetric pair use: callers wanting `(a, b)` to be indistinguishable from
 * `(b, a)` should canonicalise (e.g. `min, max`) before calling.
 *
 * Allowed key range per slot field: 0 .. UINT32_MAX − 1 (because key_a is stored
 * as key+1). Allowed value range: full uint32.
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
export class PairUint32Map {
    /**
     *
     * @param {number} [initial_capacity] minimum number of slots; rounded up to power of two.
     */
    constructor(initial_capacity?: number);
    __capacity: number;
    __mask: number;
    __shift: number;
    __grow_threshold: number;
    __size: number;
    __data: Uint32Array;
    /**
     * @returns {number}
     */
    get size(): number;
    /**
     * @returns {number}
     */
    get capacity(): number;
    /**
     *
     * @param {number} key_a_shifted key_a + 1 (already shifted form, as stored)
     * @param {number} key_b
     * @returns {number}
     */
    __hash(key_a_shifted: number, key_b: number): number;
    /**
     *
     * @param {number} key_a
     * @param {number} key_b
     * @returns {number} value or {@link PAIR_UINT32_MAP_ABSENT}.
     */
    get(key_a: number, key_b: number): number;
    /**
     *
     * @param {number} key_a
     * @param {number} key_b
     * @returns {boolean}
     */
    has(key_a: number, key_b: number): boolean;
    /**
     *
     * @param {number} key_a
     * @param {number} key_b
     * @param {number} value
     */
    set(key_a: number, key_b: number, value: number): void;
    /**
     * @private
     * @param {number} ksa key_a + 1
     * @param {number} kb  key_b (raw)
     * @param {number} value
     */
    private __insert_no_grow;
    /**
     *
     * @param {number} key_a
     * @param {number} key_b
     * @returns {boolean}
     */
    delete(key_a: number, key_b: number): boolean;
    clear(): void;
    /**
     * @private
     * @param {number} new_capacity power of two
     */
    private __resize;
}
export namespace PairUint32Map {
    let MAX_KEY: number;
}
//# sourceMappingURL=PairUint32Map.d.ts.map