declare const createCompareBitwiseDistance: (id: Uint8Array) => (a: Uint8Array, b: Uint8Array) => 0 | 1 | -1;

declare const getBitwiseDistance: (a: Uint8Array, b: Uint8Array, byteLength?: number) => number;

declare namespace KademliaTable {
    interface Options<Node> {
        bucketSize?: number;
        compare?: (nodeA: Node, nodeB: Node) => number;
        getId: (node: Node) => Uint8Array;
    }
}
declare class KademliaTable<Node> {
    readonly id: Uint8Array;
    readonly bucketSize: number;
    readonly buckets: Array<Array<Node>>;
    compare?: (nodeA: Node, nodeB: Node) => number;
    getId: (node: Node) => Uint8Array;
    constructor(id: Uint8Array, options: KademliaTable.Options<Node>);
    get length(): number;
    [Symbol.iterator](): IterableIterator<Node>;
    add(node: Node, d?: number): boolean;
    clear(): void;
    listClosestToId(id: Uint8Array, limit?: number): Array<Node>;
    get(d: number): Node | undefined;
    getById(id: Uint8Array, d?: number): Node | undefined;
    getBitwiseDistance(id: Uint8Array): number;
    protected getNodes(d: number, limit: number, depth?: number): Array<Node>;
    has(id: Uint8Array, d?: number): boolean;
    peek(d: number): Node | undefined;
    peekById(id: Uint8Array, d?: number): Node | undefined;
    update(node: Node, d?: number): boolean;
    remove(id: Uint8Array, d?: number): boolean;
}

export { KademliaTable, createCompareBitwiseDistance, getBitwiseDistance };
