/**
 * Supported fanout values for the shadow-trie ORSet.
 *
 * The geometry benchmark (`PERF_trie-geometry-and-memory-profile`)
 * will validate or replace these values. The codec and cursor
 * remain parameterized across the entire range; only the
 * constructor gate is geometry-specific.
 */
export declare const SUPPORTED_FANOUTS: ReadonlyArray<number>;
/**
 * Default fanout (4-bit nibbles, 16-way branching). Matches
 * the backlog brief.
 */
export declare const DEFAULT_FANOUT = 16;
/**
 * Default nibble width in bits. `log2(DEFAULT_FANOUT)`.
 */
export declare const DEFAULT_NIBBLE_BITS = 4;
/**
 * Default leaf capacity (split threshold).
 *
 * Picked at 64 as a starting point: small enough to keep binary
 * search cheap, large enough to amortize split cascades. The perf
 * cycle will replace this if needed.
 */
export declare const DEFAULT_LEAF_CAPACITY = 64;
/**
 * Default leaf floor (merge threshold).
 *
 * Picked as `DEFAULT_LEAF_CAPACITY / 4 = 16`. A 1:4 floor:capacity
 * ratio is a standard rebalance choice that keeps merge/split
 * oscillation bounded.
 */
export declare const DEFAULT_LEAF_FLOOR = 16;
/**
 * Parameter object for `TrieGeometry` construction.
 *
 * Named so callers cannot swap positional arguments and so the four
 * values arrive as a semantic unit. All fields are required; there
 * are no sensible defaults for a geometry that mixes capacity and
 * fanout.
 */
export interface TrieGeometryInit {
    readonly fanout: number;
    readonly nibbleBits: number;
    readonly leafCapacity: number;
    readonly leafFloor: number;
}
/**
 * Runtime-backed trie geometry configuration.
 *
 * A `TrieGeometry` instance pins four parameters:
 *
 * - `fanout`: branching factor for branch nodes. Must be one of the
 *   values in `SUPPORTED_FANOUTS`.
 * - `nibbleBits`: bits extracted per nibble from a `RouteKey`.
 *   Must equal `log2(fanout)`.
 * - `leafCapacity`: positive integer. A leaf with more than this
 *   many entries requires a split.
 * - `leafFloor`: non-negative integer, strictly less than
 *   `leafCapacity`. A leaf with fewer than this many entries
 *   requires a merge.
 *
 * All fields are validated in the constructor and the instance is
 * frozen on exit. Predicates `splitRequired` / `mergeRequired`
 * dispatch on entry counts.
 *
 * Instances carry no identity beyond their values; two geometries
 * with identical parameters are interchangeable.
 */
export default class TrieGeometry {
    readonly fanout: number;
    readonly nibbleBits: number;
    readonly leafCapacity: number;
    readonly leafFloor: number;
    constructor(init: TrieGeometryInit);
    /**
     * Returns true when a leaf with `entryCount` entries has exceeded
     * capacity and must be split. The comparison is strict: a leaf
     * with exactly `leafCapacity` entries is still allowed; only the
     * step past triggers a split.
     */
    splitRequired(entryCount: number): boolean;
    /**
     * Returns true when a leaf with `entryCount` entries has dropped
     * below the merge floor. The comparison is strict: a leaf with
     * exactly `leafFloor` entries is still allowed; only the step
     * past triggers a merge.
     */
    mergeRequired(entryCount: number): boolean;
    /**
     * Default geometry: 16-way fanout, 4-bit nibbles, leaf
     * capacity 64, leaf floor 16. Revisit via the perf cycle.
     */
    static default16way(): TrieGeometry;
}
