/**
 * Append-only buffer for streaming voxelization results.
 * Stores (linear blockIdx, voxel mask) pairs for non-empty 4x4x4 blocks.
 *
 * Block keys are linear block indices `bx + by*nbx + bz*nbx*nby` in the
 * producer's grid coordinate system. Producers and consumers must agree
 * on the grid dimensions; the buffer itself is dimension-agnostic.
 *
 * Backed by typed arrays that grow geometrically. Keys use Float64Array so
 * the per-buffer capacity exceeds V8's regular-array backing-store limit
 * (large grids exceed Smi range and would throw `RangeError: Invalid array
 * length` with a regular array).
 */
declare class BlockMaskBuffer {
    /** Linear block indices for solid blocks (mask is implicitly all 1s) */
    private _solidIdx;
    private _solidCount;
    private _solidCap;
    /** Linear block indices for mixed blocks */
    private _mixedIdx;
    private _mixedCount;
    private _mixedCap;
    /** Interleaved voxel masks for mixed blocks: [lo0, hi0, lo1, hi1, ...] */
    private _mixedMasks;
    /**
     * Add a non-empty block to the buffer.
     * Automatically classifies as solid or mixed based on mask values.
     *
     * @param blockIdx - Linear block index (`bx + by*nbx + bz*nbx*nby`)
     * @param lo - Lower 32 bits of voxel mask
     * @param hi - Upper 32 bits of voxel mask
     */
    addBlock(blockIdx: number, lo: number, hi: number): void;
    /**
     * Get all mixed blocks as views into the underlying buffers.
     * Index `i` of `blockIdx` corresponds to mask pair `(masks[i*2], masks[i*2+1])`.
     *
     * @returns Object with linear block indices and interleaved masks
     */
    getMixedBlocks(): {
        blockIdx: Float64Array;
        masks: Uint32Array;
    };
    /**
     * Get all solid blocks as a view into the underlying buffer.
     *
     * @returns Array of linear block indices
     */
    getSolidBlocks(): Float64Array;
    /**
     * Get total number of blocks stored.
     *
     * @returns Count of mixed + solid blocks
     */
    get count(): number;
    /**
     * Get number of mixed blocks.
     *
     * @returns Count of mixed blocks
     */
    get mixedCount(): number;
    /**
     * Get number of solid blocks.
     *
     * @returns Count of solid blocks
     */
    get solidCount(): number;
    /**
     * Clear all buffered blocks. Releases the underlying buffers so a cleared
     * instance does not retain peak memory; the next `addBlock` re-allocates
     * to `INITIAL_CAPACITY`.
     */
    clear(): void;
}
export { BlockMaskBuffer };
