@fluidframework/merge-tree 2.1.0-276985 → 2.1.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.
- package/.eslintrc.cjs +2 -4
- package/CHANGELOG.md +15 -0
- package/README.md +109 -1
- package/api-extractor/api-extractor.current.json +5 -0
- package/api-extractor/api-extractor.legacy.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/merge-tree.legacy.alpha.api.md +10 -22
- package/api-report/merge-tree.legacy.public.api.md +9 -0
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +1 -1
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.d.ts.map +1 -1
- package/dist/attributionCollection.js +65 -17
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.d.ts +2 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +10 -3
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +65 -37
- package/dist/client.js.map +1 -1
- package/dist/collections/list.d.ts.map +1 -1
- package/dist/collections/list.js +5 -2
- package/dist/collections/list.js.map +1 -1
- package/dist/collections/rbTree.d.ts +2 -2
- package/dist/collections/rbTree.d.ts.map +1 -1
- package/dist/collections/rbTree.js +23 -35
- package/dist/collections/rbTree.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +4 -1
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/localReference.d.ts +16 -6
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +31 -20
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts +0 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +127 -112
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +6 -5
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +29 -20
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.js +3 -3
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.d.ts +6 -1
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +5 -0
- package/dist/opBuilder.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/ordinal.d.ts.map +1 -1
- package/dist/ordinal.js +7 -0
- package/dist/ordinal.js.map +1 -1
- package/dist/partialLengths.d.ts +4 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +101 -53
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +4 -1
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -6
- package/dist/perspective.js.map +1 -1
- package/dist/properties.d.ts +13 -10
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +22 -11
- package/dist/properties.js.map +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/referencePositions.d.ts +7 -0
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +7 -0
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.d.ts +6 -0
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +50 -21
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.d.ts.map +1 -1
- package/dist/segmentGroupCollection.js +2 -0
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +7 -3
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +20 -15
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js +10 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +14 -10
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +20 -8
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +4 -2
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +8 -1
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/sortedSet.d.ts.map +1 -1
- package/dist/sortedSet.js +4 -0
- package/dist/sortedSet.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +1 -0
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +3 -1
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +69 -68
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js +29 -27
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts +1 -4
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +32 -30
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +5 -5
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.apis.spec.d.ts.map +1 -1
- package/dist/test/client.apis.spec.js +5 -7
- package/dist/test/client.apis.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +125 -103
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +18 -10
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +13 -8
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.js +4 -2
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +10 -10
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +111 -104
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +14 -10
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js +12 -12
- package/dist/test/client.rebasePosition.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +12 -9
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +11 -10
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +87 -84
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +3 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +122 -112
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +7 -7
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js +14 -14
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +3 -3
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/dirname.cjs +1 -0
- package/dist/test/dirname.cjs.map +1 -1
- package/dist/test/dirname.d.cts.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +7 -7
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +87 -87
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +24 -24
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +23 -23
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +3 -3
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js +10 -10
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +28 -16
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js +9 -5
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +165 -165
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.js +20 -21
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +7 -7
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js +13 -13
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +9 -9
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.js +10 -4
- package/dist/test/ordinal.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/properties.spec.js +15 -15
- package/dist/test/properties.spec.js.map +1 -1
- package/dist/test/reconnectHelper.d.ts +4 -4
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +28 -20
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +35 -29
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +11 -10
- package/dist/test/revertibleFarm.spec.js.map +1 -1
- package/dist/test/revertibles.spec.d.ts.map +1 -1
- package/dist/test/revertibles.spec.js +96 -57
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +17 -17
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +5 -5
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +6 -6
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +18 -13
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +22 -18
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +6 -5
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +30 -32
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +39 -38
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testSerializer.d.ts +5 -5
- package/dist/test/testSerializer.d.ts.map +1 -1
- package/dist/test/testSerializer.js +0 -1
- package/dist/test/testSerializer.js.map +1 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +1 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +15 -17
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +1 -1
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js +50 -46
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
- package/dist/test/wordUnitTests.spec.js +10 -10
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/textSegment.d.ts +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +3 -3
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +7 -2
- package/dist/zamboni.js.map +1 -1
- package/internal.d.ts +1 -1
- package/legacy.d.ts +1 -1
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +1 -1
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionCollection.d.ts.map +1 -1
- package/lib/attributionCollection.js +65 -17
- package/lib/attributionCollection.js.map +1 -1
- package/lib/attributionPolicy.d.ts +2 -1
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +10 -3
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.d.ts +3 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +65 -37
- package/lib/client.js.map +1 -1
- package/lib/collections/list.d.ts.map +1 -1
- package/lib/collections/list.js +5 -2
- package/lib/collections/list.js.map +1 -1
- package/lib/collections/rbTree.d.ts +2 -2
- package/lib/collections/rbTree.d.ts.map +1 -1
- package/lib/collections/rbTree.js +23 -35
- package/lib/collections/rbTree.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +4 -1
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/localReference.d.ts +16 -6
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +31 -20
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts +0 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +127 -112
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
- package/lib/mergeTreeNodeWalk.js +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +6 -5
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +29 -20
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/mergeTreeTracking.js +3 -3
- package/lib/mergeTreeTracking.js.map +1 -1
- package/lib/opBuilder.d.ts +6 -1
- package/lib/opBuilder.d.ts.map +1 -1
- package/lib/opBuilder.js +5 -0
- package/lib/opBuilder.js.map +1 -1
- package/lib/ops.d.ts.map +1 -1
- package/lib/ops.js.map +1 -1
- package/lib/ordinal.d.ts.map +1 -1
- package/lib/ordinal.js +7 -0
- package/lib/ordinal.js.map +1 -1
- package/lib/partialLengths.d.ts +4 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +101 -53
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +4 -1
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +7 -6
- package/lib/perspective.js.map +1 -1
- package/lib/properties.d.ts +13 -10
- package/lib/properties.d.ts.map +1 -1
- package/lib/properties.js +22 -11
- package/lib/properties.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/referencePositions.d.ts +7 -0
- package/lib/referencePositions.d.ts.map +1 -1
- package/lib/referencePositions.js +7 -0
- package/lib/referencePositions.js.map +1 -1
- package/lib/revertibles.d.ts +6 -0
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +50 -21
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentGroupCollection.d.ts.map +1 -1
- package/lib/segmentGroupCollection.js +2 -0
- package/lib/segmentGroupCollection.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +7 -3
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +20 -15
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotChunks.d.ts.map +1 -1
- package/lib/snapshotChunks.js +10 -5
- package/lib/snapshotChunks.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +14 -10
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +20 -8
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +4 -2
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js +8 -1
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/sortedSet.d.ts.map +1 -1
- package/lib/sortedSet.js +4 -0
- package/lib/sortedSet.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/Snapshot.perf.spec.js +1 -0
- package/lib/test/Snapshot.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.perf.spec.js +3 -1
- package/lib/test/attributionCollection.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.spec.js +3 -2
- package/lib/test/attributionCollection.spec.js.map +1 -1
- package/lib/test/attributionPolicy.spec.js +3 -1
- package/lib/test/attributionPolicy.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts +1 -4
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +26 -24
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -1
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.apis.spec.d.ts.map +1 -1
- package/lib/test/client.apis.spec.js +4 -6
- package/lib/test/client.apis.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +72 -50
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +18 -10
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +12 -7
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.conflictFarm.spec.js +4 -2
- package/lib/test/client.conflictFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +14 -7
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +13 -9
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.rebasePosition.spec.js +1 -1
- package/lib/test/client.rebasePosition.spec.js.map +1 -1
- package/lib/test/client.reconnectFarm.spec.js +11 -8
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.replay.spec.js +8 -7
- package/lib/test/client.replay.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +14 -11
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +3 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +29 -19
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/client.walkSegments.spec.js +1 -1
- package/lib/test/client.walkSegments.spec.js.map +1 -1
- package/lib/test/collections.list.spec.js +1 -1
- package/lib/test/collections.list.spec.js.map +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/lib/test/dirname.cjs +1 -0
- package/lib/test/dirname.cjs.map +1 -1
- package/lib/test/dirname.d.cts.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +1 -1
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +8 -8
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +1 -1
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTree.zamboni.spec.js +1 -1
- package/lib/test/mergeTree.zamboni.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +27 -15
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.spec.js +5 -1
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +4 -4
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.deltaCallback.spec.js +2 -3
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +1 -1
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.reconnect.spec.js +1 -1
- package/lib/test/obliterate.reconnect.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +1 -1
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/ordinal.spec.js +7 -1
- package/lib/test/ordinal.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/properties.spec.js +1 -1
- package/lib/test/properties.spec.js.map +1 -1
- package/lib/test/reconnectHelper.d.ts +4 -4
- package/lib/test/reconnectHelper.d.ts.map +1 -1
- package/lib/test/reconnectHelper.js +22 -14
- package/lib/test/reconnectHelper.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +8 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/revertibleFarm.spec.js +8 -7
- package/lib/test/revertibleFarm.spec.js.map +1 -1
- package/lib/test/revertibles.spec.d.ts.map +1 -1
- package/lib/test/revertibles.spec.js +93 -54
- package/lib/test/revertibles.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +1 -1
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/snapshot.spec.js +1 -1
- package/lib/test/snapshot.spec.js.map +1 -1
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/snapshotlegacy.spec.js +10 -5
- package/lib/test/snapshotlegacy.spec.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +6 -2
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +6 -5
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +25 -27
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +37 -36
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testSerializer.d.ts +5 -5
- package/lib/test/testSerializer.d.ts.map +1 -1
- package/lib/test/testSerializer.js +0 -1
- package/lib/test/testSerializer.js.map +1 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +1 -1
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +6 -8
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +1 -1
- package/lib/test/text.js.map +1 -1
- package/lib/test/tracking.spec.js +9 -5
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
- package/lib/test/wordUnitTests.spec.js +9 -9
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/lib/textSegment.d.ts +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js +3 -3
- package/lib/textSegment.js.map +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +7 -2
- package/lib/zamboni.js.map +1 -1
- package/package.json +29 -27
- package/src/MergeTreeTextHelper.ts +2 -2
- package/src/attributionCollection.ts +71 -28
- package/src/attributionPolicy.ts +14 -9
- package/src/client.ts +120 -71
- package/src/collections/list.ts +9 -6
- package/src/collections/rbTree.ts +62 -71
- package/src/endOfTreeSegment.ts +21 -10
- package/src/localReference.ts +61 -43
- package/src/mergeTree.ts +229 -178
- package/src/mergeTreeNodeWalk.ts +2 -1
- package/src/mergeTreeNodes.ts +59 -46
- package/src/mergeTreeTracking.ts +3 -3
- package/src/opBuilder.ts +6 -1
- package/src/ops.ts +5 -0
- package/src/ordinal.ts +8 -1
- package/src/partialLengths.ts +143 -87
- package/src/perspective.ts +10 -7
- package/src/properties.ts +36 -18
- package/src/referencePositions.ts +7 -0
- package/src/revertibles.ts +71 -41
- package/src/segmentGroupCollection.ts +8 -6
- package/src/segmentPropertiesManager.ts +28 -24
- package/src/snapshotChunks.ts +12 -7
- package/src/snapshotLoader.ts +20 -17
- package/src/snapshotV1.ts +36 -18
- package/src/snapshotlegacy.ts +7 -5
- package/src/sortedSegmentSet.ts +9 -3
- package/src/sortedSet.ts +7 -3
- package/src/textSegment.ts +9 -9
- package/src/zamboni.ts +14 -10
- package/tsconfig.json +0 -1
|
@@ -127,10 +127,7 @@ class RedBlackTree {
|
|
|
127
127
|
}
|
|
128
128
|
nodePut(node, key, data, conflict) {
|
|
129
129
|
let _node = node;
|
|
130
|
-
if (
|
|
131
|
-
return this.makeNode(key, data, exports.RBColor.RED, 1);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
130
|
+
if (_node) {
|
|
134
131
|
const cmp = this.compareKeys(key, _node.key);
|
|
135
132
|
if (cmp < 0) {
|
|
136
133
|
_node.left = this.nodePut(_node.left, key, data, conflict);
|
|
@@ -144,7 +141,7 @@ class RedBlackTree {
|
|
|
144
141
|
if (kd.key) {
|
|
145
142
|
_node.key = kd.key;
|
|
146
143
|
}
|
|
147
|
-
_node.data = kd.data
|
|
144
|
+
_node.data = kd.data ?? data;
|
|
148
145
|
}
|
|
149
146
|
else {
|
|
150
147
|
_node.data = data;
|
|
@@ -166,6 +163,9 @@ class RedBlackTree {
|
|
|
166
163
|
}
|
|
167
164
|
return _node;
|
|
168
165
|
}
|
|
166
|
+
else {
|
|
167
|
+
return this.makeNode(key, data, exports.RBColor.RED, 1);
|
|
168
|
+
}
|
|
169
169
|
}
|
|
170
170
|
updateLocal(node) {
|
|
171
171
|
if (this.aug) {
|
|
@@ -246,7 +246,7 @@ class RedBlackTree {
|
|
|
246
246
|
return this.balance(_node);
|
|
247
247
|
}
|
|
248
248
|
/**
|
|
249
|
-
*
|
|
249
|
+
* Finds the largest node that is less than or equal to a given key.
|
|
250
250
|
*/
|
|
251
251
|
floor(key) {
|
|
252
252
|
if (!this.isEmpty()) {
|
|
@@ -264,12 +264,12 @@ class RedBlackTree {
|
|
|
264
264
|
}
|
|
265
265
|
else {
|
|
266
266
|
const rightFloor = this.nodeFloor(node.right, key);
|
|
267
|
-
return rightFloor
|
|
267
|
+
return rightFloor ?? node;
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
/**
|
|
272
|
-
*
|
|
272
|
+
* Finds the smallest node that is greater than or equal to a given key.
|
|
273
273
|
*/
|
|
274
274
|
ceil(key) {
|
|
275
275
|
if (!this.isEmpty()) {
|
|
@@ -287,7 +287,7 @@ class RedBlackTree {
|
|
|
287
287
|
}
|
|
288
288
|
else {
|
|
289
289
|
const leftCeil = this.nodeCeil(node.left, key);
|
|
290
|
-
return leftCeil
|
|
290
|
+
return leftCeil ?? node;
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
293
|
}
|
|
@@ -297,7 +297,7 @@ class RedBlackTree {
|
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
nodeMin(node) {
|
|
300
|
-
return
|
|
300
|
+
return node.left ? this.nodeMin(node.left) : node;
|
|
301
301
|
}
|
|
302
302
|
max() {
|
|
303
303
|
if (this.root) {
|
|
@@ -305,7 +305,7 @@ class RedBlackTree {
|
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
307
|
nodeMax(node) {
|
|
308
|
-
return
|
|
308
|
+
return node.right ? this.nodeMax(node.right) : node;
|
|
309
309
|
}
|
|
310
310
|
rotateRight(node) {
|
|
311
311
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -420,26 +420,20 @@ class RedBlackTree {
|
|
|
420
420
|
nodeWalk(node, actions) {
|
|
421
421
|
let go = true;
|
|
422
422
|
if (node) {
|
|
423
|
-
if (actions.pre) {
|
|
424
|
-
|
|
425
|
-
go = actions.pre(node);
|
|
426
|
-
}
|
|
423
|
+
if (actions.pre && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
424
|
+
go = actions.pre(node);
|
|
427
425
|
}
|
|
428
426
|
if (node.left) {
|
|
429
427
|
go = this.nodeWalk(node.left, actions);
|
|
430
428
|
}
|
|
431
|
-
if (go && actions.infix) {
|
|
432
|
-
|
|
433
|
-
go = actions.infix(node);
|
|
434
|
-
}
|
|
429
|
+
if (go && actions.infix && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
430
|
+
go = actions.infix(node);
|
|
435
431
|
}
|
|
436
432
|
if (go) {
|
|
437
433
|
go = this.nodeWalk(node.right, actions);
|
|
438
434
|
}
|
|
439
|
-
if (go && actions.post) {
|
|
440
|
-
|
|
441
|
-
go = actions.post(node);
|
|
442
|
-
}
|
|
435
|
+
if (go && actions.post && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
436
|
+
go = actions.post(node);
|
|
443
437
|
}
|
|
444
438
|
}
|
|
445
439
|
return go;
|
|
@@ -447,26 +441,20 @@ class RedBlackTree {
|
|
|
447
441
|
nodeWalkBackward(node, actions) {
|
|
448
442
|
let go = true;
|
|
449
443
|
if (node) {
|
|
450
|
-
if (actions.pre) {
|
|
451
|
-
|
|
452
|
-
go = actions.pre(node);
|
|
453
|
-
}
|
|
444
|
+
if (actions.pre && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
445
|
+
go = actions.pre(node);
|
|
454
446
|
}
|
|
455
447
|
if (node.right) {
|
|
456
448
|
go = this.nodeWalkBackward(node.right, actions);
|
|
457
449
|
}
|
|
458
|
-
if (go && actions.infix) {
|
|
459
|
-
|
|
460
|
-
go = actions.infix(node);
|
|
461
|
-
}
|
|
450
|
+
if (go && actions.infix && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
451
|
+
go = actions.infix(node);
|
|
462
452
|
}
|
|
463
453
|
if (go) {
|
|
464
454
|
go = this.nodeWalkBackward(node.left, actions);
|
|
465
455
|
}
|
|
466
|
-
if (go && actions.post) {
|
|
467
|
-
|
|
468
|
-
go = actions.post(node);
|
|
469
|
-
}
|
|
456
|
+
if (go && actions.post && (!!actions.showStructure || node.color === exports.RBColor.BLACK)) {
|
|
457
|
+
go = actions.post(node);
|
|
470
458
|
}
|
|
471
459
|
}
|
|
472
460
|
return go;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbTree.js","sourceRoot":"","sources":["../../src/collections/rbTree.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 * @internal\n */\nexport const RBColor = {\n\tRED: 0,\n\tBLACK: 1,\n} as const;\n\n/**\n * @internal\n */\nexport type RBColor = (typeof RBColor)[keyof typeof RBColor];\n\n/**\n * @internal\n */\nexport interface RBNode<TKey, TData> {\n\tkey: TKey;\n\tdata: TData;\n\tleft: RBNode<TKey, TData> | undefined;\n\tright: RBNode<TKey, TData> | undefined;\n\tcolor: RBColor;\n\tsize: number;\n}\n/**\n * @internal\n */\nexport interface IRBAugmentation<TKey, TData> {\n\tupdate(node: RBNode<TKey, TData>): void;\n}\n/**\n * @internal\n */\nexport interface IRBMatcher<TKey, TData> {\n\tcontinueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n\tmatchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\n/**\n * @internal\n */\nexport interface RBNodeActions<TKey, TData> {\n\tinfix?(node: RBNode<TKey, TData>): boolean;\n\tpre?(node: RBNode<TKey, TData>): boolean;\n\tpost?(node: RBNode<TKey, TData>): boolean;\n\tshowStructure?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface KeyComparer<TKey> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(a: TKey, b: TKey): number;\n}\n\n/**\n * @internal\n */\nexport interface Property<TKey, TData> {\n\tkey: TKey;\n\tdata: TData;\n}\n\n/**\n * @internal\n */\nexport interface PropertyAction<TKey, TData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t<TAccum>(p: Property<TKey, TData>, accum?: TAccum): boolean;\n}\n\n/**\n * @internal\n */\nexport interface QProperty<TKey, TData> {\n\tkey?: TKey;\n\tdata?: TData;\n}\n\n/**\n * @internal\n */\nexport type ConflictAction<TKey, TData> = (\n\tkey: TKey,\n\tcurrentKey: TKey,\n\tdata: TData,\n\tcurrentData: TData,\n) => QProperty<TKey, TData>;\n\n/**\n * @internal\n */\nexport interface SortedDictionary<TKey, TData> extends Dictionary<TKey, TData> {\n\tmax(): Property<TKey, TData> | undefined;\n\tmin(): Property<TKey, TData> | undefined;\n\tmapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t): void;\n}\n\n/**\n * @internal\n */\nexport interface Dictionary<TKey, TData> {\n\tget(key: TKey): Property<TKey, TData> | undefined;\n\tput(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void;\n\tremove(key: TKey): void;\n\tmap<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void;\n}\n\n/**\n * @internal\n */\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n\tprivate root: RBNode<TKey, TData> | undefined;\n\n\tconstructor(\n\t\tprivate readonly compareKeys: KeyComparer<TKey>,\n\t\tprivate readonly aug?: IRBAugmentation<TKey, TData>,\n\t) {}\n\n\tprivate makeNode(key: TKey, data: TData, color: RBColor, size: number): RBNode<TKey, TData> {\n\t\treturn { key, data, color, size } as any as RBNode<TKey, TData>;\n\t}\n\n\tprivate isRed(node: RBNode<TKey, TData> | undefined) {\n\t\treturn !!node && node.color === RBColor.RED;\n\t}\n\n\tprivate nodeSize(node: RBNode<TKey, TData> | undefined) {\n\t\treturn node ? node.size : 0;\n\t}\n\tpublic size() {\n\t\treturn this.nodeSize(this.root);\n\t}\n\tpublic isEmpty() {\n\t\treturn !this.root;\n\t}\n\tpublic get(key: TKey) {\n\t\tif (key !== undefined) {\n\t\t\treturn this.nodeGet(this.root, key);\n\t\t}\n\t}\n\tprivate nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {\n\t\tlet _node = node;\n\t\twhile (_node) {\n\t\t\tconst cmp = this.compareKeys(key, _node.key);\n\t\t\tif (cmp < 0) {\n\t\t\t\t_node = _node.left;\n\t\t\t} else if (cmp > 0) {\n\t\t\t\t_node = _node.right;\n\t\t\t} else {\n\t\t\t\treturn _node;\n\t\t\t}\n\t\t}\n\t}\n\tprivate contains(key: TKey) {\n\t\treturn this.get(key);\n\t}\n\n\tpublic gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {\n\t\tconst results = [] as RBNode<TKey, TData>[];\n\t\tif (key !== undefined) {\n\t\t\tthis.nodeGather(this.root, results, key, matcher);\n\t\t}\n\t\treturn results;\n\t}\n\n\tprivate nodeGather(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tresults: RBNode<TKey, TData>[],\n\t\tkey: TKey,\n\t\tmatcher: IRBMatcher<TKey, TData>,\n\t) {\n\t\tif (node) {\n\t\t\tif (matcher.continueSubtree(node.left, key)) {\n\t\t\t\tthis.nodeGather(node.left, results, key, matcher);\n\t\t\t}\n\t\t\tif (matcher.matchNode(node, key)) {\n\t\t\t\tresults.push(node);\n\t\t\t}\n\t\t\tif (matcher.continueSubtree(node.right, key)) {\n\t\t\t\tthis.nodeGather(node.right, results, key, matcher);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic walkExactMatchesForward(\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t) {\n\t\tthis.nodeWalkExactMatchesForward(\n\t\t\tthis.root,\n\t\t\tcompareFn,\n\t\t\tactionFn,\n\t\t\tcontinueLeftFn,\n\t\t\tcontinueRightFn,\n\t\t);\n\t}\n\n\tprivate nodeWalkExactMatchesForward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t) {\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\t\tconst result: number = compareFn(node);\n\t\tif (continueLeftFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesForward(\n\t\t\t\tnode.left,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t\tif (result === 0) {\n\t\t\tactionFn(node);\n\t\t}\n\t\tif (continueRightFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesForward(\n\t\t\t\tnode.right,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic walkExactMatchesBackward(\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t) {\n\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\tthis.root,\n\t\t\tcompareFn,\n\t\t\tactionFn,\n\t\t\tcontinueLeftFn,\n\t\t\tcontinueRightFn,\n\t\t);\n\t}\n\n\tprivate nodeWalkExactMatchesBackward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (cmp: number) => boolean,\n\t\tcontinueRightFn: (cmp: number) => boolean,\n\t) {\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\t\tconst result: number = compareFn(node);\n\t\tif (continueRightFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\t\tnode.right,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t\tif (result === 0) {\n\t\t\tactionFn(node);\n\t\t}\n\t\tif (continueLeftFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\t\tnode.left,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {\n\t\tif (key !== undefined) {\n\t\t\tif (data === undefined) {\n\t\t\t\tthis.remove(key);\n\t\t\t} else {\n\t\t\t\tthis.root = this.nodePut(this.root, key, data, conflict);\n\t\t\t\tthis.root.color = RBColor.BLACK;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate nodePut(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t\tdata: TData,\n\t\tconflict?: ConflictAction<TKey, TData>,\n\t) {\n\t\tlet _node = node;\n\t\tif (!_node) {\n\t\t\treturn this.makeNode(key, data, RBColor.RED, 1);\n\t\t} else {\n\t\t\tconst cmp = this.compareKeys(key, _node.key);\n\t\t\tif (cmp < 0) {\n\t\t\t\t_node.left = this.nodePut(_node.left, key, data, conflict);\n\t\t\t} else if (cmp > 0) {\n\t\t\t\t_node.right = this.nodePut(_node.right, key, data, conflict);\n\t\t\t} else {\n\t\t\t\tif (conflict) {\n\t\t\t\t\tconst kd = conflict(key, _node.key, data, _node.data);\n\t\t\t\t\tif (kd.key) {\n\t\t\t\t\t\t_node.key = kd.key;\n\t\t\t\t\t}\n\t\t\t\t\t_node.data = kd.data ? kd.data : data;\n\t\t\t\t} else {\n\t\t\t\t\t_node.data = data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isRed(_node.right) && !this.isRed(_node.left)) {\n\t\t\t\t_node = this.rotateLeft(_node);\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n\t\t\t\t_node = this.rotateRight(_node);\n\t\t\t}\n\t\t\tif (this.isRed(_node.left) && this.isRed(_node.right)) {\n\t\t\t\tthis.flipColors(_node);\n\t\t\t}\n\t\t\t_node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n\t\t\tif (this.aug) {\n\t\t\t\tthis.updateLocal(_node);\n\t\t\t}\n\t\t\treturn _node;\n\t\t}\n\t}\n\n\tprivate updateLocal(node: RBNode<TKey, TData>) {\n\t\tif (this.aug) {\n\t\t\tif (this.isRed(node.left)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tthis.aug.update(node.left!);\n\t\t\t}\n\t\t\tif (this.isRed(node.right)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tthis.aug.update(node.right!);\n\t\t\t}\n\t\t\tthis.aug.update(node);\n\t\t}\n\t}\n\n\tprivate nodeRemoveMin(node: RBNode<TKey, TData>) {\n\t\tlet _node = node;\n\t\tif (_node.left) {\n\t\t\tif (!this.isRed(_node.left) && !this.isRed(_node.left.left)) {\n\t\t\t\t_node = this.moveRedLeft(_node);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.left = this.nodeRemoveMin(_node.left!);\n\t\t\treturn this.balance(_node);\n\t\t}\n\t}\n\n\tpublic remove(key: TKey) {\n\t\tif (key !== undefined) {\n\t\t\tif (!this.contains(key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.removeExisting(key);\n\t\t}\n\t\t// TODO: error on undefined key\n\t}\n\n\tpublic removeExisting(key: TKey) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (!this.isRed(this.root!.left) && !this.isRed(this.root!.right)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tthis.root!.color = RBColor.RED;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.root = this.nodeRemove(this.root!, key);\n\t}\n\n\tprivate nodeRemove(node: RBNode<TKey, TData>, key: TKey) {\n\t\tlet _node = node;\n\t\tif (this.compareKeys(key, _node.key) < 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (!this.isRed(_node.left) && !this.isRed(_node.left!.left)) {\n\t\t\t\t_node = this.moveRedLeft(_node);\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.left = this.nodeRemove(_node.left!, key);\n\t\t} else {\n\t\t\tif (this.isRed(_node.left)) {\n\t\t\t\t_node = this.rotateRight(_node);\n\t\t\t}\n\t\t\tif (this.compareKeys(key, _node.key) === 0 && !_node.right) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (!this.isRed(_node.right) && !this.isRed(_node.right!.left)) {\n\t\t\t\t_node = this.moveRedRight(_node);\n\t\t\t}\n\t\t\tif (this.compareKeys(key, _node.key) === 0) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst subtreeMin = this.nodeMin(_node.right!);\n\t\t\t\t_node.key = subtreeMin.key;\n\t\t\t\t_node.data = subtreeMin.data;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t_node.right = this.nodeRemoveMin(_node.right!);\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t_node.right = this.nodeRemove(_node.right!, key);\n\t\t\t}\n\t\t}\n\t\treturn this.balance(_node);\n\t}\n\n\t/**\n\t * @returns The largest node in this tree which compares less than or equal to `key`\n\t */\n\tpublic floor(key: TKey) {\n\t\tif (!this.isEmpty()) {\n\t\t\treturn this.nodeFloor(this.root, key);\n\t\t}\n\t}\n\n\tprivate nodeFloor(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t): RBNode<TKey, TData> | undefined {\n\t\tif (node) {\n\t\t\tconst cmp = this.compareKeys(key, node.key);\n\t\t\tif (cmp === 0) {\n\t\t\t\treturn node;\n\t\t\t} else if (cmp < 0) {\n\t\t\t\treturn this.nodeFloor(node.left, key);\n\t\t\t} else {\n\t\t\t\tconst rightFloor = this.nodeFloor(node.right, key);\n\t\t\t\treturn rightFloor ? rightFloor : node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @returns The smallest node in this tree which compares greater than or equal to `key`\n\t */\n\tpublic ceil(key: TKey) {\n\t\tif (!this.isEmpty()) {\n\t\t\treturn this.nodeCeil(this.root, key);\n\t\t}\n\t}\n\n\tprivate nodeCeil(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t): RBNode<TKey, TData> | undefined {\n\t\tif (node) {\n\t\t\tconst cmp = this.compareKeys(key, node.key);\n\t\t\tif (cmp === 0) {\n\t\t\t\treturn node;\n\t\t\t} else if (cmp > 0) {\n\t\t\t\treturn this.nodeCeil(node.right, key);\n\t\t\t} else {\n\t\t\t\tconst leftCeil = this.nodeCeil(node.left, key);\n\t\t\t\treturn leftCeil ? leftCeil : node;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic min() {\n\t\tif (this.root) {\n\t\t\treturn this.nodeMin(this.root);\n\t\t}\n\t}\n\n\tprivate nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\treturn !node.left ? node : this.nodeMin(node.left);\n\t}\n\n\tpublic max() {\n\t\tif (this.root) {\n\t\t\treturn this.nodeMax(this.root);\n\t\t}\n\t}\n\n\tprivate nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\treturn !node.right ? node : this.nodeMax(node.right);\n\t}\n\n\tprivate rotateRight(node: RBNode<TKey, TData>) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst leftChild = node.left!;\n\t\tnode.left = leftChild.right;\n\t\tleftChild.right = node;\n\t\tleftChild.color = leftChild.right.color;\n\t\tleftChild.right.color = RBColor.RED;\n\t\tleftChild.size = node.size;\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.updateLocal(node);\n\t\t\tthis.updateLocal(leftChild);\n\t\t}\n\t\treturn leftChild;\n\t}\n\n\tprivate rotateLeft(node: RBNode<TKey, TData>) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst rightChild = node.right!;\n\t\tnode.right = rightChild.left;\n\t\trightChild.left = node;\n\t\trightChild.color = rightChild.left.color;\n\t\trightChild.left.color = RBColor.RED;\n\t\trightChild.size = node.size;\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.updateLocal(node);\n\t\t\tthis.updateLocal(rightChild);\n\t\t}\n\t\treturn rightChild;\n\t}\n\n\tprivate oppositeColor(c: RBColor) {\n\t\treturn c === RBColor.BLACK ? RBColor.RED : RBColor.BLACK;\n\t}\n\n\tprivate flipColors(node: RBNode<TKey, TData>) {\n\t\tnode.color = this.oppositeColor(node.color);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tnode.left!.color = this.oppositeColor(node.left!.color);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tnode.right!.color = this.oppositeColor(node.right!.color);\n\t}\n\n\tprivate moveRedLeft(node: RBNode<TKey, TData>) {\n\t\tlet _node = node;\n\t\tthis.flipColors(_node);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(_node.right!.left)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.right = this.rotateRight(_node.right!);\n\t\t\t_node = this.rotateLeft(_node);\n\t\t\tthis.flipColors(_node);\n\t\t}\n\t\treturn _node;\n\t}\n\n\tprivate moveRedRight(node: RBNode<TKey, TData>) {\n\t\tlet _node = node;\n\t\tthis.flipColors(_node);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(_node.left!.left)) {\n\t\t\t_node = this.rotateRight(_node);\n\t\t\tthis.flipColors(_node);\n\t\t}\n\t\treturn _node;\n\t}\n\n\tprivate balance(input: RBNode<TKey, TData>) {\n\t\tlet node: RBNode<TKey, TData> | undefined = input;\n\t\tif (this.isRed(node.right)) {\n\t\t\tnode = this.rotateLeft(node);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(node.left) && this.isRed(node.left!.left)) {\n\t\t\tnode = this.rotateRight(node);\n\t\t}\n\t\tif (this.isRed(node.left) && this.isRed(node.right)) {\n\t\t\tthis.flipColors(node);\n\t\t}\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.aug.update(node);\n\t\t}\n\t\treturn node;\n\t}\n\n\tpublic mapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t) {\n\t\tthis.nodeMap(this.root, action, accum, start, end);\n\t}\n\n\tpublic map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n\t\t// TODO: optimize to avoid comparisons\n\t\tthis.nodeMap(this.root, action, accum);\n\t}\n\n\tpublic keys() {\n\t\tconst keyList: TKey[] = [];\n\t\tconst actions: RBNodeActions<TKey, TData> = {\n\t\t\tshowStructure: true,\n\t\t\tinfix: (node) => {\n\t\t\t\tkeyList.push(node.key);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t};\n\t\tthis.walk(actions);\n\t\treturn keyList;\n\t}\n\n\t/**\n\t * Depth-first traversal with custom action; if action returns\n\t * false, traversal is halted.\n\t * @param action - action to apply to each node\n\t */\n\tpublic walk(actions: RBNodeActions<TKey, TData>) {\n\t\tthis.nodeWalk(this.root, actions);\n\t}\n\n\tpublic walkBackward(actions: RBNodeActions<TKey, TData>) {\n\t\tthis.nodeWalkBackward(this.root, actions);\n\t}\n\n\tprivate nodeWalk(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tactions: RBNodeActions<TKey, TData>,\n\t): boolean {\n\t\tlet go = true;\n\t\tif (node) {\n\t\t\tif (actions.pre) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.pre(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.left) {\n\t\t\t\tgo = this.nodeWalk(node.left, actions);\n\t\t\t}\n\t\t\tif (go && actions.infix) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.infix(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (go) {\n\t\t\t\tgo = this.nodeWalk(node.right, actions);\n\t\t\t}\n\t\t\tif (go && actions.post) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.post(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn go;\n\t}\n\n\tprivate nodeWalkBackward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tactions: RBNodeActions<TKey, TData>,\n\t): boolean {\n\t\tlet go = true;\n\t\tif (node) {\n\t\t\tif (actions.pre) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.pre(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.right) {\n\t\t\t\tgo = this.nodeWalkBackward(node.right, actions);\n\t\t\t}\n\t\t\tif (go && actions.infix) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.infix(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (go) {\n\t\t\t\tgo = this.nodeWalkBackward(node.left, actions);\n\t\t\t}\n\t\t\tif (go && actions.post) {\n\t\t\t\tif (!!actions.showStructure || node.color === RBColor.BLACK) {\n\t\t\t\t\tgo = actions.post(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn go;\n\t}\n\n\tprivate nodeMap<TAccum>(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t): boolean {\n\t\tlet _start = start;\n\t\tlet _end = end;\n\t\tif (!node) {\n\t\t\treturn true;\n\t\t}\n\t\tif (_start === undefined) {\n\t\t\t_start = this.nodeMin(node).key;\n\t\t}\n\t\tif (_end === undefined) {\n\t\t\t_end = this.nodeMax(node).key;\n\t\t}\n\t\tconst cmpStart = this.compareKeys(_start, node.key);\n\t\tconst cmpEnd = this.compareKeys(_end, node.key);\n\t\tlet go = true;\n\t\tif (cmpStart < 0) {\n\t\t\tgo = this.nodeMap(node.left, action, accum, _start, _end);\n\t\t}\n\t\tif (go && cmpStart <= 0 && cmpEnd >= 0) {\n\t\t\t// REVIEW: test for black node here\n\t\t\tgo = action(node, accum);\n\t\t}\n\t\tif (go && cmpEnd > 0) {\n\t\t\tgo = this.nodeMap(node.right, action, accum, _start, _end);\n\t\t}\n\t\treturn go;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rbTree.js","sourceRoot":"","sources":["../../src/collections/rbTree.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 * @internal\n */\nexport const RBColor = {\n\tRED: 0,\n\tBLACK: 1,\n} as const;\n\n/**\n * @internal\n */\nexport type RBColor = (typeof RBColor)[keyof typeof RBColor];\n\n/**\n * @internal\n */\nexport interface RBNode<TKey, TData> {\n\tkey: TKey;\n\tdata: TData;\n\tleft: RBNode<TKey, TData> | undefined;\n\tright: RBNode<TKey, TData> | undefined;\n\tcolor: RBColor;\n\tsize: number;\n}\n/**\n * @internal\n */\nexport interface IRBAugmentation<TKey, TData> {\n\tupdate(node: RBNode<TKey, TData>): void;\n}\n/**\n * @internal\n */\nexport interface IRBMatcher<TKey, TData> {\n\tcontinueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n\tmatchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\n/**\n * @internal\n */\nexport interface RBNodeActions<TKey, TData> {\n\tinfix?(node: RBNode<TKey, TData>): boolean;\n\tpre?(node: RBNode<TKey, TData>): boolean;\n\tpost?(node: RBNode<TKey, TData>): boolean;\n\tshowStructure?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface KeyComparer<TKey> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(a: TKey, b: TKey): number;\n}\n\n/**\n * @internal\n */\nexport interface Property<TKey, TData> {\n\tkey: TKey;\n\tdata: TData;\n}\n\n/**\n * @internal\n */\nexport interface PropertyAction<TKey, TData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t<TAccum>(p: Property<TKey, TData>, accum?: TAccum): boolean;\n}\n\n/**\n * @internal\n */\nexport interface QProperty<TKey, TData> {\n\tkey?: TKey;\n\tdata?: TData;\n}\n\n/**\n * @internal\n */\nexport type ConflictAction<TKey, TData> = (\n\tkey: TKey,\n\tcurrentKey: TKey,\n\tdata: TData,\n\tcurrentData: TData,\n) => QProperty<TKey, TData>;\n\n/**\n * @internal\n */\nexport interface SortedDictionary<TKey, TData> extends Dictionary<TKey, TData> {\n\tmax(): Property<TKey, TData> | undefined;\n\tmin(): Property<TKey, TData> | undefined;\n\tmapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t): void;\n}\n\n/**\n * @internal\n */\nexport interface Dictionary<TKey, TData> {\n\tget(key: TKey): Property<TKey, TData> | undefined;\n\tput(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void;\n\tremove(key: TKey): void;\n\tmap<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void;\n}\n\n/**\n * @internal\n */\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n\tprivate root: RBNode<TKey, TData> | undefined;\n\n\tconstructor(\n\t\tprivate readonly compareKeys: KeyComparer<TKey>,\n\t\tprivate readonly aug?: IRBAugmentation<TKey, TData>,\n\t) {}\n\n\tprivate makeNode(key: TKey, data: TData, color: RBColor, size: number): RBNode<TKey, TData> {\n\t\treturn { key, data, color, size } as unknown as RBNode<TKey, TData>;\n\t}\n\n\tprivate isRed(node: RBNode<TKey, TData> | undefined): boolean {\n\t\treturn !!node && node.color === RBColor.RED;\n\t}\n\n\tprivate nodeSize(node: RBNode<TKey, TData> | undefined): number {\n\t\treturn node ? node.size : 0;\n\t}\n\tpublic size(): number {\n\t\treturn this.nodeSize(this.root);\n\t}\n\tpublic isEmpty(): boolean {\n\t\treturn !this.root;\n\t}\n\tpublic get(key: TKey): RBNode<TKey, TData> | undefined {\n\t\tif (key !== undefined) {\n\t\t\treturn this.nodeGet(this.root, key);\n\t\t}\n\t}\n\tprivate nodeGet(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t): RBNode<TKey, TData> | undefined {\n\t\tlet _node = node;\n\t\twhile (_node) {\n\t\t\tconst cmp = this.compareKeys(key, _node.key);\n\t\t\tif (cmp < 0) {\n\t\t\t\t_node = _node.left;\n\t\t\t} else if (cmp > 0) {\n\t\t\t\t_node = _node.right;\n\t\t\t} else {\n\t\t\t\treturn _node;\n\t\t\t}\n\t\t}\n\t}\n\tprivate contains(key: TKey): RBNode<TKey, TData> | undefined {\n\t\treturn this.get(key);\n\t}\n\n\tpublic gather(key: TKey, matcher: IRBMatcher<TKey, TData>): RBNode<TKey, TData>[] {\n\t\tconst results = [] as RBNode<TKey, TData>[];\n\t\tif (key !== undefined) {\n\t\t\tthis.nodeGather(this.root, results, key, matcher);\n\t\t}\n\t\treturn results;\n\t}\n\n\tprivate nodeGather(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tresults: RBNode<TKey, TData>[],\n\t\tkey: TKey,\n\t\tmatcher: IRBMatcher<TKey, TData>,\n\t): void {\n\t\tif (node) {\n\t\t\tif (matcher.continueSubtree(node.left, key)) {\n\t\t\t\tthis.nodeGather(node.left, results, key, matcher);\n\t\t\t}\n\t\t\tif (matcher.matchNode(node, key)) {\n\t\t\t\tresults.push(node);\n\t\t\t}\n\t\t\tif (matcher.continueSubtree(node.right, key)) {\n\t\t\t\tthis.nodeGather(node.right, results, key, matcher);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic walkExactMatchesForward(\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t): void {\n\t\tthis.nodeWalkExactMatchesForward(\n\t\t\tthis.root,\n\t\t\tcompareFn,\n\t\t\tactionFn,\n\t\t\tcontinueLeftFn,\n\t\t\tcontinueRightFn,\n\t\t);\n\t}\n\n\tprivate nodeWalkExactMatchesForward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t): void {\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\t\tconst result: number = compareFn(node);\n\t\tif (continueLeftFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesForward(\n\t\t\t\tnode.left,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t\tif (result === 0) {\n\t\t\tactionFn(node);\n\t\t}\n\t\tif (continueRightFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesForward(\n\t\t\t\tnode.right,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic walkExactMatchesBackward(\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (number: number) => boolean,\n\t\tcontinueRightFn: (number: number) => boolean,\n\t): void {\n\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\tthis.root,\n\t\t\tcompareFn,\n\t\t\tactionFn,\n\t\t\tcontinueLeftFn,\n\t\t\tcontinueRightFn,\n\t\t);\n\t}\n\n\tprivate nodeWalkExactMatchesBackward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tcompareFn: (node: RBNode<TKey, TData>) => number,\n\t\tactionFn: (node: RBNode<TKey, TData>) => void,\n\t\tcontinueLeftFn: (cmp: number) => boolean,\n\t\tcontinueRightFn: (cmp: number) => boolean,\n\t): void {\n\t\tif (!node) {\n\t\t\treturn;\n\t\t}\n\t\tconst result: number = compareFn(node);\n\t\tif (continueRightFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\t\tnode.right,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t\tif (result === 0) {\n\t\t\tactionFn(node);\n\t\t}\n\t\tif (continueLeftFn(result)) {\n\t\t\tthis.nodeWalkExactMatchesBackward(\n\t\t\t\tnode.left,\n\t\t\t\tcompareFn,\n\t\t\t\tactionFn,\n\t\t\t\tcontinueLeftFn,\n\t\t\t\tcontinueRightFn,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void {\n\t\tif (key !== undefined) {\n\t\t\tif (data === undefined) {\n\t\t\t\tthis.remove(key);\n\t\t\t} else {\n\t\t\t\tthis.root = this.nodePut(this.root, key, data, conflict);\n\t\t\t\tthis.root.color = RBColor.BLACK;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate nodePut(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t\tdata: TData,\n\t\tconflict?: ConflictAction<TKey, TData>,\n\t): RBNode<TKey, TData> {\n\t\tlet _node = node;\n\t\tif (_node) {\n\t\t\tconst cmp = this.compareKeys(key, _node.key);\n\t\t\tif (cmp < 0) {\n\t\t\t\t_node.left = this.nodePut(_node.left, key, data, conflict);\n\t\t\t} else if (cmp > 0) {\n\t\t\t\t_node.right = this.nodePut(_node.right, key, data, conflict);\n\t\t\t} else {\n\t\t\t\tif (conflict) {\n\t\t\t\t\tconst kd = conflict(key, _node.key, data, _node.data);\n\t\t\t\t\tif (kd.key) {\n\t\t\t\t\t\t_node.key = kd.key;\n\t\t\t\t\t}\n\t\t\t\t\t_node.data = kd.data ?? data;\n\t\t\t\t} else {\n\t\t\t\t\t_node.data = data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isRed(_node.right) && !this.isRed(_node.left)) {\n\t\t\t\t_node = this.rotateLeft(_node);\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n\t\t\t\t_node = this.rotateRight(_node);\n\t\t\t}\n\t\t\tif (this.isRed(_node.left) && this.isRed(_node.right)) {\n\t\t\t\tthis.flipColors(_node);\n\t\t\t}\n\t\t\t_node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n\t\t\tif (this.aug) {\n\t\t\t\tthis.updateLocal(_node);\n\t\t\t}\n\t\t\treturn _node;\n\t\t} else {\n\t\t\treturn this.makeNode(key, data, RBColor.RED, 1);\n\t\t}\n\t}\n\n\tprivate updateLocal(node: RBNode<TKey, TData>): void {\n\t\tif (this.aug) {\n\t\t\tif (this.isRed(node.left)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tthis.aug.update(node.left!);\n\t\t\t}\n\t\t\tif (this.isRed(node.right)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tthis.aug.update(node.right!);\n\t\t\t}\n\t\t\tthis.aug.update(node);\n\t\t}\n\t}\n\n\tprivate nodeRemoveMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> | undefined {\n\t\tlet _node = node;\n\t\tif (_node.left) {\n\t\t\tif (!this.isRed(_node.left) && !this.isRed(_node.left.left)) {\n\t\t\t\t_node = this.moveRedLeft(_node);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.left = this.nodeRemoveMin(_node.left!);\n\t\t\treturn this.balance(_node);\n\t\t}\n\t}\n\n\tpublic remove(key: TKey): void {\n\t\tif (key !== undefined) {\n\t\t\tif (!this.contains(key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.removeExisting(key);\n\t\t}\n\t\t// TODO: error on undefined key\n\t}\n\n\tpublic removeExisting(key: TKey): void {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (!this.isRed(this.root!.left) && !this.isRed(this.root!.right)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tthis.root!.color = RBColor.RED;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.root = this.nodeRemove(this.root!, key);\n\t}\n\n\tprivate nodeRemove(node: RBNode<TKey, TData>, key: TKey): RBNode<TKey, TData> | undefined {\n\t\tlet _node = node;\n\t\tif (this.compareKeys(key, _node.key) < 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (!this.isRed(_node.left) && !this.isRed(_node.left!.left)) {\n\t\t\t\t_node = this.moveRedLeft(_node);\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.left = this.nodeRemove(_node.left!, key);\n\t\t} else {\n\t\t\tif (this.isRed(_node.left)) {\n\t\t\t\t_node = this.rotateRight(_node);\n\t\t\t}\n\t\t\tif (this.compareKeys(key, _node.key) === 0 && !_node.right) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tif (!this.isRed(_node.right) && !this.isRed(_node.right!.left)) {\n\t\t\t\t_node = this.moveRedRight(_node);\n\t\t\t}\n\t\t\tif (this.compareKeys(key, _node.key) === 0) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst subtreeMin = this.nodeMin(_node.right!);\n\t\t\t\t_node.key = subtreeMin.key;\n\t\t\t\t_node.data = subtreeMin.data;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t_node.right = this.nodeRemoveMin(_node.right!);\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t_node.right = this.nodeRemove(_node.right!, key);\n\t\t\t}\n\t\t}\n\t\treturn this.balance(_node);\n\t}\n\n\t/**\n\t * Finds the largest node that is less than or equal to a given key.\n\t */\n\tpublic floor(key: TKey): RBNode<TKey, TData> | undefined {\n\t\tif (!this.isEmpty()) {\n\t\t\treturn this.nodeFloor(this.root, key);\n\t\t}\n\t}\n\n\tprivate nodeFloor(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t): RBNode<TKey, TData> | undefined {\n\t\tif (node) {\n\t\t\tconst cmp = this.compareKeys(key, node.key);\n\t\t\tif (cmp === 0) {\n\t\t\t\treturn node;\n\t\t\t} else if (cmp < 0) {\n\t\t\t\treturn this.nodeFloor(node.left, key);\n\t\t\t} else {\n\t\t\t\tconst rightFloor = this.nodeFloor(node.right, key);\n\t\t\t\treturn rightFloor ?? node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Finds the smallest node that is greater than or equal to a given key.\n\t */\n\tpublic ceil(key: TKey): RBNode<TKey, TData> | undefined {\n\t\tif (!this.isEmpty()) {\n\t\t\treturn this.nodeCeil(this.root, key);\n\t\t}\n\t}\n\n\tprivate nodeCeil(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tkey: TKey,\n\t): RBNode<TKey, TData> | undefined {\n\t\tif (node) {\n\t\t\tconst cmp = this.compareKeys(key, node.key);\n\t\t\tif (cmp === 0) {\n\t\t\t\treturn node;\n\t\t\t} else if (cmp > 0) {\n\t\t\t\treturn this.nodeCeil(node.right, key);\n\t\t\t} else {\n\t\t\t\tconst leftCeil = this.nodeCeil(node.left, key);\n\t\t\t\treturn leftCeil ?? node;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic min(): RBNode<TKey, TData> | undefined {\n\t\tif (this.root) {\n\t\t\treturn this.nodeMin(this.root);\n\t\t}\n\t}\n\n\tprivate nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\treturn node.left ? this.nodeMin(node.left) : node;\n\t}\n\n\tpublic max(): RBNode<TKey, TData> | undefined {\n\t\tif (this.root) {\n\t\t\treturn this.nodeMax(this.root);\n\t\t}\n\t}\n\n\tprivate nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\treturn node.right ? this.nodeMax(node.right) : node;\n\t}\n\n\tprivate rotateRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst leftChild = node.left!;\n\t\tnode.left = leftChild.right;\n\t\tleftChild.right = node;\n\t\tleftChild.color = leftChild.right.color;\n\t\tleftChild.right.color = RBColor.RED;\n\t\tleftChild.size = node.size;\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.updateLocal(node);\n\t\t\tthis.updateLocal(leftChild);\n\t\t}\n\t\treturn leftChild;\n\t}\n\n\tprivate rotateLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst rightChild = node.right!;\n\t\tnode.right = rightChild.left;\n\t\trightChild.left = node;\n\t\trightChild.color = rightChild.left.color;\n\t\trightChild.left.color = RBColor.RED;\n\t\trightChild.size = node.size;\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.updateLocal(node);\n\t\t\tthis.updateLocal(rightChild);\n\t\t}\n\t\treturn rightChild;\n\t}\n\n\tprivate oppositeColor(c: RBColor): RBColor {\n\t\treturn c === RBColor.BLACK ? RBColor.RED : RBColor.BLACK;\n\t}\n\n\tprivate flipColors(node: RBNode<TKey, TData>): void {\n\t\tnode.color = this.oppositeColor(node.color);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tnode.left!.color = this.oppositeColor(node.left!.color);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tnode.right!.color = this.oppositeColor(node.right!.color);\n\t}\n\n\tprivate moveRedLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\tlet _node = node;\n\t\tthis.flipColors(_node);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(_node.right!.left)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t_node.right = this.rotateRight(_node.right!);\n\t\t\t_node = this.rotateLeft(_node);\n\t\t\tthis.flipColors(_node);\n\t\t}\n\t\treturn _node;\n\t}\n\n\tprivate moveRedRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\tlet _node = node;\n\t\tthis.flipColors(_node);\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(_node.left!.left)) {\n\t\t\t_node = this.rotateRight(_node);\n\t\t\tthis.flipColors(_node);\n\t\t}\n\t\treturn _node;\n\t}\n\n\tprivate balance(input: RBNode<TKey, TData>): RBNode<TKey, TData> {\n\t\tlet node: RBNode<TKey, TData> | undefined = input;\n\t\tif (this.isRed(node.right)) {\n\t\t\tnode = this.rotateLeft(node);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tif (this.isRed(node.left) && this.isRed(node.left!.left)) {\n\t\t\tnode = this.rotateRight(node);\n\t\t}\n\t\tif (this.isRed(node.left) && this.isRed(node.right)) {\n\t\t\tthis.flipColors(node);\n\t\t}\n\t\tnode.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n\t\tif (this.aug) {\n\t\t\tthis.aug.update(node);\n\t\t}\n\t\treturn node;\n\t}\n\n\tpublic mapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t): void {\n\t\tthis.nodeMap(this.root, action, accum, start, end);\n\t}\n\n\tpublic map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void {\n\t\t// TODO: optimize to avoid comparisons\n\t\tthis.nodeMap(this.root, action, accum);\n\t}\n\n\tpublic keys(): TKey[] {\n\t\tconst keyList: TKey[] = [];\n\t\tconst actions: RBNodeActions<TKey, TData> = {\n\t\t\tshowStructure: true,\n\t\t\tinfix: (node) => {\n\t\t\t\tkeyList.push(node.key);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t};\n\t\tthis.walk(actions);\n\t\treturn keyList;\n\t}\n\n\t/**\n\t * Depth-first traversal with custom action; if action returns\n\t * false, traversal is halted.\n\t * @param action - action to apply to each node\n\t */\n\tpublic walk(actions: RBNodeActions<TKey, TData>): void {\n\t\tthis.nodeWalk(this.root, actions);\n\t}\n\n\tpublic walkBackward(actions: RBNodeActions<TKey, TData>): void {\n\t\tthis.nodeWalkBackward(this.root, actions);\n\t}\n\n\tprivate nodeWalk(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tactions: RBNodeActions<TKey, TData>,\n\t): boolean {\n\t\tlet go = true;\n\t\tif (node) {\n\t\t\tif (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.pre(node);\n\t\t\t}\n\t\t\tif (node.left) {\n\t\t\t\tgo = this.nodeWalk(node.left, actions);\n\t\t\t}\n\t\t\tif (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.infix(node);\n\t\t\t}\n\t\t\tif (go) {\n\t\t\t\tgo = this.nodeWalk(node.right, actions);\n\t\t\t}\n\t\t\tif (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.post(node);\n\t\t\t}\n\t\t}\n\t\treturn go;\n\t}\n\n\tprivate nodeWalkBackward(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\tactions: RBNodeActions<TKey, TData>,\n\t): boolean {\n\t\tlet go = true;\n\t\tif (node) {\n\t\t\tif (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.pre(node);\n\t\t\t}\n\t\t\tif (node.right) {\n\t\t\t\tgo = this.nodeWalkBackward(node.right, actions);\n\t\t\t}\n\t\t\tif (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.infix(node);\n\t\t\t}\n\t\t\tif (go) {\n\t\t\t\tgo = this.nodeWalkBackward(node.left, actions);\n\t\t\t}\n\t\t\tif (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {\n\t\t\t\tgo = actions.post(node);\n\t\t\t}\n\t\t}\n\t\treturn go;\n\t}\n\n\tprivate nodeMap<TAccum>(\n\t\tnode: RBNode<TKey, TData> | undefined,\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t): boolean {\n\t\tlet _start = start;\n\t\tlet _end = end;\n\t\tif (!node) {\n\t\t\treturn true;\n\t\t}\n\t\tif (_start === undefined) {\n\t\t\t_start = this.nodeMin(node).key;\n\t\t}\n\t\tif (_end === undefined) {\n\t\t\t_end = this.nodeMax(node).key;\n\t\t}\n\t\tconst cmpStart = this.compareKeys(_start, node.key);\n\t\tconst cmpEnd = this.compareKeys(_end, node.key);\n\t\tlet go = true;\n\t\tif (cmpStart < 0) {\n\t\t\tgo = this.nodeMap(node.left, action, accum, _start, _end);\n\t\t}\n\t\tif (go && cmpStart <= 0 && cmpEnd >= 0) {\n\t\t\t// REVIEW: test for black node here\n\t\t\tgo = action(node, accum);\n\t\t}\n\t\tif (go && cmpEnd > 0) {\n\t\t\tgo = this.nodeMap(node.right, action, accum, _start, _end);\n\t\t}\n\t\treturn go;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endOfTreeSegment.d.ts","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAgB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAe,mBAAmB;IACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAApB,SAAS,EAAE,SAAS;IAOnD,UAAU,EAAE,MAAM,CAAK;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAmB;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,SAAS,CAAC;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,GAAG,SAAK;IACR,QAAQ,SAAiB;IACzB,YAAY,SAAK;IAEjB,MAAM,IAAI,IAAI,IAAI,QAAQ;IAI1B,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI;QAC1C,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IAED,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"endOfTreeSegment.d.ts","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAgB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAe,mBAAmB;IACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAApB,SAAS,EAAE,SAAS;IAOnD,UAAU,EAAE,MAAM,CAAK;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAmB;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,SAAS,CAAC;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,GAAG,SAAK;IACR,QAAQ,SAAiB;IACzB,YAAY,SAAK;IAEjB,MAAM,IAAI,IAAI,IAAI,QAAQ;IAI1B,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI;QAC1C,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IAED,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAE/B,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAMrC,IAAI,aAAa,IAAI,KAAK,CAEzB;IACD,IAAI,kBAAkB,IAAI,KAAK,CAE9B;IACD,aAAa,cAAgB;IAC7B,KAAK,cAAgB;IACrB,SAAS,cAAgB;IACzB,MAAM,cAAgB;IACtB,OAAO,cAAgB;IACvB,YAAY,cAAgB;IAC5B,GAAG,cAAgB;CACnB;AAMD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC5F,IAAI,EAAE,MAAM,CAAwB;IACpC,QAAQ,CAAC,YAAY,WAAW;IAEhC;;;OAGG;IACH,SAAS,CAAC,oBAAoB,IAAI;QACjC,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IA2BD,IAAI,OAAO,IAAI,MAAM,CAKpB;CACD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC1F,IAAI,EAAE,MAAM,CAAsB;IAClC,QAAQ,CAAC,YAAY,SAAS;IAE9B;;;OAGG;IACH,SAAS,CAAC,oBAAoB,IAAI;QACjC,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IA2BD,IAAI,OAAO,IAAI,MAAM,CAMpB;CACD"}
|
package/dist/endOfTreeSegment.js
CHANGED
|
@@ -107,6 +107,9 @@ class StartOfTreeSegment extends BaseEndpointSegment {
|
|
|
107
107
|
};
|
|
108
108
|
}
|
|
109
109
|
get ordinal() {
|
|
110
|
+
// Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.
|
|
111
|
+
// The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.
|
|
112
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
110
113
|
return String.fromCharCode(0x00);
|
|
111
114
|
}
|
|
112
115
|
}
|
|
@@ -148,7 +151,7 @@ class EndOfTreeSegment extends BaseEndpointSegment {
|
|
|
148
151
|
// we base it on the depth of the tree
|
|
149
152
|
// to ensure it is bigger than all ordinals in
|
|
150
153
|
// the tree, as each layer appends to the previous
|
|
151
|
-
return String.
|
|
154
|
+
return String.fromCodePoint(0xffff).repeat(this.endpointSegmentProps().depth);
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
157
|
exports.EndOfTreeSegment = EndOfTreeSegment;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endOfTreeSegment.js","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAE7D,iDAA+C;AAG/C,iEAAwE;AAGxE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAe,mBAAmB;IACjC,YAA+B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QACnD;;;;;WAKG;QACH,eAAU,GAAW,CAAC,CAAC;QACvB,qBAAgB,GAAa,CAAC,4BAAa,CAAC,CAAC;QAM7C,QAAG,GAAG,CAAC,CAAC;QACR,aAAQ,GAAG,4BAAa,CAAC;QACzB,iBAAY,GAAG,CAAC,CAAC;QAkCjB,kBAAa,GAAG,YAAY,CAAC;QAC7B,UAAK,GAAG,YAAY,CAAC;QACrB,cAAS,GAAG,YAAY,CAAC;QACzB,WAAM,GAAG,YAAY,CAAC;QACtB,YAAO,GAAG,YAAY,CAAC;QACvB,iBAAY,GAAG,YAAY,CAAC;QAC5B,QAAG,GAAG,YAAY,CAAC;IAxDmC,CAAC;IAkBvD,MAAM;QACL,OAAO,IAAI,CAAC;IACb,CAAC;IAQD,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC;IAC1C,CAAC;IAMD;;;OAGG;IACH,IAAI,aAAa;QAChB,OAAO,YAAY,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,kBAAkB;QACrB,OAAO,YAAY,EAAE,CAAC;IACvB,CAAC;CAQD;AAED,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"endOfTreeSegment.js","sourceRoot":"","sources":["../src/endOfTreeSegment.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 { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { LocalClientId } from \"./constants.js\";\nimport { LocalReferenceCollection } from \"./localReference.js\";\nimport { MergeTree } from \"./mergeTree.js\";\nimport { NodeAction, depthFirstNodeWalk } from \"./mergeTreeNodeWalk.js\";\nimport { IRemovalInfo, ISegment, ISegmentLeaf, type MergeBlock } from \"./mergeTreeNodes.js\";\n\n/**\n * This is a special segment that is not bound or known by the merge tree itself,\n * but the segment itself pretends to be a removed segment at an endpoint of the\n * tree. It is removed so it appears as a undefined/0 length segment. This segment\n * adds the capability to hold local references that have been detached from the\n * real merge tree, and give the appearance that they exist at an endpoint of the\n * tree.\n *\n * This is useful today in 2 cases: detached references and interval stickiness.\n *\n * In general, local references only become detached when the tree becomes empty\n * and the EndOfTreeSegment allows us to gracefully handle that case by giving\n * those references a place to live.\n *\n * In the case of interval stickiness, it is desirable to be able to refer to\n * the position immediately after or before a segment, in order for the endpoint\n * of an interval to be exclusive. This means that in order to support intervals\n * that are exclusive and also include the first or last segment of the tree, it\n * must be possible in some way to refer to a position before or after the tree\n * respectively. The endpoint segments allow us to support such behavior.\n */\nabstract class BaseEndpointSegment {\n\tconstructor(protected readonly mergeTree: MergeTree) {}\n\t/*\n\t * segments must be of at least length one, but\n\t * removed segments will have a calculated length\n\t * of undefined/0. we leverage this to create\n\t * a 0 length segment for an endpoint of the tree\n\t */\n\tremovedSeq: number = 0;\n\tremovedClientIds: number[] = [LocalClientId];\n\tattribution: undefined;\n\tpropertyManager: undefined;\n\tlocalSeq: undefined;\n\tlocalRemovedSeq: undefined;\n\tproperties: undefined;\n\tseq = 0;\n\tclientId = LocalClientId;\n\tcachedLength = 1;\n\n\tisLeaf(): this is ISegment {\n\t\treturn true;\n\t}\n\n\tprotected abstract endpointSegmentProps(): {\n\t\tparent: MergeBlock;\n\t\tindex: number;\n\t\tdepth: number;\n\t};\n\n\tget parent(): MergeBlock {\n\t\treturn this.endpointSegmentProps().parent;\n\t}\n\n\tget index(): number {\n\t\treturn this.endpointSegmentProps().index;\n\t}\n\n\tabstract get ordinal(): string;\n\n\tlocalRefs?: LocalReferenceCollection;\n\n\t/*\n\t * since this segment isn't real, throw on any segment\n\t * operation that isn't expected\n\t */\n\tget segmentGroups(): never {\n\t\treturn notSupported();\n\t}\n\tget trackingCollection(): never {\n\t\treturn notSupported();\n\t}\n\taddProperties = notSupported;\n\tclone = notSupported;\n\tcanAppend = notSupported;\n\tappend = notSupported;\n\tsplitAt = notSupported;\n\ttoJSONObject = notSupported;\n\tack = notSupported;\n}\n\nconst notSupported = (): never => {\n\tassert(false, 0x3ed /* operation not supported */);\n};\n\n/**\n * The position immediately prior to the start of the tree\n */\nexport class StartOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"StartOfTreeSegment\";\n\treadonly endpointType = \"start\";\n\n\t/**\n\t * this segment pretends to be a sibling of the first real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps(): {\n\t\tparent: MergeBlock;\n\t\tindex: number;\n\t\tdepth: number;\n\t} {\n\t\tlet firstSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[0],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tfirstSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = firstSegment?.parent ?? root;\n\t\tconst index = 0;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal(): string {\n\t\t// Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.\n\t\t// The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.\n\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\treturn String.fromCharCode(0x00);\n\t}\n}\n\n/**\n * The position immediately after the end of the tree\n */\nexport class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"EndOfTreeSegment\";\n\treadonly endpointType = \"end\";\n\n\t/**\n\t * this segment pretends to be a sibling of the last real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps(): {\n\t\tparent: MergeBlock;\n\t\tindex: number;\n\t\tdepth: number;\n\t} {\n\t\tlet lastSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[root.childCount - 1],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tlastSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = lastSegment?.parent ?? root;\n\t\tconst index = parent.childCount;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal(): string {\n\t\t// just compute an arbitrarily big ordinal\n\t\t// we base it on the depth of the tree\n\t\t// to ensure it is bigger than all ordinals in\n\t\t// the tree, as each layer appends to the previous\n\t\treturn String.fromCodePoint(0xffff).repeat(this.endpointSegmentProps().depth);\n\t}\n}\n"]}
|
package/dist/legacy.d.ts
CHANGED
package/dist/localReference.d.ts
CHANGED
|
@@ -45,16 +45,16 @@ export interface LocalReferencePosition extends ReferencePosition {
|
|
|
45
45
|
readonly canSlideToEndpoint?: boolean;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
+
* Creates a new detached local reference.
|
|
48
49
|
* @internal
|
|
49
50
|
*/
|
|
50
51
|
export declare function createDetachedLocalReferencePosition(slidingPreference: SlidingPreference | undefined, refType?: ReferenceType): LocalReferencePosition;
|
|
51
52
|
/**
|
|
52
|
-
*
|
|
53
|
+
* Determines if the given function is true for any position within the collection.
|
|
53
54
|
*/
|
|
54
55
|
export declare function anyLocalReferencePosition(collection: LocalReferenceCollection, func: (pos: LocalReferencePosition) => boolean): boolean;
|
|
55
56
|
/**
|
|
56
|
-
*
|
|
57
|
-
* true
|
|
57
|
+
* Finds the local reference positions that satisfy the given predicate.
|
|
58
58
|
*/
|
|
59
59
|
export declare function filterLocalReferencePositions(collection: LocalReferenceCollection, predicate: (pos: LocalReferencePosition) => boolean): Generator<LocalReferencePosition>;
|
|
60
60
|
export declare function setValidateRefCount(cb?: (collection?: LocalReferenceCollection) => void): void;
|
|
@@ -68,34 +68,40 @@ export declare function setValidateRefCount(cb?: (collection?: LocalReferenceCol
|
|
|
68
68
|
* @alpha
|
|
69
69
|
*/
|
|
70
70
|
export declare class LocalReferenceCollection {
|
|
71
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* The segment this `LocalReferenceCollection` is associated with.
|
|
73
|
+
*/
|
|
72
74
|
private readonly segment;
|
|
73
75
|
static append(seg1: ISegment, seg2: ISegment): void;
|
|
74
76
|
static setOrGet(segment: ISegment): LocalReferenceCollection;
|
|
75
77
|
private readonly refsByOffset;
|
|
76
78
|
private refCount;
|
|
77
|
-
/***/
|
|
78
79
|
private constructor();
|
|
79
80
|
/**
|
|
81
|
+
* Returns an iterator over this LocalReferenceCollection.
|
|
80
82
|
* @remarks This method should only be called by mergeTree.
|
|
81
83
|
*/
|
|
82
84
|
[Symbol.iterator](): {
|
|
83
85
|
next(): IteratorResult<LocalReferencePosition>;
|
|
84
|
-
[Symbol.iterator]():
|
|
86
|
+
[Symbol.iterator](): IterableIterator<LocalReferencePosition>;
|
|
85
87
|
};
|
|
86
88
|
/**
|
|
89
|
+
* Determines if the collection has no references in it.
|
|
87
90
|
* @remarks This method should only be called by mergeTree.
|
|
88
91
|
*/
|
|
89
92
|
get empty(): boolean;
|
|
90
93
|
/**
|
|
94
|
+
* Creates a new local reference.
|
|
91
95
|
* @remarks This method should only be called by mergeTree.
|
|
92
96
|
*/
|
|
93
97
|
createLocalRef(offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
|
|
94
98
|
/**
|
|
99
|
+
* Adds a local reference to the collection.
|
|
95
100
|
* @remarks This method should only be called by mergeTree.
|
|
96
101
|
*/
|
|
97
102
|
addLocalRef(lref: LocalReferencePosition, offset: number): void;
|
|
98
103
|
/**
|
|
104
|
+
* Removes a local reference from the collection.
|
|
99
105
|
* @remarks This method should only be called by mergeTree.
|
|
100
106
|
*/
|
|
101
107
|
removeLocalRef(lref: LocalReferencePosition): LocalReferencePosition | undefined;
|
|
@@ -130,18 +136,22 @@ export declare class LocalReferenceCollection {
|
|
|
130
136
|
*/
|
|
131
137
|
split(offset: number, splitSeg: ISegment): void;
|
|
132
138
|
/**
|
|
139
|
+
* Insert a reference before tombstoned references.
|
|
133
140
|
* @remarks This method should only be called by mergeTree.
|
|
134
141
|
*/
|
|
135
142
|
addBeforeTombstones(...refs: Iterable<LocalReferencePosition>[]): void;
|
|
136
143
|
/**
|
|
144
|
+
* Insert a reference after tombstoned references.
|
|
137
145
|
* @remarks This method should only be called by mergeTree.
|
|
138
146
|
*/
|
|
139
147
|
addAfterTombstones(...refs: Iterable<LocalReferencePosition>[]): void;
|
|
140
148
|
/**
|
|
149
|
+
* Determines if a reference is after tombstoned references.
|
|
141
150
|
* @remarks This method should only be called by mergeTree.
|
|
142
151
|
*/
|
|
143
152
|
isAfterTombstone(lref: LocalReferencePosition): boolean;
|
|
144
153
|
/**
|
|
154
|
+
* Walks all of the references in a collection.
|
|
145
155
|
* @remarks This method should only be called by mergeTree.
|
|
146
156
|
*/
|
|
147
157
|
walkReferences(visitor: (lref: LocalReferencePosition) => boolean | void | undefined, start?: LocalReferencePosition, forward?: boolean): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAiB,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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"}
|