mute-structs
Version:
NodeJS module providing an implementation of the LogootSplit CRDT algorithm
58 lines (57 loc) • 2.78 kB
TypeScript
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[];
}