@fluidframework/merge-tree 0.56.9 → 0.56.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -3
- package/dist/client.js.map +1 -1
- package/dist/collections.d.ts +2 -1
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js.map +1 -1
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +11 -1
- package/dist/localReference.js.map +1 -1
- package/lib/client.d.ts +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +13 -3
- package/lib/client.js.map +1 -1
- package/lib/collections.d.ts +2 -1
- package/lib/collections.d.ts.map +1 -1
- package/lib/collections.js.map +1 -1
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +11 -1
- package/lib/localReference.js.map +1 -1
- package/package.json +8 -8
- package/src/client.ts +13 -3
- package/src/collections.ts +2 -1
- package/src/localReference.ts +12 -2
package/dist/collections.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions, eqeqeq */\n/* eslint-disable no-bitwise */\n\n/* Remove once strictNullCheck is enabled */\n\nimport {\n ConflictAction,\n IIntegerRange,\n KeyComparer,\n PropertyAction,\n SortedDictionary,\n} from \"./base\";\n\nexport class Stack<T> {\n public items: T[] = [];\n public push(val: T) {\n this.items.push(val);\n }\n\n public empty() {\n return this.items.length === 0;\n }\n\n public top(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n public pop(): T | undefined {\n return this.items.pop();\n }\n}\n\nfunction ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {\n if (entry === undefined) {\n return undefined;\n }\n else if (entry.isHead) {\n return undefined;\n }\n else {\n entry.next.prev = entry.prev;\n entry.prev.next = entry.next;\n }\n return (entry);\n}\n\nfunction ListMakeEntry<U>(data: U): List<U> {\n return new List<U>(false, data);\n}\n\nexport function ListMakeHead<U>(): List<U> {\n return new List<U>(true, undefined);\n}\n\nexport class List<T> {\n public next: List<T>;\n public prev: List<T>;\n\n // eslint-disable-next-line @typescript-eslint/prefer-readonly\n constructor(public isHead: boolean, private data: T | undefined) {\n this.prev = this;\n this.next = this;\n }\n\n public clear(): void {\n if (this.isHead) {\n this.prev = this;\n this.next = this;\n }\n }\n\n private add(data: T): List<T> {\n const entry = ListMakeEntry(data);\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return (entry);\n }\n\n public dequeue(): T | undefined {\n if (!this.empty()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const removedEntry = ListRemoveEntry(this.next)!;\n return removedEntry.data;\n }\n }\n\n public enqueue(data: T): List<T> {\n return this.add(data);\n }\n\n public walk(fn: (data: T, l: List<T>) => void): void {\n for (let entry = this.next; !(entry.isHead); entry = entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(entry.data!, entry);\n }\n }\n\n public some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[] {\n const rtn: T[] = [];\n const start = rev ? this.prev : this.next;\n for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const data = entry.data!;\n if (fn(data, entry)) {\n if (rev) {\n // preserve list order when in reverse\n rtn.unshift(data);\n } else {\n rtn.push(data);\n }\n }\n }\n return rtn;\n }\n\n public count(): number {\n let entry: List<T>;\n let i: number;\n\n entry = this.next;\n for (i = 0; !(entry.isHead); i++) {\n entry = entry.next;\n }\n return (i);\n }\n\n public first(): T | undefined {\n if (!this.empty()) {\n return (this.next.data);\n }\n }\n\n public last(): T | undefined {\n if (!this.empty()) {\n return (this.prev.data);\n }\n }\n\n public empty(): boolean {\n return (this.next === this);\n }\n\n public push(data: T): void {\n const entry = ListMakeEntry(data);\n entry.data = data;\n entry.isHead = false;\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n }\n}\n\nexport interface Comparer<T> {\n compare(a: T, b: T): number;\n min: T;\n}\n\nexport class Heap<T> {\n private L: T[];\n public count() {\n return this.L.length - 1;\n }\n constructor(a: T[], public comp: Comparer<T>) {\n this.L = [comp.min];\n for (let i = 0, len = a.length; i < len; i++) {\n this.add(a[i]);\n }\n }\n public peek() {\n return this.L[1];\n }\n\n public get() {\n const x = this.L[1];\n this.L[1] = this.L[this.count()];\n this.L.pop();\n this.fixdown(1);\n return x;\n }\n\n public add(x: T) {\n this.L.push(x);\n this.fixup(this.count());\n }\n\n private fixup(k: number) {\n let _k = k;\n while (_k > 1 && (this.comp.compare(this.L[_k >> 1], this.L[_k]) > 0)) {\n const tmp = this.L[_k >> 1];\n this.L[_k >> 1] = this.L[_k];\n this.L[_k] = tmp;\n _k = _k >> 1;\n }\n }\n\n private fixdown(k: number) {\n let _k = k;\n while ((_k << 1) <= (this.count())) {\n let j = _k << 1;\n if ((j < this.count()) && (this.comp.compare(this.L[j], this.L[j + 1]) > 0)) {\n j++;\n }\n if (this.comp.compare(this.L[_k], this.L[j]) <= 0) {\n break;\n }\n const tmp = this.L[_k];\n this.L[_k] = this.L[j];\n this.L[j] = tmp;\n _k = j;\n }\n }\n}\n\nexport const enum RBColor {\n RED,\n BLACK,\n}\n\nexport interface RBNode<TKey, TData> {\n key: TKey;\n data: TData;\n left: RBNode<TKey, TData> | undefined;\n right: RBNode<TKey, TData> | undefined;\n color: RBColor;\n size: number;\n}\n\nexport interface IRBAugmentation<TKey, TData> {\n update(node: RBNode<TKey, TData>): void;\n}\n\nexport interface IRBMatcher<TKey, TData> {\n continueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n matchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\nexport interface RBNodeActions<TKey, TData> {\n infix?(node: RBNode<TKey, TData>): boolean;\n pre?(node: RBNode<TKey, TData>): boolean;\n post?(node: RBNode<TKey, TData>): boolean;\n showStructure?: boolean;\n}\n\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n private root: RBNode<TKey, TData> | undefined;\n\n constructor(\n private readonly compareKeys: KeyComparer<TKey>,\n private readonly aug?: IRBAugmentation<TKey, TData>,\n ) { }\n\n private makeNode(key: TKey, data: TData, color: RBColor, size: number) {\n return <RBNode<TKey, TData>>{ key, data, color, size };\n }\n\n private isRed(node: RBNode<TKey, TData> | undefined) {\n return !!node && (node.color == RBColor.RED);\n }\n\n private nodeSize(node: RBNode<TKey, TData> | undefined) {\n return node ? node.size : 0;\n }\n public size() {\n return this.nodeSize(this.root);\n }\n public isEmpty() {\n return !this.root;\n }\n public get(key: TKey) {\n if (key !== undefined) {\n return this.nodeGet(this.root, key);\n }\n }\n private nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {\n let _node = node;\n while (_node) {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node = _node.left;\n }\n else if (cmp > 0) {\n _node = _node.right;\n }\n else {\n return _node;\n }\n }\n }\n private contains(key: TKey) {\n return this.get(key);\n }\n\n public gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {\n const results = [] as RBNode<TKey, TData>[];\n if (key !== undefined) {\n this.nodeGather(this.root, results, key, matcher);\n }\n return results;\n }\n\n private nodeGather(\n node: RBNode<TKey, TData> | undefined,\n results: RBNode<TKey, TData>[],\n key: TKey,\n matcher: IRBMatcher<TKey, TData>) {\n if (node) {\n if (matcher.continueSubtree(node.left, key)) {\n this.nodeGather(node.left, results, key, matcher);\n }\n if (matcher.matchNode(node, key)) {\n results.push(node);\n }\n if (matcher.continueSubtree(node.right, key)) {\n this.nodeGather(node.right, results, key, matcher);\n }\n }\n }\n\n public walkExactMatchesForward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesForward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesForward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesForward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesForward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public walkExactMatchesBackward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesBackward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesBackward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (cmp: number) => boolean,\n continueRightFn: (cmp: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesBackward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesBackward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {\n if (key !== undefined) {\n if (data === undefined) {\n this.remove(key);\n }\n else {\n this.root = this.nodePut(this.root, key, data, conflict);\n this.root.color = RBColor.BLACK;\n }\n }\n }\n\n private nodePut(\n node: RBNode<TKey, TData> | undefined,\n key: TKey, data: TData,\n conflict?: ConflictAction<TKey, TData>,\n ) {\n let _node = node;\n if (!_node) {\n return this.makeNode(key, data, RBColor.RED, 1);\n }\n else {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node.left = this.nodePut(_node.left, key, data, conflict);\n }\n else if (cmp > 0) {\n _node.right = this.nodePut(_node.right, key, data, conflict);\n }\n else {\n if (conflict) {\n const kd = conflict(key, _node.key, data, _node.data);\n if (kd.key) {\n _node.key = kd.key;\n }\n if (kd.data) {\n _node.data = kd.data;\n } else {\n _node.data = data;\n }\n }\n else {\n _node.data = data;\n }\n }\n if (this.isRed(_node.right) && (!this.isRed(_node.left))) {\n _node = this.rotateLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n }\n if (this.isRed(_node.left) && this.isRed(_node.right)) {\n this.flipColors(_node);\n }\n _node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n if (this.aug) {\n this.updateLocal(_node);\n }\n return _node;\n }\n }\n\n private updateLocal(node: RBNode<TKey, TData>) {\n if (this.aug) {\n if (this.isRed(node.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.left!);\n }\n if (this.isRed(node.right)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.right!);\n }\n this.aug.update(node);\n }\n }\n\n private nodeRemoveMin(node: RBNode<TKey, TData>) {\n let _node = node;\n if (_node.left) {\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left.left))) {\n _node = this.moveRedLeft(_node);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemoveMin(_node.left!);\n return this.balance(_node);\n }\n }\n\n public remove(key: TKey) {\n if (key !== undefined) {\n if (!this.contains(key)) {\n return;\n }\n\n this.removeExisting(key);\n }\n // TODO: error on undefined key\n }\n\n public removeExisting(key: TKey) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(this.root!.left)) && (!this.isRed(this.root!.right))) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root!.color = RBColor.RED;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root = this.nodeRemove(this.root!, key);\n }\n\n private nodeRemove(node: RBNode<TKey, TData>, key: TKey) {\n let _node = node;\n if (this.compareKeys(key, _node.key) < 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left!.left))) {\n _node = this.moveRedLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemove(_node.left!, key);\n }\n else {\n if (this.isRed(_node.left)) {\n _node = this.rotateRight(_node);\n }\n if ((this.compareKeys(key, _node.key) == 0) && (!_node.right)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.right)) && (!this.isRed(_node.right!.left))) {\n _node = this.moveRedRight(_node);\n }\n if (this.compareKeys(key, _node.key) == 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const subtreeMin = this.nodeMin(_node.right!);\n _node.key = subtreeMin.key;\n _node.data = subtreeMin.data;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemoveMin(_node.right!);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemove(_node.right!, key);\n }\n }\n return this.balance(_node);\n }\n private height() {\n return this.nodeHeight(this.root);\n }\n private nodeHeight(node: RBNode<TKey, TData> | undefined): number {\n if (node === undefined) {\n return -1;\n }\n else {\n return 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n }\n\n public floor(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeFloor(this.root, key);\n }\n }\n\n private nodeFloor(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp < 0) {\n return this.nodeFloor(node.left, key);\n }\n else {\n const rightFloor = this.nodeFloor(node.right, key);\n if (rightFloor) {\n return rightFloor;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public ceil(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeCeil(this.root, key);\n }\n }\n\n private nodeCeil(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp > 0) {\n return this.nodeCeil(node.right, key);\n }\n else {\n const leftCeil = this.nodeCeil(node.left, key);\n if (leftCeil) {\n return leftCeil;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public min() {\n if (this.root) {\n return this.nodeMin(this.root);\n }\n }\n\n private nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.left) {\n return node;\n }\n else {\n return this.nodeMin(node.left);\n }\n }\n\n public max() {\n if (this.root) {\n return this.nodeMax(this.root);\n }\n }\n\n private nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.right) {\n return node;\n }\n else {\n return this.nodeMax(node.right);\n }\n }\n\n private rotateRight(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const leftChild = node.left!;\n node.left = leftChild.right;\n leftChild.right = node;\n leftChild.color = leftChild.right.color;\n leftChild.right.color = RBColor.RED;\n leftChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(leftChild);\n }\n return leftChild;\n }\n\n private rotateLeft(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const rightChild = node.right!;\n node.right = rightChild.left;\n rightChild.left = node;\n rightChild.color = rightChild.left.color;\n rightChild.left.color = RBColor.RED;\n rightChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(rightChild);\n }\n return rightChild;\n }\n\n private oppositeColor(c: RBColor) {\n return (c == RBColor.BLACK) ? RBColor.RED : RBColor.BLACK;\n }\n\n private flipColors(node: RBNode<TKey, TData>) {\n node.color = this.oppositeColor(node.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.left!.color = this.oppositeColor(node.left!.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.right!.color = this.oppositeColor(node.right!.color);\n }\n\n private moveRedLeft(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.right!.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.rotateRight(_node.right!);\n _node = this.rotateLeft(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private moveRedRight(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private balance(input: RBNode<TKey, TData>) {\n let node: RBNode<TKey, TData> | undefined = input;\n if (this.isRed(node.right)) {\n node = this.rotateLeft(node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(node.left) && this.isRed(node.left!.left)) {\n node = this.rotateRight(node);\n }\n if (this.isRed(node.left) && (this.isRed(node.right))) {\n this.flipColors(node);\n }\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.aug.update(node);\n }\n return node;\n }\n\n public mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey) {\n this.nodeMap(this.root, action, start, end);\n }\n\n public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n // TODO: optimize to avoid comparisons\n this.nodeMap(this.root, action, accum);\n }\n\n public keys() {\n const keyList = <TKey[]>[];\n const actions = <RBNodeActions<TKey, TData>>{\n showStructure: true,\n infix: (node) => {\n keyList.push(node.key);\n return true;\n },\n };\n this.walk(actions);\n return keyList;\n }\n\n /**\n * Depth-first traversal with custom action; if action returns\n * false, traversal is halted.\n * @param action - action to apply to each node\n */\n public walk(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalk(this.root, actions);\n }\n\n public walkBackward(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalkBackward(this.root, actions);\n }\n\n private nodeWalk(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.left) {\n go = this.nodeWalk(node.left, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalk(node.right, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeWalkBackward(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.right) {\n go = this.nodeWalkBackward(node.right, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalkBackward(node.left, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeMap<TAccum>(\n node: RBNode<TKey, TData> | undefined,\n action: PropertyAction<TKey, TData>,\n accum?: TAccum,\n start?: TKey,\n end?: TKey,\n ): boolean {\n let _start = start;\n let _end = end;\n if (!node) {\n return true;\n }\n if (_start === undefined) {\n _start = this.nodeMin(node).key;\n }\n if (_end === undefined) {\n _end = this.nodeMax(node).key;\n }\n const cmpStart = this.compareKeys(_start, node.key);\n const cmpEnd = this.compareKeys(_end, node.key);\n let go = true;\n if (cmpStart < 0) {\n go = this.nodeMap(node.left, action, accum, _start, _end);\n }\n if (go && (cmpStart <= 0) && (cmpEnd >= 0)) {\n // REVIEW: test for black node here\n go = action(node, accum);\n }\n if (go && (cmpEnd > 0)) {\n go = this.nodeMap(node.right, action, accum, _start, _end);\n }\n return go;\n }\n public diag() {\n console.log(`Height is ${this.height()}`);\n }\n}\n\nexport interface AugmentedIntervalNode {\n minmax: IInterval;\n}\n\nexport const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;\n\nexport interface IInterval {\n clone(): IInterval;\n compare(b: IInterval): number;\n compareStart(b: IInterval): number;\n compareEnd(b: IInterval): number;\n modify(label: string, start: number, end: number): IInterval | undefined;\n overlaps(b: IInterval): boolean;\n union(b: IInterval): IInterval;\n}\n\nconst intervalComparer = (a: IInterval, b: IInterval) => a.compare(b);\nexport type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;\nexport type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;\n\nexport class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>,\n IRBMatcher<T, AugmentedIntervalNode> {\n public intervals = new RedBlackTree<T, AugmentedIntervalNode>(intervalComparer, this);\n\n public remove(x: T) {\n this.intervals.remove(x);\n }\n\n public removeExisting(x: T) {\n this.intervals.removeExisting(x);\n }\n\n public put(x: T, conflict?: IntervalConflictResolver<T>) {\n let rbConflict: ConflictAction<T, AugmentedIntervalNode> | undefined;\n if (conflict) {\n rbConflict = (key: T, currentKey: T) => {\n const ival = conflict(key, currentKey);\n return {\n key: ival,\n };\n };\n }\n this.intervals.put(x, { minmax: x.clone() }, rbConflict);\n }\n\n public map(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapUntil(fn: (X: T) => boolean) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n return fn(node.key);\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapBackward(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walkBackward(actions);\n }\n\n // TODO: toString()\n public match(x: T) {\n return this.intervals.gather(x, this);\n }\n\n public matchNode(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.key.overlaps(key);\n }\n\n public continueSubtree(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.data.minmax.overlaps(key);\n }\n\n public update(node: IntervalNode<T>) {\n if (node.left && node.right) {\n node.data.minmax = node.key.union(\n node.left.data.minmax.union(node.right.data.minmax));\n } else {\n if (node.left) {\n node.data.minmax = node.key.union(node.left.data.minmax);\n } else if (node.right) {\n node.data.minmax = node.key.union(node.right.data.minmax);\n } else {\n node.data.minmax = node.key.clone();\n }\n }\n }\n}\n\nexport interface TSTResult<T> {\n key: string;\n val: T;\n}\n\nexport interface TSTNode<T> {\n c: string;\n left?: TSTNode<T>;\n mid?: TSTNode<T>;\n right?: TSTNode<T>;\n val?: T;\n}\n\ninterface TSTPrefix {\n text: string;\n}\n\nexport interface ProxString<T> {\n text: string;\n invDistance: number;\n val: T;\n}\n\nexport class TST<T> {\n private n = 0;\n private root: TSTNode<T> | undefined;\n\n public size() {\n return this.n;\n }\n\n private contains(key: string) {\n return this.get(key);\n }\n\n public get(key: string) {\n const x = this.nodeGet(this.root, key, 0);\n if (x === undefined) {\n return undefined;\n }\n return x.val;\n }\n\n private nodeGet(x: TSTNode<T> | undefined, key: string, d: number): TSTNode<T> | undefined {\n if (x === undefined) {\n return undefined;\n }\n const c = key.charAt(d);\n if (c < x.c) {\n return this.nodeGet(x.left, key, d);\n }\n else if (c > x.c) {\n return this.nodeGet(x.right, key, d);\n }\n else if (d < (key.length - 1)) {\n return this.nodeGet(x.mid, key, d + 1);\n }\n else { return x; }\n }\n\n public put(key: string, val: T) {\n if (!this.contains(key)) {\n this.n++;\n }\n this.root = this.nodePut(this.root, key, val, 0);\n // console.log(`put ${key}`);\n }\n\n private nodePut(x: TSTNode<T> | undefined, key: string, val: T, d: number) {\n let _x = x;\n const c = key.charAt(d);\n if (_x === undefined) {\n _x = { c };\n }\n if (c < _x.c) {\n _x.left = this.nodePut(_x.left, key, val, d);\n }\n else if (c > _x.c) {\n _x.right = this.nodePut(_x.right, key, val, d);\n }\n else if (d < (key.length - 1)) {\n _x.mid = this.nodePut(_x.mid, key, val, d + 1);\n }\n else {\n _x.val = val;\n }\n return _x;\n }\n\n public neighbors(text: string, distance = 2) {\n let q = <ProxString<T>[]>[];\n this.nodeProximity(this.root, { text: \"\" }, 0, text, distance, q);\n q = q.filter((value) => (value.text.length > 0));\n return q;\n }\n\n public keysWithPrefix(text: string) {\n const q = <string[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push(text);\n }\n this.collect(x.mid, { text }, q);\n return q;\n }\n\n private collect(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: string[]) {\n if (x === undefined) {\n return;\n }\n this.collect(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push(prefix.text + x.c);\n }\n this.collect(x.mid, { text: prefix.text + x.c }, q);\n this.collect(x.right, prefix, q);\n }\n\n private mapNode(x: TSTNode<T> | undefined, prefix: TSTPrefix, fn: (key: string, val: T) => void) {\n if (x === undefined) {\n return;\n }\n const key = prefix.text + x.c;\n this.mapNode(x.left, prefix, fn);\n if (x.val) {\n fn(key, x.val);\n }\n this.mapNode(x.mid, { text: key }, fn);\n this.mapNode(x.right, prefix, fn);\n }\n\n public map(fn: (key: string, val: T) => void) {\n this.mapNode(this.root, { text: \"\" }, fn);\n }\n\n public pairsWithPrefix(text: string) {\n const q = <TSTResult<T>[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push({ key: text, val: x.val });\n }\n this.collectPairs(x.mid, { text }, q);\n return q;\n }\n\n private collectPairs(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: TSTResult<T>[]) {\n if (x === undefined) {\n return;\n }\n this.collectPairs(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push({ key: prefix.text + x.c, val: x.val });\n }\n this.collectPairs(x.mid, { text: prefix.text + x.c }, q);\n this.collectPairs(x.right, prefix, q);\n }\n\n private nodeProximity(\n x: TSTNode<T> | undefined,\n prefix: TSTPrefix,\n d: number,\n pattern: string,\n distance: number,\n q: ProxString<T>[]) {\n if ((x === undefined) || (distance < 0)) {\n return;\n }\n const c = pattern.charAt(d);\n if ((distance > 0) || (c < x.c)) {\n this.nodeProximity(x.left, prefix, d, pattern, distance, q);\n }\n if (x.val !== undefined) {\n const remD = distance - (pattern.length - d);\n if (remD >= 0) {\n let invD = distance;\n if (c !== x.c) {\n invD--;\n }\n q.push({ text: prefix.text + x.c, val: x.val, invDistance: invD });\n }\n }\n const recurD = (d < (pattern.length - 1)) ? d + 1 : d;\n if (c === x.c) {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance, q);\n }\n else {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance - 1, q);\n }\n if ((distance > 0) || (c > x.c)) {\n this.nodeProximity(x.right, prefix, d, pattern, distance, q);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions, eqeqeq */\n/* eslint-disable no-bitwise */\n\n/* Remove once strictNullCheck is enabled */\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport {\n ConflictAction,\n IIntegerRange,\n KeyComparer,\n PropertyAction,\n SortedDictionary,\n} from \"./base\";\n\nexport class Stack<T> {\n public items: T[] = [];\n public push(val: T) {\n this.items.push(val);\n }\n\n public empty() {\n return this.items.length === 0;\n }\n\n public top(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n public pop(): T | undefined {\n return this.items.pop();\n }\n}\n\nfunction ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {\n if (entry === undefined) {\n return undefined;\n }\n else if (entry.isHead) {\n return undefined;\n }\n else {\n entry.next.prev = entry.prev;\n entry.prev.next = entry.next;\n }\n return (entry);\n}\n\nfunction ListMakeEntry<U>(data: U): List<U> {\n return new List<U>(false, data);\n}\n\nexport function ListMakeHead<U>(): List<U> {\n return new List<U>(true, undefined);\n}\n\nexport class List<T> {\n public next: List<T>;\n public prev: List<T>;\n\n // eslint-disable-next-line @typescript-eslint/prefer-readonly\n constructor(public isHead: boolean, private data: T | undefined) {\n this.prev = this;\n this.next = this;\n }\n\n public clear(): void {\n if (this.isHead) {\n this.prev = this;\n this.next = this;\n }\n }\n\n private add(data: T): List<T> {\n const entry = ListMakeEntry(data);\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return (entry);\n }\n\n public dequeue(): T | undefined {\n if (!this.empty()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const removedEntry = ListRemoveEntry(this.next)!;\n return removedEntry.data;\n }\n }\n\n public enqueue(data: T): List<T> {\n return this.add(data);\n }\n\n public walk(fn: (data: T, l: List<T>) => void): void {\n for (let entry = this.next; !(entry.isHead); entry = entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(entry.data!, entry);\n }\n }\n\n public some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[] {\n const rtn: T[] = [];\n const start = rev ? this.prev : this.next;\n for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const data = entry.data!;\n if (fn(data, entry)) {\n if (rev) {\n // preserve list order when in reverse\n rtn.unshift(data);\n } else {\n rtn.push(data);\n }\n }\n }\n return rtn;\n }\n\n public count(): number {\n let entry: List<T>;\n let i: number;\n\n entry = this.next;\n for (i = 0; !(entry.isHead); i++) {\n entry = entry.next;\n }\n return (i);\n }\n\n public first(): T | undefined {\n if (!this.empty()) {\n return (this.next.data);\n }\n }\n\n public last(): T | undefined {\n if (!this.empty()) {\n return (this.prev.data);\n }\n }\n\n public empty(): boolean {\n return (this.next === this);\n }\n\n public push(data: T): void {\n const entry = ListMakeEntry(data);\n entry.data = data;\n entry.isHead = false;\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n }\n}\n\nexport interface Comparer<T> {\n compare(a: T, b: T): number;\n min: T;\n}\n\nexport class Heap<T> {\n private L: T[];\n public count() {\n return this.L.length - 1;\n }\n constructor(a: T[], public comp: Comparer<T>) {\n this.L = [comp.min];\n for (let i = 0, len = a.length; i < len; i++) {\n this.add(a[i]);\n }\n }\n public peek() {\n return this.L[1];\n }\n\n public get() {\n const x = this.L[1];\n this.L[1] = this.L[this.count()];\n this.L.pop();\n this.fixdown(1);\n return x;\n }\n\n public add(x: T) {\n this.L.push(x);\n this.fixup(this.count());\n }\n\n private fixup(k: number) {\n let _k = k;\n while (_k > 1 && (this.comp.compare(this.L[_k >> 1], this.L[_k]) > 0)) {\n const tmp = this.L[_k >> 1];\n this.L[_k >> 1] = this.L[_k];\n this.L[_k] = tmp;\n _k = _k >> 1;\n }\n }\n\n private fixdown(k: number) {\n let _k = k;\n while ((_k << 1) <= (this.count())) {\n let j = _k << 1;\n if ((j < this.count()) && (this.comp.compare(this.L[j], this.L[j + 1]) > 0)) {\n j++;\n }\n if (this.comp.compare(this.L[_k], this.L[j]) <= 0) {\n break;\n }\n const tmp = this.L[_k];\n this.L[_k] = this.L[j];\n this.L[j] = tmp;\n _k = j;\n }\n }\n}\n\nexport const enum RBColor {\n RED,\n BLACK,\n}\n\nexport interface RBNode<TKey, TData> {\n key: TKey;\n data: TData;\n left: RBNode<TKey, TData> | undefined;\n right: RBNode<TKey, TData> | undefined;\n color: RBColor;\n size: number;\n}\n\nexport interface IRBAugmentation<TKey, TData> {\n update(node: RBNode<TKey, TData>): void;\n}\n\nexport interface IRBMatcher<TKey, TData> {\n continueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n matchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\nexport interface RBNodeActions<TKey, TData> {\n infix?(node: RBNode<TKey, TData>): boolean;\n pre?(node: RBNode<TKey, TData>): boolean;\n post?(node: RBNode<TKey, TData>): boolean;\n showStructure?: boolean;\n}\n\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n private root: RBNode<TKey, TData> | undefined;\n\n constructor(\n private readonly compareKeys: KeyComparer<TKey>,\n private readonly aug?: IRBAugmentation<TKey, TData>,\n ) { }\n\n private makeNode(key: TKey, data: TData, color: RBColor, size: number) {\n return <RBNode<TKey, TData>>{ key, data, color, size };\n }\n\n private isRed(node: RBNode<TKey, TData> | undefined) {\n return !!node && (node.color == RBColor.RED);\n }\n\n private nodeSize(node: RBNode<TKey, TData> | undefined) {\n return node ? node.size : 0;\n }\n public size() {\n return this.nodeSize(this.root);\n }\n public isEmpty() {\n return !this.root;\n }\n public get(key: TKey) {\n if (key !== undefined) {\n return this.nodeGet(this.root, key);\n }\n }\n private nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {\n let _node = node;\n while (_node) {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node = _node.left;\n }\n else if (cmp > 0) {\n _node = _node.right;\n }\n else {\n return _node;\n }\n }\n }\n private contains(key: TKey) {\n return this.get(key);\n }\n\n public gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {\n const results = [] as RBNode<TKey, TData>[];\n if (key !== undefined) {\n this.nodeGather(this.root, results, key, matcher);\n }\n return results;\n }\n\n private nodeGather(\n node: RBNode<TKey, TData> | undefined,\n results: RBNode<TKey, TData>[],\n key: TKey,\n matcher: IRBMatcher<TKey, TData>) {\n if (node) {\n if (matcher.continueSubtree(node.left, key)) {\n this.nodeGather(node.left, results, key, matcher);\n }\n if (matcher.matchNode(node, key)) {\n results.push(node);\n }\n if (matcher.continueSubtree(node.right, key)) {\n this.nodeGather(node.right, results, key, matcher);\n }\n }\n }\n\n public walkExactMatchesForward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesForward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesForward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesForward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesForward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public walkExactMatchesBackward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesBackward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesBackward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (cmp: number) => boolean,\n continueRightFn: (cmp: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesBackward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesBackward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {\n if (key !== undefined) {\n if (data === undefined) {\n this.remove(key);\n }\n else {\n this.root = this.nodePut(this.root, key, data, conflict);\n this.root.color = RBColor.BLACK;\n }\n }\n }\n\n private nodePut(\n node: RBNode<TKey, TData> | undefined,\n key: TKey, data: TData,\n conflict?: ConflictAction<TKey, TData>,\n ) {\n let _node = node;\n if (!_node) {\n return this.makeNode(key, data, RBColor.RED, 1);\n }\n else {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node.left = this.nodePut(_node.left, key, data, conflict);\n }\n else if (cmp > 0) {\n _node.right = this.nodePut(_node.right, key, data, conflict);\n }\n else {\n if (conflict) {\n const kd = conflict(key, _node.key, data, _node.data);\n if (kd.key) {\n _node.key = kd.key;\n }\n if (kd.data) {\n _node.data = kd.data;\n } else {\n _node.data = data;\n }\n }\n else {\n _node.data = data;\n }\n }\n if (this.isRed(_node.right) && (!this.isRed(_node.left))) {\n _node = this.rotateLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n }\n if (this.isRed(_node.left) && this.isRed(_node.right)) {\n this.flipColors(_node);\n }\n _node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n if (this.aug) {\n this.updateLocal(_node);\n }\n return _node;\n }\n }\n\n private updateLocal(node: RBNode<TKey, TData>) {\n if (this.aug) {\n if (this.isRed(node.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.left!);\n }\n if (this.isRed(node.right)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.right!);\n }\n this.aug.update(node);\n }\n }\n\n private nodeRemoveMin(node: RBNode<TKey, TData>) {\n let _node = node;\n if (_node.left) {\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left.left))) {\n _node = this.moveRedLeft(_node);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemoveMin(_node.left!);\n return this.balance(_node);\n }\n }\n\n public remove(key: TKey) {\n if (key !== undefined) {\n if (!this.contains(key)) {\n return;\n }\n\n this.removeExisting(key);\n }\n // TODO: error on undefined key\n }\n\n public removeExisting(key: TKey) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(this.root!.left)) && (!this.isRed(this.root!.right))) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root!.color = RBColor.RED;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root = this.nodeRemove(this.root!, key);\n }\n\n private nodeRemove(node: RBNode<TKey, TData>, key: TKey) {\n let _node = node;\n if (this.compareKeys(key, _node.key) < 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left!.left))) {\n _node = this.moveRedLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemove(_node.left!, key);\n }\n else {\n if (this.isRed(_node.left)) {\n _node = this.rotateRight(_node);\n }\n if ((this.compareKeys(key, _node.key) == 0) && (!_node.right)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.right)) && (!this.isRed(_node.right!.left))) {\n _node = this.moveRedRight(_node);\n }\n if (this.compareKeys(key, _node.key) == 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const subtreeMin = this.nodeMin(_node.right!);\n _node.key = subtreeMin.key;\n _node.data = subtreeMin.data;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemoveMin(_node.right!);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemove(_node.right!, key);\n }\n }\n return this.balance(_node);\n }\n private height() {\n return this.nodeHeight(this.root);\n }\n private nodeHeight(node: RBNode<TKey, TData> | undefined): number {\n if (node === undefined) {\n return -1;\n }\n else {\n return 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n }\n\n public floor(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeFloor(this.root, key);\n }\n }\n\n private nodeFloor(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp < 0) {\n return this.nodeFloor(node.left, key);\n }\n else {\n const rightFloor = this.nodeFloor(node.right, key);\n if (rightFloor) {\n return rightFloor;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public ceil(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeCeil(this.root, key);\n }\n }\n\n private nodeCeil(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp > 0) {\n return this.nodeCeil(node.right, key);\n }\n else {\n const leftCeil = this.nodeCeil(node.left, key);\n if (leftCeil) {\n return leftCeil;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public min() {\n if (this.root) {\n return this.nodeMin(this.root);\n }\n }\n\n private nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.left) {\n return node;\n }\n else {\n return this.nodeMin(node.left);\n }\n }\n\n public max() {\n if (this.root) {\n return this.nodeMax(this.root);\n }\n }\n\n private nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.right) {\n return node;\n }\n else {\n return this.nodeMax(node.right);\n }\n }\n\n private rotateRight(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const leftChild = node.left!;\n node.left = leftChild.right;\n leftChild.right = node;\n leftChild.color = leftChild.right.color;\n leftChild.right.color = RBColor.RED;\n leftChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(leftChild);\n }\n return leftChild;\n }\n\n private rotateLeft(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const rightChild = node.right!;\n node.right = rightChild.left;\n rightChild.left = node;\n rightChild.color = rightChild.left.color;\n rightChild.left.color = RBColor.RED;\n rightChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(rightChild);\n }\n return rightChild;\n }\n\n private oppositeColor(c: RBColor) {\n return (c == RBColor.BLACK) ? RBColor.RED : RBColor.BLACK;\n }\n\n private flipColors(node: RBNode<TKey, TData>) {\n node.color = this.oppositeColor(node.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.left!.color = this.oppositeColor(node.left!.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.right!.color = this.oppositeColor(node.right!.color);\n }\n\n private moveRedLeft(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.right!.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.rotateRight(_node.right!);\n _node = this.rotateLeft(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private moveRedRight(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private balance(input: RBNode<TKey, TData>) {\n let node: RBNode<TKey, TData> | undefined = input;\n if (this.isRed(node.right)) {\n node = this.rotateLeft(node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(node.left) && this.isRed(node.left!.left)) {\n node = this.rotateRight(node);\n }\n if (this.isRed(node.left) && (this.isRed(node.right))) {\n this.flipColors(node);\n }\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.aug.update(node);\n }\n return node;\n }\n\n public mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey) {\n this.nodeMap(this.root, action, start, end);\n }\n\n public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n // TODO: optimize to avoid comparisons\n this.nodeMap(this.root, action, accum);\n }\n\n public keys() {\n const keyList = <TKey[]>[];\n const actions = <RBNodeActions<TKey, TData>>{\n showStructure: true,\n infix: (node) => {\n keyList.push(node.key);\n return true;\n },\n };\n this.walk(actions);\n return keyList;\n }\n\n /**\n * Depth-first traversal with custom action; if action returns\n * false, traversal is halted.\n * @param action - action to apply to each node\n */\n public walk(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalk(this.root, actions);\n }\n\n public walkBackward(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalkBackward(this.root, actions);\n }\n\n private nodeWalk(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.left) {\n go = this.nodeWalk(node.left, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalk(node.right, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeWalkBackward(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.right) {\n go = this.nodeWalkBackward(node.right, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalkBackward(node.left, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeMap<TAccum>(\n node: RBNode<TKey, TData> | undefined,\n action: PropertyAction<TKey, TData>,\n accum?: TAccum,\n start?: TKey,\n end?: TKey,\n ): boolean {\n let _start = start;\n let _end = end;\n if (!node) {\n return true;\n }\n if (_start === undefined) {\n _start = this.nodeMin(node).key;\n }\n if (_end === undefined) {\n _end = this.nodeMax(node).key;\n }\n const cmpStart = this.compareKeys(_start, node.key);\n const cmpEnd = this.compareKeys(_end, node.key);\n let go = true;\n if (cmpStart < 0) {\n go = this.nodeMap(node.left, action, accum, _start, _end);\n }\n if (go && (cmpStart <= 0) && (cmpEnd >= 0)) {\n // REVIEW: test for black node here\n go = action(node, accum);\n }\n if (go && (cmpEnd > 0)) {\n go = this.nodeMap(node.right, action, accum, _start, _end);\n }\n return go;\n }\n public diag() {\n console.log(`Height is ${this.height()}`);\n }\n}\n\nexport interface AugmentedIntervalNode {\n minmax: IInterval;\n}\n\nexport const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;\n\nexport interface IInterval {\n clone(): IInterval;\n compare(b: IInterval): number;\n compareStart(b: IInterval): number;\n compareEnd(b: IInterval): number;\n modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage): IInterval | undefined;\n overlaps(b: IInterval): boolean;\n union(b: IInterval): IInterval;\n}\n\nconst intervalComparer = (a: IInterval, b: IInterval) => a.compare(b);\nexport type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;\nexport type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;\n\nexport class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>,\n IRBMatcher<T, AugmentedIntervalNode> {\n public intervals = new RedBlackTree<T, AugmentedIntervalNode>(intervalComparer, this);\n\n public remove(x: T) {\n this.intervals.remove(x);\n }\n\n public removeExisting(x: T) {\n this.intervals.removeExisting(x);\n }\n\n public put(x: T, conflict?: IntervalConflictResolver<T>) {\n let rbConflict: ConflictAction<T, AugmentedIntervalNode> | undefined;\n if (conflict) {\n rbConflict = (key: T, currentKey: T) => {\n const ival = conflict(key, currentKey);\n return {\n key: ival,\n };\n };\n }\n this.intervals.put(x, { minmax: x.clone() }, rbConflict);\n }\n\n public map(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapUntil(fn: (X: T) => boolean) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n return fn(node.key);\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapBackward(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walkBackward(actions);\n }\n\n // TODO: toString()\n public match(x: T) {\n return this.intervals.gather(x, this);\n }\n\n public matchNode(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.key.overlaps(key);\n }\n\n public continueSubtree(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.data.minmax.overlaps(key);\n }\n\n public update(node: IntervalNode<T>) {\n if (node.left && node.right) {\n node.data.minmax = node.key.union(\n node.left.data.minmax.union(node.right.data.minmax));\n } else {\n if (node.left) {\n node.data.minmax = node.key.union(node.left.data.minmax);\n } else if (node.right) {\n node.data.minmax = node.key.union(node.right.data.minmax);\n } else {\n node.data.minmax = node.key.clone();\n }\n }\n }\n}\n\nexport interface TSTResult<T> {\n key: string;\n val: T;\n}\n\nexport interface TSTNode<T> {\n c: string;\n left?: TSTNode<T>;\n mid?: TSTNode<T>;\n right?: TSTNode<T>;\n val?: T;\n}\n\ninterface TSTPrefix {\n text: string;\n}\n\nexport interface ProxString<T> {\n text: string;\n invDistance: number;\n val: T;\n}\n\nexport class TST<T> {\n private n = 0;\n private root: TSTNode<T> | undefined;\n\n public size() {\n return this.n;\n }\n\n private contains(key: string) {\n return this.get(key);\n }\n\n public get(key: string) {\n const x = this.nodeGet(this.root, key, 0);\n if (x === undefined) {\n return undefined;\n }\n return x.val;\n }\n\n private nodeGet(x: TSTNode<T> | undefined, key: string, d: number): TSTNode<T> | undefined {\n if (x === undefined) {\n return undefined;\n }\n const c = key.charAt(d);\n if (c < x.c) {\n return this.nodeGet(x.left, key, d);\n }\n else if (c > x.c) {\n return this.nodeGet(x.right, key, d);\n }\n else if (d < (key.length - 1)) {\n return this.nodeGet(x.mid, key, d + 1);\n }\n else { return x; }\n }\n\n public put(key: string, val: T) {\n if (!this.contains(key)) {\n this.n++;\n }\n this.root = this.nodePut(this.root, key, val, 0);\n // console.log(`put ${key}`);\n }\n\n private nodePut(x: TSTNode<T> | undefined, key: string, val: T, d: number) {\n let _x = x;\n const c = key.charAt(d);\n if (_x === undefined) {\n _x = { c };\n }\n if (c < _x.c) {\n _x.left = this.nodePut(_x.left, key, val, d);\n }\n else if (c > _x.c) {\n _x.right = this.nodePut(_x.right, key, val, d);\n }\n else if (d < (key.length - 1)) {\n _x.mid = this.nodePut(_x.mid, key, val, d + 1);\n }\n else {\n _x.val = val;\n }\n return _x;\n }\n\n public neighbors(text: string, distance = 2) {\n let q = <ProxString<T>[]>[];\n this.nodeProximity(this.root, { text: \"\" }, 0, text, distance, q);\n q = q.filter((value) => (value.text.length > 0));\n return q;\n }\n\n public keysWithPrefix(text: string) {\n const q = <string[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push(text);\n }\n this.collect(x.mid, { text }, q);\n return q;\n }\n\n private collect(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: string[]) {\n if (x === undefined) {\n return;\n }\n this.collect(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push(prefix.text + x.c);\n }\n this.collect(x.mid, { text: prefix.text + x.c }, q);\n this.collect(x.right, prefix, q);\n }\n\n private mapNode(x: TSTNode<T> | undefined, prefix: TSTPrefix, fn: (key: string, val: T) => void) {\n if (x === undefined) {\n return;\n }\n const key = prefix.text + x.c;\n this.mapNode(x.left, prefix, fn);\n if (x.val) {\n fn(key, x.val);\n }\n this.mapNode(x.mid, { text: key }, fn);\n this.mapNode(x.right, prefix, fn);\n }\n\n public map(fn: (key: string, val: T) => void) {\n this.mapNode(this.root, { text: \"\" }, fn);\n }\n\n public pairsWithPrefix(text: string) {\n const q = <TSTResult<T>[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push({ key: text, val: x.val });\n }\n this.collectPairs(x.mid, { text }, q);\n return q;\n }\n\n private collectPairs(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: TSTResult<T>[]) {\n if (x === undefined) {\n return;\n }\n this.collectPairs(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push({ key: prefix.text + x.c, val: x.val });\n }\n this.collectPairs(x.mid, { text: prefix.text + x.c }, q);\n this.collectPairs(x.right, prefix, q);\n }\n\n private nodeProximity(\n x: TSTNode<T> | undefined,\n prefix: TSTPrefix,\n d: number,\n pattern: string,\n distance: number,\n q: ProxString<T>[]) {\n if ((x === undefined) || (distance < 0)) {\n return;\n }\n const c = pattern.charAt(d);\n if ((distance > 0) || (c < x.c)) {\n this.nodeProximity(x.left, prefix, d, pattern, distance, q);\n }\n if (x.val !== undefined) {\n const remD = distance - (pattern.length - d);\n if (remD >= 0) {\n let invD = distance;\n if (c !== x.c) {\n invD--;\n }\n q.push({ text: prefix.text + x.c, val: x.val, invDistance: invD });\n }\n }\n const recurD = (d < (pattern.length - 1)) ? d + 1 : d;\n if (c === x.c) {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance, q);\n }\n else {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance - 1, q);\n }\n if ((distance > 0) || (c > x.c)) {\n this.nodeProximity(x.right, prefix, d, pattern, distance, q);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACH,QAAQ,EACR,iBAAiB,EAKpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAiB,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,cAAe,YAAW,iBAAiB;IAQhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEhB,MAAM;IACN,OAAO;IAVlB,gBAAuB,gBAAgB,EAAE,MAAM,CAAM;IAE9C,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;gBAGhB,MAAM,EAAE,MAAM,EAC/B,WAAW,EAAE,QAAQ,EACd,MAAM,SAAI,EACV,OAAO,gBAAuB;IAKlC,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,OAAO,CAAC,CAAC,EAAE,cAAc;IAczB,UAAU;IAQV,aAAa;IAIb,cAAc;IAId,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIpC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS;IAIrC,cAAc,IAAI,MAAM,EAAE,GAAG,SAAS;IAItC,MAAM;IAIN,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,YAAY;IAItD,SAAS;IAIT,UAAU;IAIV,SAAS;IAOT,aAAa;CAGvB;AAED,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,qBAAa,wBAAwB;IAsB7B,OAAO,CAAC,QAAQ,CAAC,OAAO;WArBd,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;IAgB5C,YAAY,EAAE,MAAM,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAa;gBAGR,OAAO,EAAE,QAAQ,EAClC,oBAAoB,gCAA6D;IAO9E,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAiBR,eAAe,cAAc,CAAC;;;IAmBvC,KAAK;IAuBZ,IAAW,KAAK,YAEf;IAEM,WAAW,CAAC,IAAI,EAAE,cAAc;IAmBhC,cAAc,CAAC,IAAI,EAAE,cAAc;IAiC1C;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,EAAE,wBAAwB;IAetC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAqBxC,mBAAmB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;IA8BvD,kBAAkB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;CA8BhE"}
|
package/dist/localReference.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.LocalReferenceCollection = exports.LocalReference = void 0;
|
|
8
|
+
const common_utils_1 = require("@fluidframework/common-utils");
|
|
8
9
|
const mergeTree_1 = require("./mergeTree");
|
|
9
10
|
const ops_1 = require("./ops");
|
|
10
11
|
const properties_1 = require("./properties");
|
|
@@ -112,8 +113,14 @@ class LocalReferenceCollection {
|
|
|
112
113
|
if (!seg1.localRefs) {
|
|
113
114
|
seg1.localRefs = new LocalReferenceCollection(seg1);
|
|
114
115
|
}
|
|
116
|
+
common_utils_1.assert(seg1.localRefs.refsByOffset.length === seg1.cachedLength, 0x2b9 /* "LocalReferences array contains a gap" */);
|
|
115
117
|
seg1.localRefs.append(seg2.localRefs);
|
|
116
118
|
}
|
|
119
|
+
else if (seg1.localRefs) {
|
|
120
|
+
// Since creating the LocalReferenceCollection, we may have appended
|
|
121
|
+
// segments that had no local references. Account for them now by padding the array.
|
|
122
|
+
seg1.localRefs.refsByOffset.length += seg2.cachedLength;
|
|
123
|
+
}
|
|
117
124
|
}
|
|
118
125
|
[Symbol.iterator]() {
|
|
119
126
|
const subiterators = [];
|
|
@@ -181,8 +188,11 @@ class LocalReferenceCollection {
|
|
|
181
188
|
at: [lref],
|
|
182
189
|
};
|
|
183
190
|
}
|
|
184
|
-
else {
|
|
191
|
+
else if (refsAtOffset.at === undefined) {
|
|
185
192
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
193
|
+
this.refsByOffset[lref.offset].at = [lref];
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
186
196
|
refsAtOffset.at.push(lref);
|
|
187
197
|
}
|
|
188
198
|
if (lref.hasRangeLabels() || lref.hasTileLabels()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Client } from \"./client\";\nimport {\n ISegment,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\n\nexport class LocalReference implements ReferencePosition {\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n public pairedRef?: LocalReference;\n public segment: ISegment | undefined;\n\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n public offset = 0,\n public refType = ReferenceType.Simple,\n ) {\n this.segment = initSegment;\n }\n\n public min(b: LocalReference) {\n if (this.compare(b) < 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public max(b: LocalReference) {\n if (this.compare(b) > 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public compare(b: LocalReference) {\n if (this.segment === b.segment) {\n return this.offset - b.offset;\n } else {\n if (this.segment === undefined\n || (b.segment !== undefined &&\n this.segment.ordinal < b.segment.ordinal)) {\n return -1;\n } else {\n return 1;\n }\n }\n }\n\n public toPosition() {\n if (this.segment && this.segment.parent) {\n return this.getOffset() + this.client.getPosition(this.segment);\n } else {\n return LocalReference.DetachedPosition;\n }\n }\n\n public hasTileLabels() {\n return !!this.getTileLabels();\n }\n\n public hasRangeLabels() {\n return !!this.getRangeLabels();\n }\n\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffset {\n before?: LocalReference[];\n at?: LocalReference[];\n after?: LocalReference[];\n}\n\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n seg1.localRefs.append(seg2.localRefs);\n }\n }\n\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffset | undefined)[];\n private refCount: number = 0;\n\n constructor(\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indicies, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: LocalReference[] | undefined) => {\n if (refs) {\n refs.forEach((r) => {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n });\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n public get empty() {\n return this.refCount === 0;\n }\n\n public addLocalRef(lref: LocalReference) {\n const refsAtOffset = this.refsByOffset[lref.offset];\n if (refsAtOffset === undefined) {\n this.refsByOffset[lref.offset] = {\n at: [lref],\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n refsAtOffset.at!.push(lref);\n }\n\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n public removeLocalRef(lref: LocalReference) {\n const tryRemoveRef = (refs: LocalReference[] | undefined) => {\n if (refs) {\n const index = refs.indexOf(lref);\n if (index >= 0) {\n refs.splice(index, 1);\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference>[]) {\n const beforeRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (beforeRefs.length > 0) {\n if (this.refsByOffset[0] === undefined) {\n this.refsByOffset[0] = { before: beforeRefs };\n } else if (this.refsByOffset[0].before === undefined) {\n this.refsByOffset[0].before = beforeRefs;\n } else {\n this.refsByOffset[0].before.unshift(...beforeRefs);\n }\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference>[]) {\n const afterRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (afterRefs.length > 0) {\n const refsAtOffset = this.refsByOffset[this.segment.cachedLength - 1];\n if (refsAtOffset === undefined) {\n this.refsByOffset[this.segment.cachedLength - 1] = { after: afterRefs };\n } else if (refsAtOffset.after === undefined) {\n refsAtOffset.after = afterRefs;\n } else {\n refsAtOffset.after.push(...afterRefs);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAsD;AAEtD,2CAOqB;AACrB,+BAAoD;AACpD,6CAA0D;AAE1D,MAAa,cAAc;IAOvB,YACqB,MAAc,EAC/B,WAAqB,EACd,SAAS,CAAC,EACV,UAAU,mBAAa,CAAC,MAAM;QAHpB,WAAM,GAAN,MAAM,CAAQ;QAExB,WAAM,GAAN,MAAM,CAAI;QACV,YAAO,GAAP,OAAO,CAAuB;QAErC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;IAC/B,CAAC;IAEM,GAAG,CAAC,CAAiB;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;IAEM,GAAG,CAAC,CAAiB;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;IAEM,OAAO,CAAC,CAAiB;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE;YAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACjC;aAAM;YACH,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;mBACvB,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS;oBACvB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC/C,OAAO,CAAC,CAAC,CAAC;aACb;iBAAM;gBACH,OAAO,CAAC,CAAC;aACZ;SACJ;IACL,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACrC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnE;aAAM;YACH,OAAO,cAAc,CAAC,gBAAgB,CAAC;SAC1C;IACL,CAAC;IAEM,aAAa;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;IAEM,cAAc;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IACnC,CAAC;IAEM,YAAY,CAAC,KAAa;QAC7B,OAAO,2BAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAEM,aAAa,CAAC,KAAa;QAC9B,OAAO,4BAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,aAAa;QAChB,OAAO,4BAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,cAAc;QACjB,OAAO,6BAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,aAAa,CAAC,QAAqB,EAAE,EAAiB;QACzD,IAAI,CAAC,UAAU,GAAG,0BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,SAAS;;QACZ,UAAI,IAAI,CAAC,OAAO,0CAAE,UAAU,EAAE;YAC1B,OAAO,CAAC,CAAC;SACZ;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AAvGL,wCAwGC;AAvG0B,+BAAgB,GAAW,CAAC,CAAC,CAAC;AA+GzD,MAAa,wBAAwB;IAqBjC,YACqB,OAAiB,EAClC,uBAAuB,IAAI,KAAK,CAA4B,OAAO,CAAC,YAAY,CAAC;QADhE,YAAO,GAAP,OAAO,CAAU;QAL/B,iBAAY,GAAW,CAAC,CAAC;QAExB,aAAQ,GAAW,CAAC,CAAC;QAKzB,yEAAyE;QACzE,wEAAwE;QACxE,6BAA6B;QAC7B,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC;IAC7C,CAAC;IA3BM,MAAM,CAAC,MAAM,CAAC,IAAc,EAAE,IAAc;QAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC;aACvD;YACD,qBAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,EAC3D,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzC;aACI,IAAI,IAAI,CAAC,SAAS,EAAE;YACrB,oEAAoE;YACpE,oFAAoF;YACpF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC;SAC3D;IACL,CAAC;IAeM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpB,MAAM,YAAY,GAAuC,EAAE,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,IAAI,EAAE;gBACN,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACrD;gBACD,IAAI,IAAI,CAAC,EAAE,EAAE;oBACT,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACjD;gBACD,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACpD;aACJ;SACJ;QAED,MAAM,QAAQ,GAAG;YACb,IAAI;gBACA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;wBACpB,YAAY,CAAC,KAAK,EAAE,CAAC;qBACxB;yBAAM;wBACH,OAAO,IAAI,CAAC;qBACf;iBACJ;gBAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC5C,CAAC;YACD,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACb,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC;QACF,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,MAAM,cAAc,GAAG,CAAC,IAAkC,EAAE,EAAE;YAC1D,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACf,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;wBAC5B,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;qBACzB;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,YAAY,EAAE;gBACd,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAChC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;aACpC;SACJ;IACL,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,WAAW,CAAC,IAAoB;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;gBAC7B,EAAE,EAAE,CAAC,IAAI,CAAC;aACb,CAAC;SACL;aAAM,IAAI,YAAY,CAAC,EAAE,KAAK,SAAS,EAAE;YACtC,oEAAoE;YACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;SAC/C;aAAM;YACH,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,cAAc,CAAC,IAAoB;QACtC,MAAM,YAAY,GAAG,CAAC,IAAkC,EAAE,EAAE;YACxD,IAAI,IAAI,EAAE;gBACN,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtB,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;wBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;qBACvB;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;iBACf;aACJ;QACL,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,WAAW,KAAK,SAAS,EAAE;YAC3B,IAAI,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC;aACd;YAED,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC;aACd;YAED,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC;aACd;SACJ;IACL,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,KAA+B;QACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACvB,OAAO;SACV;QACD,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;QAChC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;SAC3C;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,QAAkB;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,MAAM,SAAS,GACX,IAAI,wBAAwB,CACxB,QAAQ,EACR,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;YAE7E,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;gBAC1B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;gBACxB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;gBACtB,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,SAAS,CAAC,YAAY,EAAE,CAAC;iBAC5B;gBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,SAAS,CAAC,QAAQ,EAAE,CAAC;aACxB;SACJ;IACL,CAAC;IAEM,mBAAmB,CAAC,GAAG,IAAgC;QAC1D,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE;YACzB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gBACzB,sCAAsC;gBACtC,IAAI,IAAI,CAAC,OAAO,GAAG,mBAAa,CAAC,aAAa,EAAE;oBAC5C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;wBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;qBACvB;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACnB;qBAAM;oBACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;iBAC5B;aACJ;SACJ;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;gBACpC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;aACjD;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE;gBAClD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;aAC5C;iBAAM;gBACH,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;aACtD;SACJ;IACL,CAAC;IAEM,kBAAkB,CAAC,GAAG,IAAgC;QACzD,MAAM,SAAS,GAAqB,EAAE,CAAC;QAEvC,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE;YACzB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gBACzB,sCAAsC;gBACtC,IAAI,IAAI,CAAC,OAAO,GAAG,mBAAa,CAAC,aAAa,EAAE;oBAC5C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;oBAC5C,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;wBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;qBACvB;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACnB;qBAAM;oBACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;iBAC5B;aACJ;SACJ;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;aAC3E;iBAAM,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE;gBACzC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;aAClC;iBAAM;gBACH,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;aACzC;SACJ;IACL,CAAC;CACJ;AAzPD,4DAyPC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport { Client } from \"./client\";\nimport {\n ISegment,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\n\nexport class LocalReference implements ReferencePosition {\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n public pairedRef?: LocalReference;\n public segment: ISegment | undefined;\n\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n public offset = 0,\n public refType = ReferenceType.Simple,\n ) {\n this.segment = initSegment;\n }\n\n public min(b: LocalReference) {\n if (this.compare(b) < 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public max(b: LocalReference) {\n if (this.compare(b) > 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public compare(b: LocalReference) {\n if (this.segment === b.segment) {\n return this.offset - b.offset;\n } else {\n if (this.segment === undefined\n || (b.segment !== undefined &&\n this.segment.ordinal < b.segment.ordinal)) {\n return -1;\n } else {\n return 1;\n }\n }\n }\n\n public toPosition() {\n if (this.segment && this.segment.parent) {\n return this.getOffset() + this.client.getPosition(this.segment);\n } else {\n return LocalReference.DetachedPosition;\n }\n }\n\n public hasTileLabels() {\n return !!this.getTileLabels();\n }\n\n public hasRangeLabels() {\n return !!this.getRangeLabels();\n }\n\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffset {\n before?: LocalReference[];\n at?: LocalReference[];\n after?: LocalReference[];\n}\n\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n assert(seg1.localRefs.refsByOffset.length === seg1.cachedLength,\n 0x2b9 /* \"LocalReferences array contains a gap\" */);\n seg1.localRefs.append(seg2.localRefs);\n }\n else if (seg1.localRefs) {\n // Since creating the LocalReferenceCollection, we may have appended\n // segments that had no local references. Account for them now by padding the array.\n seg1.localRefs.refsByOffset.length += seg2.cachedLength;\n }\n }\n\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffset | undefined)[];\n private refCount: number = 0;\n\n constructor(\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indicies, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: LocalReference[] | undefined) => {\n if (refs) {\n refs.forEach((r) => {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n });\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n public get empty() {\n return this.refCount === 0;\n }\n\n public addLocalRef(lref: LocalReference) {\n const refsAtOffset = this.refsByOffset[lref.offset];\n if (refsAtOffset === undefined) {\n this.refsByOffset[lref.offset] = {\n at: [lref],\n };\n } else if (refsAtOffset.at === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.refsByOffset[lref.offset]!.at = [lref];\n } else {\n refsAtOffset.at.push(lref);\n }\n\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n public removeLocalRef(lref: LocalReference) {\n const tryRemoveRef = (refs: LocalReference[] | undefined) => {\n if (refs) {\n const index = refs.indexOf(lref);\n if (index >= 0) {\n refs.splice(index, 1);\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference>[]) {\n const beforeRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (beforeRefs.length > 0) {\n if (this.refsByOffset[0] === undefined) {\n this.refsByOffset[0] = { before: beforeRefs };\n } else if (this.refsByOffset[0].before === undefined) {\n this.refsByOffset[0].before = beforeRefs;\n } else {\n this.refsByOffset[0].before.unshift(...beforeRefs);\n }\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference>[]) {\n const afterRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (afterRefs.length > 0) {\n const refsAtOffset = this.refsByOffset[this.segment.cachedLength - 1];\n if (refsAtOffset === undefined) {\n this.refsByOffset[this.segment.cachedLength - 1] = { after: afterRefs };\n } else if (refsAtOffset.after === undefined) {\n refsAtOffset.after = afterRefs;\n } else {\n refsAtOffset.after.push(...afterRefs);\n }\n }\n }\n}\n"]}
|
package/lib/client.d.ts
CHANGED
|
@@ -195,7 +195,7 @@ export declare class Client {
|
|
|
195
195
|
localTransaction(groupOp: IMergeTreeGroupMsg): void;
|
|
196
196
|
updateConsensusProperty(op: IMergeTreeAnnotateMsg, msg: ISequencedDocumentMessage): void;
|
|
197
197
|
updateMinSeq(minSeq: number): void;
|
|
198
|
-
getContainingSegment<T extends ISegment>(pos: number): {
|
|
198
|
+
getContainingSegment<T extends ISegment>(pos: number, op?: ISequencedDocumentMessage): {
|
|
199
199
|
segment: T | undefined;
|
|
200
200
|
offset: number | undefined;
|
|
201
201
|
};
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -722,9 +722,19 @@ export class Client {
|
|
|
722
722
|
}
|
|
723
723
|
}
|
|
724
724
|
}
|
|
725
|
-
getContainingSegment(pos) {
|
|
726
|
-
|
|
727
|
-
|
|
725
|
+
getContainingSegment(pos, op) {
|
|
726
|
+
let seq;
|
|
727
|
+
let clientId;
|
|
728
|
+
if (op) {
|
|
729
|
+
clientId = this.getOrAddShortClientId(op.clientId);
|
|
730
|
+
seq = op.sequenceNumber;
|
|
731
|
+
}
|
|
732
|
+
else {
|
|
733
|
+
const segWindow = this.mergeTree.getCollabWindow();
|
|
734
|
+
seq = segWindow.currentSeq;
|
|
735
|
+
clientId = segWindow.clientId;
|
|
736
|
+
}
|
|
737
|
+
return this.mergeTree.getContainingSegment(pos, seq, clientId);
|
|
728
738
|
}
|
|
729
739
|
getPropertiesAtPosition(pos) {
|
|
730
740
|
const segWindow = this.getCollabWindow();
|