@fluidframework/merge-tree 1.2.1 → 2.0.0-internal.1.0.0

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.
Files changed (231) hide show
  1. package/DEV.md +2 -2
  2. package/README.md +1 -1
  3. package/REFERENCEPOSITIONS.md +2 -2
  4. package/dist/MergeTreeTextHelper.d.ts +23 -0
  5. package/dist/MergeTreeTextHelper.d.ts.map +1 -0
  6. package/dist/MergeTreeTextHelper.js +136 -0
  7. package/dist/MergeTreeTextHelper.js.map +1 -0
  8. package/dist/base.d.ts +2 -26
  9. package/dist/base.d.ts.map +1 -1
  10. package/dist/base.js.map +1 -1
  11. package/dist/client.d.ts +21 -12
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +87 -27
  14. package/dist/client.js.map +1 -1
  15. package/dist/collections/heap.d.ts +28 -0
  16. package/dist/collections/heap.d.ts.map +1 -0
  17. package/dist/collections/heap.js +65 -0
  18. package/dist/collections/heap.js.map +1 -0
  19. package/dist/collections/index.d.ts +11 -0
  20. package/dist/collections/index.d.ts.map +1 -0
  21. package/dist/collections/index.js +23 -0
  22. package/dist/collections/index.js.map +1 -0
  23. package/dist/collections/intervalTree.d.ts +60 -0
  24. package/dist/collections/intervalTree.d.ts.map +1 -0
  25. package/dist/collections/intervalTree.js +99 -0
  26. package/dist/collections/intervalTree.js.map +1 -0
  27. package/dist/collections/list.d.ts +39 -0
  28. package/dist/collections/list.d.ts.map +1 -0
  29. package/dist/collections/list.js +155 -0
  30. package/dist/collections/list.js.map +1 -0
  31. package/dist/collections/rbTree.d.ts +154 -0
  32. package/dist/collections/rbTree.d.ts.map +1 -0
  33. package/dist/{collections.js → collections/rbTree.js} +10 -448
  34. package/dist/collections/rbTree.js.map +1 -0
  35. package/dist/collections/stack.d.ts +16 -0
  36. package/dist/collections/stack.d.ts.map +1 -0
  37. package/dist/collections/stack.js +30 -0
  38. package/dist/collections/stack.js.map +1 -0
  39. package/dist/collections/tst.d.ts +55 -0
  40. package/dist/collections/tst.d.ts.map +1 -0
  41. package/dist/collections/tst.js +171 -0
  42. package/dist/collections/tst.js.map +1 -0
  43. package/dist/index.d.ts +3 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +4 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/localReference.d.ts +48 -99
  48. package/dist/localReference.d.ts.map +1 -1
  49. package/dist/localReference.js +132 -169
  50. package/dist/localReference.js.map +1 -1
  51. package/dist/mergeTree.d.ts +38 -299
  52. package/dist/mergeTree.d.ts.map +1 -1
  53. package/dist/mergeTree.js +214 -598
  54. package/dist/mergeTree.js.map +1 -1
  55. package/dist/mergeTreeDeltaCallback.d.ts +1 -1
  56. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  57. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  58. package/dist/mergeTreeNodes.d.ts +269 -0
  59. package/dist/mergeTreeNodes.d.ts.map +1 -0
  60. package/dist/mergeTreeNodes.js +383 -0
  61. package/dist/mergeTreeNodes.js.map +1 -0
  62. package/dist/mergeTreeTracking.d.ts +1 -1
  63. package/dist/mergeTreeTracking.d.ts.map +1 -1
  64. package/dist/mergeTreeTracking.js.map +1 -1
  65. package/dist/opBuilder.d.ts +1 -1
  66. package/dist/opBuilder.d.ts.map +1 -1
  67. package/dist/opBuilder.js.map +1 -1
  68. package/dist/partialLengths.d.ts +130 -15
  69. package/dist/partialLengths.d.ts.map +1 -1
  70. package/dist/partialLengths.js +230 -138
  71. package/dist/partialLengths.js.map +1 -1
  72. package/dist/properties.d.ts.map +1 -1
  73. package/dist/properties.js.map +1 -1
  74. package/dist/referencePositions.d.ts +6 -26
  75. package/dist/referencePositions.d.ts.map +1 -1
  76. package/dist/referencePositions.js.map +1 -1
  77. package/dist/segmentGroupCollection.d.ts +2 -1
  78. package/dist/segmentGroupCollection.d.ts.map +1 -1
  79. package/dist/segmentGroupCollection.js +3 -0
  80. package/dist/segmentGroupCollection.js.map +1 -1
  81. package/dist/segmentPropertiesManager.d.ts +10 -1
  82. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  83. package/dist/segmentPropertiesManager.js +41 -6
  84. package/dist/segmentPropertiesManager.js.map +1 -1
  85. package/dist/snapshotLoader.d.ts.map +1 -1
  86. package/dist/snapshotLoader.js.map +1 -1
  87. package/dist/snapshotV1.d.ts +1 -1
  88. package/dist/snapshotV1.d.ts.map +1 -1
  89. package/dist/snapshotV1.js.map +1 -1
  90. package/dist/snapshotlegacy.d.ts +5 -1
  91. package/dist/snapshotlegacy.d.ts.map +1 -1
  92. package/dist/snapshotlegacy.js +4 -0
  93. package/dist/snapshotlegacy.js.map +1 -1
  94. package/dist/sortedSegmentSet.d.ts +1 -1
  95. package/dist/sortedSegmentSet.d.ts.map +1 -1
  96. package/dist/sortedSegmentSet.js.map +1 -1
  97. package/dist/textSegment.d.ts +7 -7
  98. package/dist/textSegment.d.ts.map +1 -1
  99. package/dist/textSegment.js +3 -125
  100. package/dist/textSegment.js.map +1 -1
  101. package/lib/MergeTreeTextHelper.d.ts +23 -0
  102. package/lib/MergeTreeTextHelper.d.ts.map +1 -0
  103. package/lib/MergeTreeTextHelper.js +132 -0
  104. package/lib/MergeTreeTextHelper.js.map +1 -0
  105. package/lib/base.d.ts +2 -26
  106. package/lib/base.d.ts.map +1 -1
  107. package/lib/base.js.map +1 -1
  108. package/lib/client.d.ts +21 -12
  109. package/lib/client.d.ts.map +1 -1
  110. package/lib/client.js +85 -25
  111. package/lib/client.js.map +1 -1
  112. package/lib/collections/heap.d.ts +28 -0
  113. package/lib/collections/heap.d.ts.map +1 -0
  114. package/lib/collections/heap.js +61 -0
  115. package/lib/collections/heap.js.map +1 -0
  116. package/lib/collections/index.d.ts +11 -0
  117. package/lib/collections/index.d.ts.map +1 -0
  118. package/lib/collections/index.js +11 -0
  119. package/lib/collections/index.js.map +1 -0
  120. package/lib/collections/intervalTree.d.ts +60 -0
  121. package/lib/collections/intervalTree.d.ts.map +1 -0
  122. package/lib/collections/intervalTree.js +94 -0
  123. package/lib/collections/intervalTree.js.map +1 -0
  124. package/lib/collections/list.d.ts +39 -0
  125. package/lib/collections/list.d.ts.map +1 -0
  126. package/lib/collections/list.js +149 -0
  127. package/lib/collections/list.js.map +1 -0
  128. package/lib/collections/rbTree.d.ts +154 -0
  129. package/lib/collections/rbTree.d.ts.map +1 -0
  130. package/lib/{collections.js → collections/rbTree.js} +9 -439
  131. package/lib/collections/rbTree.js.map +1 -0
  132. package/lib/collections/stack.d.ts +16 -0
  133. package/lib/collections/stack.d.ts.map +1 -0
  134. package/lib/collections/stack.js +26 -0
  135. package/lib/collections/stack.js.map +1 -0
  136. package/lib/collections/tst.d.ts +55 -0
  137. package/lib/collections/tst.d.ts.map +1 -0
  138. package/lib/collections/tst.js +167 -0
  139. package/lib/collections/tst.js.map +1 -0
  140. package/lib/index.d.ts +3 -1
  141. package/lib/index.d.ts.map +1 -1
  142. package/lib/index.js +3 -1
  143. package/lib/index.js.map +1 -1
  144. package/lib/localReference.d.ts +48 -99
  145. package/lib/localReference.d.ts.map +1 -1
  146. package/lib/localReference.js +132 -170
  147. package/lib/localReference.js.map +1 -1
  148. package/lib/mergeTree.d.ts +38 -299
  149. package/lib/mergeTree.d.ts.map +1 -1
  150. package/lib/mergeTree.js +190 -563
  151. package/lib/mergeTree.js.map +1 -1
  152. package/lib/mergeTreeDeltaCallback.d.ts +1 -1
  153. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
  154. package/lib/mergeTreeDeltaCallback.js.map +1 -1
  155. package/lib/mergeTreeNodes.d.ts +269 -0
  156. package/lib/mergeTreeNodes.d.ts.map +1 -0
  157. package/lib/mergeTreeNodes.js +369 -0
  158. package/lib/mergeTreeNodes.js.map +1 -0
  159. package/lib/mergeTreeTracking.d.ts +1 -1
  160. package/lib/mergeTreeTracking.d.ts.map +1 -1
  161. package/lib/mergeTreeTracking.js.map +1 -1
  162. package/lib/opBuilder.d.ts +1 -1
  163. package/lib/opBuilder.d.ts.map +1 -1
  164. package/lib/opBuilder.js.map +1 -1
  165. package/lib/partialLengths.d.ts +130 -15
  166. package/lib/partialLengths.d.ts.map +1 -1
  167. package/lib/partialLengths.js +227 -135
  168. package/lib/partialLengths.js.map +1 -1
  169. package/lib/properties.d.ts.map +1 -1
  170. package/lib/properties.js.map +1 -1
  171. package/lib/referencePositions.d.ts +6 -26
  172. package/lib/referencePositions.d.ts.map +1 -1
  173. package/lib/referencePositions.js.map +1 -1
  174. package/lib/segmentGroupCollection.d.ts +2 -1
  175. package/lib/segmentGroupCollection.d.ts.map +1 -1
  176. package/lib/segmentGroupCollection.js +3 -0
  177. package/lib/segmentGroupCollection.js.map +1 -1
  178. package/lib/segmentPropertiesManager.d.ts +10 -1
  179. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  180. package/lib/segmentPropertiesManager.js +41 -6
  181. package/lib/segmentPropertiesManager.js.map +1 -1
  182. package/lib/snapshotLoader.d.ts.map +1 -1
  183. package/lib/snapshotLoader.js.map +1 -1
  184. package/lib/snapshotV1.d.ts +1 -1
  185. package/lib/snapshotV1.d.ts.map +1 -1
  186. package/lib/snapshotV1.js.map +1 -1
  187. package/lib/snapshotlegacy.d.ts +5 -1
  188. package/lib/snapshotlegacy.d.ts.map +1 -1
  189. package/lib/snapshotlegacy.js +4 -0
  190. package/lib/snapshotlegacy.js.map +1 -1
  191. package/lib/sortedSegmentSet.d.ts +1 -1
  192. package/lib/sortedSegmentSet.d.ts.map +1 -1
  193. package/lib/sortedSegmentSet.js.map +1 -1
  194. package/lib/textSegment.d.ts +7 -7
  195. package/lib/textSegment.d.ts.map +1 -1
  196. package/lib/textSegment.js +1 -122
  197. package/lib/textSegment.js.map +1 -1
  198. package/package.json +93 -17
  199. package/src/MergeTreeTextHelper.ts +172 -0
  200. package/src/base.ts +2 -35
  201. package/src/client.ts +114 -30
  202. package/src/collections/heap.ts +75 -0
  203. package/src/collections/index.ts +11 -0
  204. package/src/collections/intervalTree.ts +140 -0
  205. package/src/collections/list.ts +165 -0
  206. package/src/{collections.ts → collections/rbTree.ts} +79 -538
  207. package/src/collections/stack.ts +27 -0
  208. package/src/collections/tst.ts +212 -0
  209. package/src/index.ts +8 -2
  210. package/src/localReference.ts +152 -203
  211. package/src/mergeTree.ts +265 -868
  212. package/src/mergeTreeDeltaCallback.ts +1 -1
  213. package/src/mergeTreeNodes.ts +676 -0
  214. package/src/mergeTreeTracking.ts +1 -1
  215. package/src/opBuilder.ts +1 -1
  216. package/src/partialLengths.ts +295 -150
  217. package/src/properties.ts +1 -0
  218. package/src/referencePositions.ts +7 -27
  219. package/src/segmentGroupCollection.ts +5 -1
  220. package/src/segmentPropertiesManager.ts +45 -6
  221. package/src/snapshotLoader.ts +2 -1
  222. package/src/snapshotV1.ts +2 -2
  223. package/src/snapshotlegacy.ts +6 -2
  224. package/src/sortedSegmentSet.ts +1 -1
  225. package/src/textSegment.ts +10 -157
  226. package/dist/collections.d.ts +0 -197
  227. package/dist/collections.d.ts.map +0 -1
  228. package/dist/collections.js.map +0 -1
  229. package/lib/collections.d.ts +0 -197
  230. package/lib/collections.d.ts.map +0 -1
  231. package/lib/collections.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.IntervalTree = exports.integerRangeToString = void 0;
8
+ const rbTree_1 = require("./rbTree");
9
+ /**
10
+ * @deprecated for internal use only. public export will be removed.
11
+ * @internal
12
+ */
13
+ const integerRangeToString = (range) => `[${range.start},${range.end})`;
14
+ exports.integerRangeToString = integerRangeToString;
15
+ const intervalComparer = (a, b) => a.compare(b);
16
+ /**
17
+ * @deprecated for internal use only. public export will be removed.
18
+ * @internal
19
+ */
20
+ class IntervalTree {
21
+ constructor() {
22
+ this.intervals = new rbTree_1.RedBlackTree(intervalComparer, this);
23
+ }
24
+ remove(x) {
25
+ this.intervals.remove(x);
26
+ }
27
+ removeExisting(x) {
28
+ this.intervals.removeExisting(x);
29
+ }
30
+ put(x, conflict) {
31
+ let rbConflict;
32
+ if (conflict) {
33
+ rbConflict = (key, currentKey) => {
34
+ const ival = conflict(key, currentKey);
35
+ return {
36
+ key: ival,
37
+ };
38
+ };
39
+ }
40
+ this.intervals.put(x, { minmax: x.clone() }, rbConflict);
41
+ }
42
+ map(fn) {
43
+ const actions = {
44
+ infix: (node) => {
45
+ fn(node.key);
46
+ return true;
47
+ },
48
+ showStructure: true,
49
+ };
50
+ this.intervals.walk(actions);
51
+ }
52
+ mapUntil(fn) {
53
+ const actions = {
54
+ infix: (node) => {
55
+ return fn(node.key);
56
+ },
57
+ showStructure: true,
58
+ };
59
+ this.intervals.walk(actions);
60
+ }
61
+ mapBackward(fn) {
62
+ const actions = {
63
+ infix: (node) => {
64
+ fn(node.key);
65
+ return true;
66
+ },
67
+ showStructure: true,
68
+ };
69
+ this.intervals.walkBackward(actions);
70
+ }
71
+ // TODO: toString()
72
+ match(x) {
73
+ return this.intervals.gather(x, this);
74
+ }
75
+ matchNode(node, key) {
76
+ return !!node && node.key.overlaps(key);
77
+ }
78
+ continueSubtree(node, key) {
79
+ return !!node && node.data.minmax.overlaps(key);
80
+ }
81
+ update(node) {
82
+ if (node.left && node.right) {
83
+ node.data.minmax = node.key.union(node.left.data.minmax.union(node.right.data.minmax));
84
+ }
85
+ else {
86
+ if (node.left) {
87
+ node.data.minmax = node.key.union(node.left.data.minmax);
88
+ }
89
+ else if (node.right) {
90
+ node.data.minmax = node.key.union(node.right.data.minmax);
91
+ }
92
+ else {
93
+ node.data.minmax = node.key.clone();
94
+ }
95
+ }
96
+ }
97
+ }
98
+ exports.IntervalTree = IntervalTree;
99
+ //# sourceMappingURL=intervalTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervalTree.js","sourceRoot":"","sources":["../../src/collections/intervalTree.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 { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport {\n IIntegerRange,\n} from \"../base\";\nimport { ConflictAction, IRBAugmentation, IRBMatcher, RBNode, RBNodeActions, RedBlackTree } from \"./rbTree\";\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport interface AugmentedIntervalNode {\n minmax: IInterval;\n}\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\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);\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\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"]}
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /**
6
+ * @deprecated for internal use only. public export will be removed.
7
+ * @internal
8
+ */
9
+ export declare function ListRemoveEntry<U>(entry: List<U>): List<U> | undefined;
10
+ /**
11
+ * @deprecated for internal use only. public export will be removed.
12
+ * @internal
13
+ */
14
+ export declare function ListMakeHead<U>(): List<U>;
15
+ /**
16
+ * @deprecated for internal use only. public export will be removed.
17
+ * @internal
18
+ */
19
+ export declare class List<T> {
20
+ isHead: boolean;
21
+ data: T | undefined;
22
+ next: List<T>;
23
+ prev: List<T>;
24
+ constructor(isHead: boolean, data: T | undefined);
25
+ clear(): void;
26
+ private add;
27
+ dequeue(): T | undefined;
28
+ enqueue(data: T): List<T>;
29
+ pop?(): T | undefined;
30
+ walk(fn: (data: T, l: List<T>) => void): void;
31
+ some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[];
32
+ count(): number;
33
+ first(): T | undefined;
34
+ last(): T | undefined;
35
+ empty(): boolean;
36
+ unshift(data: T): void;
37
+ [Symbol.iterator](): IterableIterator<T>;
38
+ }
39
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/collections/list.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAYtE;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAEzC;AAED;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC;IAII,MAAM,EAAE,OAAO;IAAS,IAAI,EAAE,CAAC,GAAG,SAAS;IAHvD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEF,MAAM,EAAE,OAAO,EAAS,IAAI,EAAE,CAAC,GAAG,SAAS;IAKvD,KAAK,IAAI,IAAI;IAOpB,OAAO,CAAC,GAAG;IASJ,OAAO,IAAI,CAAC,GAAG,SAAS;IAQxB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAIzB,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS;IAKrB,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAO7C,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE;IAkB9D,KAAK,IAAI,MAAM;IAWf,KAAK,IAAI,CAAC,GAAG,SAAS;IAMtB,IAAI,IAAI,CAAC,GAAG,SAAS;IAMrB,KAAK,IAAI,OAAO;IAIhB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAUtB,CAAC,MAAM,CAAC,QAAQ,CAAC;CAmB3B"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.List = exports.ListMakeHead = exports.ListRemoveEntry = void 0;
8
+ /**
9
+ * @deprecated for internal use only. public export will be removed.
10
+ * @internal
11
+ */
12
+ function ListRemoveEntry(entry) {
13
+ if (entry === undefined) {
14
+ return undefined;
15
+ }
16
+ else if (entry.isHead) {
17
+ return undefined;
18
+ }
19
+ else {
20
+ entry.next.prev = entry.prev;
21
+ entry.prev.next = entry.next;
22
+ entry.next = deadhead;
23
+ entry.prev = deadhead;
24
+ }
25
+ return (entry);
26
+ }
27
+ exports.ListRemoveEntry = ListRemoveEntry;
28
+ function ListMakeEntry(data) {
29
+ return new List(false, data);
30
+ }
31
+ /**
32
+ * @deprecated for internal use only. public export will be removed.
33
+ * @internal
34
+ */
35
+ function ListMakeHead() {
36
+ return new List(true, undefined);
37
+ }
38
+ exports.ListMakeHead = ListMakeHead;
39
+ /**
40
+ * @deprecated for internal use only. public export will be removed.
41
+ * @internal
42
+ */
43
+ class List {
44
+ constructor(isHead, data) {
45
+ this.isHead = isHead;
46
+ this.data = data;
47
+ this.prev = this;
48
+ this.next = this;
49
+ }
50
+ clear() {
51
+ if (this.isHead) {
52
+ this.prev = this;
53
+ this.next = this;
54
+ }
55
+ }
56
+ add(data) {
57
+ const entry = ListMakeEntry(data);
58
+ this.prev.next = entry;
59
+ entry.next = this;
60
+ entry.prev = this.prev;
61
+ this.prev = entry;
62
+ return (entry);
63
+ }
64
+ dequeue() {
65
+ if (!this.empty()) {
66
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
67
+ const removedEntry = ListRemoveEntry(this.next);
68
+ return removedEntry.data;
69
+ }
70
+ }
71
+ enqueue(data) {
72
+ return this.add(data);
73
+ }
74
+ pop() {
75
+ const removedEntry = ListRemoveEntry(this.prev);
76
+ return removedEntry ? removedEntry.data : undefined;
77
+ }
78
+ walk(fn) {
79
+ for (let entry = this.next; !(entry.isHead); entry = entry.next) {
80
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
81
+ fn(entry.data, entry);
82
+ }
83
+ }
84
+ some(fn, rev) {
85
+ const rtn = [];
86
+ const start = rev ? this.prev : this.next;
87
+ for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {
88
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
89
+ const data = entry.data;
90
+ if (fn(data, entry)) {
91
+ if (rev) {
92
+ // preserve list order when in reverse
93
+ rtn.unshift(data);
94
+ }
95
+ else {
96
+ rtn.push(data);
97
+ }
98
+ }
99
+ }
100
+ return rtn;
101
+ }
102
+ count() {
103
+ let entry;
104
+ let i;
105
+ entry = this.next;
106
+ for (i = 0; !(entry.isHead); i++) {
107
+ entry = entry.next;
108
+ }
109
+ return (i);
110
+ }
111
+ first() {
112
+ if (!this.empty()) {
113
+ return (this.next.data);
114
+ }
115
+ }
116
+ last() {
117
+ if (!this.empty()) {
118
+ return (this.prev.data);
119
+ }
120
+ }
121
+ empty() {
122
+ return (this.next === this);
123
+ }
124
+ unshift(data) {
125
+ const entry = ListMakeEntry(data);
126
+ entry.data = data;
127
+ entry.isHead = false;
128
+ entry.next = this.next;
129
+ entry.prev = this;
130
+ this.next = entry;
131
+ entry.next.prev = entry;
132
+ }
133
+ [Symbol.iterator]() {
134
+ let node = this.next;
135
+ const iterator = {
136
+ next() {
137
+ while (node && node.isHead === false) {
138
+ const value = node.data;
139
+ node = node.next;
140
+ if (value !== undefined) {
141
+ return { value, done: false };
142
+ }
143
+ }
144
+ return { value: undefined, done: true };
145
+ },
146
+ [Symbol.iterator]() {
147
+ return this;
148
+ },
149
+ };
150
+ return iterator;
151
+ }
152
+ }
153
+ exports.List = List;
154
+ const deadhead = ListMakeHead();
155
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/collections/list.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/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport function ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {\n if (entry === undefined) {\n return undefined;\n } else if (entry.isHead) {\n return undefined;\n } else {\n entry.next.prev = entry.prev;\n entry.prev.next = entry.next;\n entry.next = deadhead;\n entry.prev = deadhead;\n }\n return (entry);\n}\n\nfunction ListMakeEntry<U>(data: U): List<U> {\n return new List<U>(false, data);\n}\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport function ListMakeHead<U>(): List<U> {\n return new List<U>(true, undefined);\n}\n\n/**\n * @deprecated for internal use only. public export will be removed.\n * @internal\n */\nexport class List<T> {\n public next: List<T>;\n public prev: List<T>;\n\n constructor(public isHead: boolean, public 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 pop?(): T | undefined {\n const removedEntry = ListRemoveEntry(this.prev);\n return removedEntry ? removedEntry.data : undefined;\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 unshift(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 public [Symbol.iterator]() {\n let node: List<T> | undefined = this.next;\n const iterator: IterableIterator<T> = {\n next(): IteratorResult<T> {\n while (node && node.isHead === false) {\n const value = node.data;\n node = node.next;\n if (value !== undefined) {\n return { value, done: false };\n }\n }\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n}\n\nconst deadhead = ListMakeHead<any>();\n"]}
@@ -0,0 +1,154 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /**
6
+ * @internal
7
+ */
8
+ export declare const RBColor: {
9
+ readonly RED: 0;
10
+ readonly BLACK: 1;
11
+ };
12
+ /**
13
+ * @internal
14
+ */
15
+ export declare type RBColor = typeof RBColor[keyof typeof RBColor];
16
+ /**
17
+ * @internal
18
+ */
19
+ export interface RBNode<TKey, TData> {
20
+ key: TKey;
21
+ data: TData;
22
+ left: RBNode<TKey, TData> | undefined;
23
+ right: RBNode<TKey, TData> | undefined;
24
+ color: RBColor;
25
+ size: number;
26
+ }
27
+ /**
28
+ * @internal
29
+ */
30
+ export interface IRBAugmentation<TKey, TData> {
31
+ update(node: RBNode<TKey, TData>): void;
32
+ }
33
+ /**
34
+ * @internal
35
+ */
36
+ export interface IRBMatcher<TKey, TData> {
37
+ continueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;
38
+ matchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;
39
+ }
40
+ /**
41
+ * @internal
42
+ */
43
+ export interface RBNodeActions<TKey, TData> {
44
+ infix?(node: RBNode<TKey, TData>): boolean;
45
+ pre?(node: RBNode<TKey, TData>): boolean;
46
+ post?(node: RBNode<TKey, TData>): boolean;
47
+ showStructure?: boolean;
48
+ }
49
+ /**
50
+ * @internal
51
+ */
52
+ export interface KeyComparer<TKey> {
53
+ (a: TKey, b: TKey): number;
54
+ }
55
+ /**
56
+ * @internal
57
+ */
58
+ export interface Property<TKey, TData> {
59
+ key: TKey;
60
+ data: TData;
61
+ }
62
+ /**
63
+ * @internal
64
+ */
65
+ export interface PropertyAction<TKey, TData> {
66
+ <TAccum>(p: Property<TKey, TData>, accum?: TAccum): boolean;
67
+ }
68
+ /**
69
+ * @internal
70
+ */
71
+ export interface QProperty<TKey, TData> {
72
+ key?: TKey;
73
+ data?: TData;
74
+ }
75
+ /**
76
+ * @internal
77
+ */
78
+ export declare type ConflictAction<TKey, TData> = (key: TKey, currentKey: TKey, data: TData, currentData: TData) => QProperty<TKey, TData>;
79
+ /**
80
+ * @internal
81
+ */
82
+ export interface SortedDictionary<TKey, TData> extends Dictionary<TKey, TData> {
83
+ max(): Property<TKey, TData> | undefined;
84
+ min(): Property<TKey, TData> | undefined;
85
+ mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey): void;
86
+ }
87
+ /**
88
+ * @internal
89
+ */
90
+ export interface Dictionary<TKey, TData> {
91
+ get(key: TKey): Property<TKey, TData> | undefined;
92
+ put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void;
93
+ remove(key: TKey): void;
94
+ map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void;
95
+ }
96
+ /**
97
+ * @internal
98
+ */
99
+ export declare class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {
100
+ private readonly compareKeys;
101
+ private readonly aug?;
102
+ private root;
103
+ constructor(compareKeys: KeyComparer<TKey>, aug?: IRBAugmentation<TKey, TData> | undefined);
104
+ private makeNode;
105
+ private isRed;
106
+ private nodeSize;
107
+ size(): number;
108
+ isEmpty(): boolean;
109
+ get(key: TKey): RBNode<TKey, TData> | undefined;
110
+ private nodeGet;
111
+ private contains;
112
+ gather(key: TKey, matcher: IRBMatcher<TKey, TData>): RBNode<TKey, TData>[];
113
+ private nodeGather;
114
+ walkExactMatchesForward(compareFn: (node: RBNode<TKey, TData>) => number, actionFn: (node: RBNode<TKey, TData>) => void, continueLeftFn: (number: number) => boolean, continueRightFn: (number: number) => boolean): void;
115
+ private nodeWalkExactMatchesForward;
116
+ walkExactMatchesBackward(compareFn: (node: RBNode<TKey, TData>) => number, actionFn: (node: RBNode<TKey, TData>) => void, continueLeftFn: (number: number) => boolean, continueRightFn: (number: number) => boolean): void;
117
+ private nodeWalkExactMatchesBackward;
118
+ put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void;
119
+ private nodePut;
120
+ private updateLocal;
121
+ private nodeRemoveMin;
122
+ remove(key: TKey): void;
123
+ removeExisting(key: TKey): void;
124
+ private nodeRemove;
125
+ floor(key: TKey): RBNode<TKey, TData> | undefined;
126
+ private nodeFloor;
127
+ ceil(key: TKey): RBNode<TKey, TData> | undefined;
128
+ private nodeCeil;
129
+ min(): RBNode<TKey, TData> | undefined;
130
+ private nodeMin;
131
+ max(): RBNode<TKey, TData> | undefined;
132
+ private nodeMax;
133
+ private rotateRight;
134
+ private rotateLeft;
135
+ private oppositeColor;
136
+ private flipColors;
137
+ private moveRedLeft;
138
+ private moveRedRight;
139
+ private balance;
140
+ mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey): void;
141
+ map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void;
142
+ keys(): TKey[];
143
+ /**
144
+ * Depth-first traversal with custom action; if action returns
145
+ * false, traversal is halted.
146
+ * @param action - action to apply to each node
147
+ */
148
+ walk(actions: RBNodeActions<TKey, TData>): void;
149
+ walkBackward(actions: RBNodeActions<TKey, TData>): void;
150
+ private nodeWalk;
151
+ private nodeWalkBackward;
152
+ private nodeMap;
153
+ }
154
+ //# sourceMappingURL=rbTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbTree.d.ts","sourceRoot":"","sources":["../../src/collections/rbTree.ts"],"names":[],"mappings":"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"}