import { Identifier } from "./identifier";
import { IdentifierInterval } from "./identifierinterval";
import { LogootSBlock } from "./logootsblock";
import { LogootSDel } from "./operations/delete/logootsdel";
import { TextDelete } from "./operations/delete/textdelete";
import { LogootSAdd } from "./operations/insert/logootsadd";
import { TextInsert } from "./operations/insert/textinsert";
import { ResponseIntNode } from "./responseintnode";
import { RopesNodes } from "./ropesnodes";
export declare class LogootSRopes {
    static empty(): LogootSRopes;
    static fromPlain(o: unknown): LogootSRopes | null;
    readonly replicaNumber: number;
    clock: number;
    root: RopesNodes | null;
    readonly mapBaseToBlock: {
        [key: string]: LogootSBlock;
    };
    str: string;
    constructor(replica?: number, clock?: number, root?: RopesNodes | null, str?: string);
    readonly height: number;
    getBlock(idInterval: IdentifierInterval): LogootSBlock;
    /**
     * Add a interval of identifiers and its corresponding string to the model
     *
     * @param {string} str The inserted string
     * @param {IdentifierInterval} idi The corresponding interval of identifiers
     * @param {RopesNodes} from The starting point of the search
     * @param {number} startOffset ???
     */
    addBlockFrom(str: string, idi: IdentifierInterval, from: RopesNodes, startOffset: number): TextInsert[];
    addBlockFromRec(str: string, idi: IdentifierInterval, from: RopesNodes, startOffset: number): TextInsert[];
    applyTextInsert(textInsert: TextInsert): void;
    applyTextDelete(textDelete: TextDelete): void;
    addBlock(str: string, id: Identifier): TextInsert[];
    mkNode(id1: Identifier | null, id2: Identifier | null, length: number): RopesNodes;
    insertLocal(pos: number, l: string): LogootSAdd;
    getXest(aChildOf: (a: RopesNodes) => RopesNodes | null, aPath: RopesNodes[]): RopesNodes;
    searchPos(id: Identifier, path: RopesNodes[]): number;
    searchNode(pos: number): ResponseIntNode | null;
    ascendentUpdate(path: RopesNodes[], length: number): void;
    delBlock(idInterval: IdentifierInterval, author: number): TextDelete[];
    delLocal(begin: number, end: number): LogootSDel;
    delNode(path: RopesNodes[]): void;
    getMinPath(path: RopesNodes[]): RopesNodes;
    balance(path: RopesNodes[]): void;
    rotateLeft(node: RopesNodes, father: RopesNodes | null): RopesNodes;
    rotateRight(node: RopesNodes, father: RopesNodes | null): RopesNodes;
    rotateRL(node: RopesNodes, father: RopesNodes | null): RopesNodes;
    rotateLR(node: RopesNodes, father: RopesNodes | null): RopesNodes;
    getNext(path: RopesNodes[]): boolean;
    /**
     * @return tree digest
     */
    digest(): number;
    toList(): IdentifierInterval[];
}
