@zengrid/shared 1.0.3 → 1.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/README.md +4 -0
- package/dist/README.md +48 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +8696 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +8640 -0
- package/dist/package.json +54 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts +120 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts.map +1 -0
- package/dist/src/algorithms/filter/index.d.ts +7 -0
- package/dist/src/algorithms/filter/index.d.ts.map +1 -0
- package/dist/src/algorithms/graph/bfs.d.ts +71 -0
- package/dist/src/algorithms/graph/bfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/dfs.d.ts +62 -0
- package/dist/src/algorithms/graph/dfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts +63 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts.map +1 -0
- package/dist/src/algorithms/graph/index.d.ts +9 -0
- package/dist/src/algorithms/graph/index.d.ts.map +1 -0
- package/dist/src/algorithms/index.d.ts +11 -0
- package/dist/src/algorithms/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/index.d.ts +8 -0
- package/dist/src/algorithms/pattern/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts +62 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -0
- package/dist/src/algorithms/search/binary-search.d.ts +86 -0
- package/dist/src/algorithms/search/binary-search.d.ts.map +1 -0
- package/dist/src/algorithms/search/index.d.ts +6 -0
- package/dist/src/algorithms/search/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/comparators.d.ts +126 -0
- package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/index.d.ts +9 -0
- package/dist/src/algorithms/sorting/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts +38 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort-gallop.d.ts +21 -0
- package/dist/src/algorithms/sorting/timsort-gallop.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort-merge.d.ts +6 -0
- package/dist/src/algorithms/sorting/timsort-merge.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort-run.d.ts +38 -0
- package/dist/src/algorithms/sorting/timsort-run.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort.d.ts +55 -0
- package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort.interface.d.ts +32 -0
- package/dist/src/algorithms/sorting/timsort.interface.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.d.ts +52 -0
- package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts +155 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/index.d.ts +6 -0
- package/dist/src/data-structures/column-store/index.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts +61 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts +80 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/index.d.ts +3 -0
- package/dist/src/data-structures/command-stack/index.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts +8 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts +7 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.d.ts +150 -0
- package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts +186 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index.d.ts +6 -0
- package/dist/src/data-structures/index-map/index.d.ts.map +1 -0
- package/dist/src/data-structures/index.d.ts +36 -0
- package/dist/src/data-structures/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/index.d.ts +7 -0
- package/dist/src/data-structures/interval-tree/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts +58 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/node.d.ts +34 -0
- package/dist/src/data-structures/interval-tree/node.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/balance.d.ts +34 -0
- package/dist/src/data-structures/interval-tree/operations/balance.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/delete.d.ts +26 -0
- package/dist/src/data-structures/interval-tree/operations/delete.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/insert.d.ts +19 -0
- package/dist/src/data-structures/interval-tree/operations/insert.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/search.d.ts +46 -0
- package/dist/src/data-structures/interval-tree/operations/search.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/traversal.d.ts +29 -0
- package/dist/src/data-structures/interval-tree/operations/traversal.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/utilities.d.ts +30 -0
- package/dist/src/data-structures/interval-tree/operations/utilities.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/index.d.ts +3 -0
- package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts +134 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts +6 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
- package/dist/src/data-structures/ring-buffer.d.ts +96 -0
- package/dist/src/data-structures/ring-buffer.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/index.d.ts +8 -0
- package/dist/src/data-structures/rtree/index.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.d.ts +81 -0
- package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts +143 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/aggregation-config.d.ts +6 -0
- package/dist/src/data-structures/segment-tree/aggregation-config.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/index.d.ts +4 -0
- package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts +5 -0
- package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts +30 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-builder.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-builder.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-query.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-query.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-search.d.ts +2 -0
- package/dist/src/data-structures/segment-tree/tree-search.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-update.d.ts +4 -0
- package/dist/src/data-structures/segment-tree/tree-update.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-validation.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-validation.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/index.d.ts +4 -0
- package/dist/src/data-structures/skip-list/index.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts +137 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts +223 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts +6 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/index.d.ts +3 -0
- package/dist/src/data-structures/suffix-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts +102 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
- package/dist/src/data-structures/trie/index.d.ts +8 -0
- package/dist/src/data-structures/trie/index.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.d.ts +205 -0
- package/dist/src/data-structures/trie/trie.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts +117 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts.map +1 -0
- package/dist/src/index.d.ts +54 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/patterns/coordinator.d.ts +90 -0
- package/dist/src/patterns/coordinator.d.ts.map +1 -0
- package/dist/src/patterns/event-emitter.d.ts +106 -0
- package/dist/src/patterns/event-emitter.d.ts.map +1 -0
- package/dist/src/patterns/factory.d.ts +120 -0
- package/dist/src/patterns/factory.d.ts.map +1 -0
- package/dist/src/patterns/index.d.ts +21 -0
- package/dist/src/patterns/index.d.ts.map +1 -0
- package/dist/src/patterns/mediator.d.ts +116 -0
- package/dist/src/patterns/mediator.d.ts.map +1 -0
- package/dist/src/patterns/object-pool.d.ts +178 -0
- package/dist/src/patterns/object-pool.d.ts.map +1 -0
- package/dist/src/patterns/observer.d.ts +89 -0
- package/dist/src/patterns/observer.d.ts.map +1 -0
- package/dist/src/patterns/operation-mode.d.ts +75 -0
- package/dist/src/patterns/operation-mode.d.ts.map +1 -0
- package/dist/src/patterns/state-machine.d.ts +122 -0
- package/dist/src/patterns/state-machine.d.ts.map +1 -0
- package/dist/src/reactive/batch-processor.d.ts +80 -0
- package/dist/src/reactive/batch-processor.d.ts.map +1 -0
- package/dist/src/reactive/core/batch-manager.d.ts +48 -0
- package/dist/src/reactive/core/batch-manager.d.ts.map +1 -0
- package/dist/src/reactive/core/batch-queue.d.ts +39 -0
- package/dist/src/reactive/core/batch-queue.d.ts.map +1 -0
- package/dist/src/reactive/core/event-handler-registry.d.ts +52 -0
- package/dist/src/reactive/core/event-handler-registry.d.ts.map +1 -0
- package/dist/src/reactive/core/event-mapper.d.ts +37 -0
- package/dist/src/reactive/core/event-mapper.d.ts.map +1 -0
- package/dist/src/reactive/core/pool-stats.d.ts +47 -0
- package/dist/src/reactive/core/pool-stats.d.ts.map +1 -0
- package/dist/src/reactive/core/subscription-manager.d.ts +46 -0
- package/dist/src/reactive/core/subscription-manager.d.ts.map +1 -0
- package/dist/src/reactive/event-delegator.d.ts +84 -0
- package/dist/src/reactive/event-delegator.d.ts.map +1 -0
- package/dist/src/reactive/index.d.ts +61 -0
- package/dist/src/reactive/index.d.ts.map +1 -0
- package/dist/src/reactive/interfaces.d.ts +207 -0
- package/dist/src/reactive/interfaces.d.ts.map +1 -0
- package/dist/src/reactive/object-pool.d.ts +97 -0
- package/dist/src/reactive/object-pool.d.ts.map +1 -0
- package/dist/src/reactive/reactive-state.d.ts +132 -0
- package/dist/src/reactive/reactive-state.d.ts.map +1 -0
- package/dist/src/types/common.d.ts +56 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +5 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/timing.d.ts +104 -0
- package/dist/src/utils/timing.d.ts.map +1 -0
- package/dist/src/utils/timing.interface.d.ts +96 -0
- package/dist/src/utils/timing.interface.d.ts.map +1 -0
- package/package.json +52 -52
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval-tree.d.ts","sourceRoot":"","sources":["../../../../src/data-structures/interval-tree/interval-tree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAqBnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;gBAEtD,OAAO,GAAE,mBAAwB;IAM7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IA2BpD,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAY9C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAQxC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;IAM7C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;IAI7C,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;IAMtD,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE;IAMvD,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAKtC,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAKtC,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAIvC,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;IAM5B,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI5D,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC;IAQ3E,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAQpE,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,EACX,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,EACjD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAAC,CAAC,CAAC;IAIlB,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,OAAO;CAGpB"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interval Tree interfaces for ZenGrid
|
|
3
|
+
* Efficiently finds all intervals that overlap with a given interval or point
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Represents an interval with a start and end
|
|
7
|
+
*/
|
|
8
|
+
export interface Interval {
|
|
9
|
+
/** Start of the interval (inclusive) */
|
|
10
|
+
start: number;
|
|
11
|
+
/** End of the interval (inclusive) */
|
|
12
|
+
end: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* An interval with associated data
|
|
16
|
+
*/
|
|
17
|
+
export interface IntervalData<T> extends Interval {
|
|
18
|
+
/** User data associated with this interval */
|
|
19
|
+
data: T;
|
|
20
|
+
/** Optional unique identifier */
|
|
21
|
+
id?: string | number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interval Tree interface
|
|
25
|
+
*
|
|
26
|
+
* An augmented binary search tree for efficient interval queries.
|
|
27
|
+
* Each node stores an interval and the maximum endpoint in its subtree.
|
|
28
|
+
*
|
|
29
|
+
* Use cases:
|
|
30
|
+
* - Finding all overlapping time ranges
|
|
31
|
+
* - Range queries in calendars/schedules
|
|
32
|
+
* - Collision detection (e.g., overlapping cells in a grid)
|
|
33
|
+
* - Finding visible rows/columns in virtual scrolling
|
|
34
|
+
* - Query optimization (index range scans)
|
|
35
|
+
*
|
|
36
|
+
* Performance:
|
|
37
|
+
* - Insert: O(log n) average, O(n) worst case (use Red-Black tree for guaranteed O(log n))
|
|
38
|
+
* - Delete: O(log n) average
|
|
39
|
+
* - Search overlapping: O(log n + k) where k = number of results
|
|
40
|
+
* - Point query: O(log n + k)
|
|
41
|
+
* - Space: O(n)
|
|
42
|
+
*/
|
|
43
|
+
export interface IIntervalTree<T> {
|
|
44
|
+
/**
|
|
45
|
+
* Insert an interval with associated data
|
|
46
|
+
* @param interval - The interval to insert
|
|
47
|
+
* @param data - Data to associate with the interval
|
|
48
|
+
* @returns The inserted interval with data
|
|
49
|
+
* @complexity O(log n) average
|
|
50
|
+
*/
|
|
51
|
+
insert(interval: Interval, data: T): IntervalData<T>;
|
|
52
|
+
/**
|
|
53
|
+
* Delete an interval by reference
|
|
54
|
+
* @param intervalData - The interval to delete
|
|
55
|
+
* @returns true if found and deleted
|
|
56
|
+
* @complexity O(log n)
|
|
57
|
+
*/
|
|
58
|
+
delete(intervalData: IntervalData<T>): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Delete an interval by ID
|
|
61
|
+
* @param id - The ID of the interval to delete
|
|
62
|
+
* @returns true if found and deleted
|
|
63
|
+
* @complexity O(n) - requires linear search
|
|
64
|
+
*/
|
|
65
|
+
deleteById(id: string | number): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Find all intervals that overlap with the given interval
|
|
68
|
+
* @param interval - The query interval
|
|
69
|
+
* @returns Array of overlapping intervals
|
|
70
|
+
* @complexity O(log n + k) where k = number of results
|
|
71
|
+
*/
|
|
72
|
+
search(interval: Interval): IntervalData<T>[];
|
|
73
|
+
/**
|
|
74
|
+
* Find all intervals that contain the given point
|
|
75
|
+
* @param point - The point to query
|
|
76
|
+
* @returns Array of intervals containing the point
|
|
77
|
+
* @complexity O(log n + k) where k = number of results
|
|
78
|
+
*/
|
|
79
|
+
searchPoint(point: number): IntervalData<T>[];
|
|
80
|
+
/**
|
|
81
|
+
* Find all intervals that are completely contained within the given interval
|
|
82
|
+
* @param interval - The containing interval
|
|
83
|
+
* @returns Array of contained intervals
|
|
84
|
+
* @complexity O(n) worst case
|
|
85
|
+
*/
|
|
86
|
+
searchContained(interval: Interval): IntervalData<T>[];
|
|
87
|
+
/**
|
|
88
|
+
* Find all intervals that completely contain the given interval
|
|
89
|
+
* @param interval - The interval to be contained
|
|
90
|
+
* @returns Array of containing intervals
|
|
91
|
+
* @complexity O(n) worst case
|
|
92
|
+
*/
|
|
93
|
+
searchContaining(interval: Interval): IntervalData<T>[];
|
|
94
|
+
/**
|
|
95
|
+
* Find the interval with the earliest start time
|
|
96
|
+
* @returns The interval or undefined if tree is empty
|
|
97
|
+
* @complexity O(log n)
|
|
98
|
+
*/
|
|
99
|
+
findMin(): IntervalData<T> | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Find the interval with the latest end time
|
|
102
|
+
* @returns The interval or undefined if tree is empty
|
|
103
|
+
* @complexity O(log n)
|
|
104
|
+
*/
|
|
105
|
+
findMax(): IntervalData<T> | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Check if any interval overlaps with the given interval
|
|
108
|
+
* @param interval - The query interval
|
|
109
|
+
* @complexity O(log n)
|
|
110
|
+
*/
|
|
111
|
+
hasOverlap(interval: Interval): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Get all intervals in sorted order (by start time)
|
|
114
|
+
* @returns Array of all intervals sorted by start
|
|
115
|
+
* @complexity O(n)
|
|
116
|
+
*/
|
|
117
|
+
inorder(): IntervalData<T>[];
|
|
118
|
+
/**
|
|
119
|
+
* Iterate over all intervals in sorted order
|
|
120
|
+
* @param callback - Function to call for each interval
|
|
121
|
+
* @complexity O(n)
|
|
122
|
+
*/
|
|
123
|
+
forEach(callback: (interval: IntervalData<T>) => void): void;
|
|
124
|
+
/**
|
|
125
|
+
* Filter intervals by a predicate
|
|
126
|
+
* @param predicate - Test function
|
|
127
|
+
* @returns New interval tree with intervals that pass the test
|
|
128
|
+
* @complexity O(n)
|
|
129
|
+
*/
|
|
130
|
+
filter(predicate: (interval: IntervalData<T>) => boolean): IIntervalTree<T>;
|
|
131
|
+
/**
|
|
132
|
+
* Map intervals to a new interval tree
|
|
133
|
+
* @param mapper - Transform function for the data
|
|
134
|
+
* @returns New interval tree with transformed data
|
|
135
|
+
* @complexity O(n)
|
|
136
|
+
*/
|
|
137
|
+
map<U>(mapper: (data: T, interval: Interval) => U): IIntervalTree<U>;
|
|
138
|
+
/**
|
|
139
|
+
* Clear all intervals
|
|
140
|
+
* @complexity O(1)
|
|
141
|
+
*/
|
|
142
|
+
clear(): void;
|
|
143
|
+
/**
|
|
144
|
+
* Number of intervals in the tree
|
|
145
|
+
*/
|
|
146
|
+
readonly size: number;
|
|
147
|
+
/**
|
|
148
|
+
* Whether the tree is empty
|
|
149
|
+
*/
|
|
150
|
+
readonly isEmpty: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Height of the tree (for debugging/analysis)
|
|
153
|
+
*/
|
|
154
|
+
readonly height: number;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Options for creating an IntervalTree
|
|
158
|
+
*/
|
|
159
|
+
export interface IntervalTreeOptions {
|
|
160
|
+
/**
|
|
161
|
+
* Whether to use a balanced tree (Red-Black tree)
|
|
162
|
+
* Guarantees O(log n) operations but slightly slower constants
|
|
163
|
+
* @default false (uses simple BST)
|
|
164
|
+
*/
|
|
165
|
+
balanced?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Whether to allow duplicate intervals
|
|
168
|
+
* @default true
|
|
169
|
+
*/
|
|
170
|
+
allowDuplicates?: boolean;
|
|
171
|
+
/**
|
|
172
|
+
* Custom comparator for intervals
|
|
173
|
+
* Defaults to comparing by start time, then end time
|
|
174
|
+
*/
|
|
175
|
+
comparator?: (a: Interval, b: Interval) => number;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Helper functions for interval operations
|
|
179
|
+
*/
|
|
180
|
+
export declare const IntervalUtils: {
|
|
181
|
+
/**
|
|
182
|
+
* Check if two intervals overlap
|
|
183
|
+
*/
|
|
184
|
+
overlaps(a: Interval, b: Interval): boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Check if interval contains a point
|
|
187
|
+
*/
|
|
188
|
+
contains(interval: Interval, point: number): boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Check if interval A contains interval B
|
|
191
|
+
*/
|
|
192
|
+
containsInterval(a: Interval, b: Interval): boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Get the intersection of two intervals
|
|
195
|
+
* Returns undefined if they don't overlap
|
|
196
|
+
*/
|
|
197
|
+
intersection(a: Interval, b: Interval): Interval | undefined;
|
|
198
|
+
/**
|
|
199
|
+
* Get the union of two overlapping intervals
|
|
200
|
+
* Returns undefined if they don't overlap
|
|
201
|
+
*/
|
|
202
|
+
union(a: Interval, b: Interval): Interval | undefined;
|
|
203
|
+
/**
|
|
204
|
+
* Merge overlapping intervals
|
|
205
|
+
*/
|
|
206
|
+
mergeOverlapping(intervals: Interval[]): Interval[];
|
|
207
|
+
/**
|
|
208
|
+
* Default comparator: compare by start, then by end
|
|
209
|
+
*/
|
|
210
|
+
defaultComparator(a: Interval, b: Interval): number;
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=interval-tree.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval-tree.interface.d.ts","sourceRoot":"","sources":["../../../../src/data-structures/interval-tree/interval-tree.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interval Tree Node
|
|
3
|
+
* Internal node structure for the interval tree
|
|
4
|
+
*/
|
|
5
|
+
import type { IntervalData } from './interval-tree.interface';
|
|
6
|
+
/**
|
|
7
|
+
* Internal tree node
|
|
8
|
+
* Each node stores an interval and the maximum endpoint in its subtree
|
|
9
|
+
*/
|
|
10
|
+
export declare class IntervalNode<T> {
|
|
11
|
+
interval: IntervalData<T>;
|
|
12
|
+
max: number;
|
|
13
|
+
left: IntervalNode<T> | null;
|
|
14
|
+
right: IntervalNode<T> | null;
|
|
15
|
+
height: number;
|
|
16
|
+
constructor(interval: IntervalData<T>);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get height of a node (0 for null nodes)
|
|
20
|
+
*/
|
|
21
|
+
export declare function getHeight<T>(node: IntervalNode<T> | null): number;
|
|
22
|
+
/**
|
|
23
|
+
* Update max value for a node based on its interval and children
|
|
24
|
+
*/
|
|
25
|
+
export declare function updateMax<T>(node: IntervalNode<T>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Update height for a node based on its children
|
|
28
|
+
*/
|
|
29
|
+
export declare function updateHeight<T>(node: IntervalNode<T>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Find minimum node in a subtree (leftmost node)
|
|
32
|
+
*/
|
|
33
|
+
export declare function findMinNode<T>(node: IntervalNode<T> | null): IntervalNode<T> | null;
|
|
34
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/data-structures/interval-tree/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IACpC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IACrC,MAAM,EAAE,MAAM,CAAK;gBAEP,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;CAItC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAMnF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AVL Tree Balancing Operations
|
|
3
|
+
* Handles tree balancing through rotations
|
|
4
|
+
*/
|
|
5
|
+
import { IntervalNode } from '../node';
|
|
6
|
+
/**
|
|
7
|
+
* Get balance factor of a node (left height - right height)
|
|
8
|
+
*/
|
|
9
|
+
export declare function getBalanceFactor<T>(node: IntervalNode<T>): number;
|
|
10
|
+
/**
|
|
11
|
+
* Left rotation
|
|
12
|
+
* Rotates the node to the left, making its right child the new root
|
|
13
|
+
*
|
|
14
|
+
* @param node - Node to rotate
|
|
15
|
+
* @returns New root after rotation
|
|
16
|
+
*/
|
|
17
|
+
export declare function rotateLeft<T>(node: IntervalNode<T>): IntervalNode<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Right rotation
|
|
20
|
+
* Rotates the node to the right, making its left child the new root
|
|
21
|
+
*
|
|
22
|
+
* @param node - Node to rotate
|
|
23
|
+
* @returns New root after rotation
|
|
24
|
+
*/
|
|
25
|
+
export declare function rotateRight<T>(node: IntervalNode<T>): IntervalNode<T>;
|
|
26
|
+
/**
|
|
27
|
+
* Balance a node using AVL rotations
|
|
28
|
+
* Performs rotations based on balance factor to maintain AVL property
|
|
29
|
+
*
|
|
30
|
+
* @param node - Node to balance
|
|
31
|
+
* @returns Balanced node (may be a different node after rotation)
|
|
32
|
+
*/
|
|
33
|
+
export declare function balance<T>(node: IntervalNode<T>): IntervalNode<T>;
|
|
34
|
+
//# sourceMappingURL=balance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/balance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAsC,MAAM,SAAS,CAAC;AAE3E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAcpE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAwBjE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete Operations
|
|
3
|
+
* Handles deletion of intervals from the tree
|
|
4
|
+
*/
|
|
5
|
+
import type { Interval, IntervalData } from '../interval-tree.interface';
|
|
6
|
+
import { IntervalNode } from '../node';
|
|
7
|
+
/**
|
|
8
|
+
* Delete an interval from the tree
|
|
9
|
+
*
|
|
10
|
+
* @param node - Root of the subtree
|
|
11
|
+
* @param interval - Interval to delete
|
|
12
|
+
* @param comparator - Comparator function for intervals
|
|
13
|
+
* @param balanced - Whether to balance the tree
|
|
14
|
+
* @param onDelete - Callback when a node is deleted
|
|
15
|
+
* @returns New root of the subtree (null if deleted)
|
|
16
|
+
*/
|
|
17
|
+
export declare function deleteNode<T>(node: IntervalNode<T> | null, interval: IntervalData<T>, comparator: (a: Interval, b: Interval) => number, balanced: boolean, onDelete?: () => void): IntervalNode<T> | null;
|
|
18
|
+
/**
|
|
19
|
+
* Find an interval by ID in the tree
|
|
20
|
+
*
|
|
21
|
+
* @param node - Root of the subtree
|
|
22
|
+
* @param id - ID to search for
|
|
23
|
+
* @returns The interval data if found, null otherwise
|
|
24
|
+
*/
|
|
25
|
+
export declare function findById<T>(node: IntervalNode<T> | null, id: string | number): IntervalData<T> | null;
|
|
26
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/delete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAwC,MAAM,SAAS,CAAC;AAG7E;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,EAChD,QAAQ,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAmDxB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAQxB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Insert Operations
|
|
3
|
+
* Handles insertion of intervals into the tree
|
|
4
|
+
*/
|
|
5
|
+
import type { Interval, IntervalData } from '../interval-tree.interface';
|
|
6
|
+
import { IntervalNode } from '../node';
|
|
7
|
+
/**
|
|
8
|
+
* Insert an interval into the tree
|
|
9
|
+
*
|
|
10
|
+
* @param node - Root of the subtree
|
|
11
|
+
* @param interval - Interval to insert
|
|
12
|
+
* @param comparator - Comparator function for intervals
|
|
13
|
+
* @param allowDuplicates - Whether to allow duplicate intervals
|
|
14
|
+
* @param balanced - Whether to balance the tree
|
|
15
|
+
* @param onInsert - Callback called when a new node is inserted
|
|
16
|
+
* @returns New root of the subtree
|
|
17
|
+
*/
|
|
18
|
+
export declare function insertNode<T>(node: IntervalNode<T> | null, interval: IntervalData<T>, comparator: (a: Interval, b: Interval) => number, allowDuplicates: boolean, balanced: boolean, onInsert?: () => void): IntervalNode<T>;
|
|
19
|
+
//# sourceMappingURL=insert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/insert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAA2B,MAAM,SAAS,CAAC;AAGhE;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,EAChD,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,YAAY,CAAC,CAAC,CAAC,CA2CjB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Operations
|
|
3
|
+
* Handles various search queries on the interval tree
|
|
4
|
+
*/
|
|
5
|
+
import type { Interval, IntervalData } from '../interval-tree.interface';
|
|
6
|
+
import { IntervalNode } from '../node';
|
|
7
|
+
/**
|
|
8
|
+
* Find all intervals that overlap with the given interval
|
|
9
|
+
*
|
|
10
|
+
* @param node - Root of the subtree
|
|
11
|
+
* @param interval - Query interval
|
|
12
|
+
* @param result - Array to collect results
|
|
13
|
+
*/
|
|
14
|
+
export declare function searchOverlap<T>(node: IntervalNode<T> | null, interval: Interval, result: IntervalData<T>[]): void;
|
|
15
|
+
/**
|
|
16
|
+
* Check if any interval overlaps with the given interval
|
|
17
|
+
*
|
|
18
|
+
* @param node - Root of the subtree
|
|
19
|
+
* @param interval - Query interval
|
|
20
|
+
* @returns true if any overlap exists
|
|
21
|
+
*/
|
|
22
|
+
export declare function hasOverlap<T>(node: IntervalNode<T> | null, interval: Interval): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Find all intervals completely contained within the given interval
|
|
25
|
+
*
|
|
26
|
+
* @param node - Root of the subtree
|
|
27
|
+
* @param interval - Containing interval
|
|
28
|
+
* @param result - Array to collect results
|
|
29
|
+
*/
|
|
30
|
+
export declare function searchContained<T>(node: IntervalNode<T> | null, interval: Interval, result: IntervalData<T>[]): void;
|
|
31
|
+
/**
|
|
32
|
+
* Find all intervals that completely contain the given interval
|
|
33
|
+
*
|
|
34
|
+
* @param node - Root of the subtree
|
|
35
|
+
* @param interval - Interval to be contained
|
|
36
|
+
* @param result - Array to collect results
|
|
37
|
+
*/
|
|
38
|
+
export declare function searchContaining<T>(node: IntervalNode<T> | null, interval: Interval, result: IntervalData<T>[]): void;
|
|
39
|
+
/**
|
|
40
|
+
* Find the interval with the maximum endpoint
|
|
41
|
+
*
|
|
42
|
+
* @param node - Root of the subtree
|
|
43
|
+
* @returns Interval with the maximum endpoint
|
|
44
|
+
*/
|
|
45
|
+
export declare function findMaxEndpoint<T>(node: IntervalNode<T>): IntervalData<T>;
|
|
46
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACxB,IAAI,CAmBN;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAqBvF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACxB,IAAI,CAiBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACxB,IAAI,CAiBN;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAmBzE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traversal Operations
|
|
3
|
+
* Handles traversal and iteration over the tree
|
|
4
|
+
*/
|
|
5
|
+
import type { IntervalData } from '../interval-tree.interface';
|
|
6
|
+
import { IntervalNode } from '../node';
|
|
7
|
+
/**
|
|
8
|
+
* Inorder traversal of the tree
|
|
9
|
+
*
|
|
10
|
+
* @param node - Root of the subtree
|
|
11
|
+
* @param result - Array to collect results
|
|
12
|
+
*/
|
|
13
|
+
export declare function inorder<T>(node: IntervalNode<T> | null, result: IntervalData<T>[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Iterate over all intervals in the tree
|
|
16
|
+
*
|
|
17
|
+
* @param node - Root of the subtree
|
|
18
|
+
* @param callback - Function to call for each interval
|
|
19
|
+
*/
|
|
20
|
+
export declare function forEach<T>(node: IntervalNode<T> | null, callback: (interval: IntervalData<T>) => void): void;
|
|
21
|
+
/**
|
|
22
|
+
* Validate tree structure
|
|
23
|
+
*
|
|
24
|
+
* @param node - Root of the subtree
|
|
25
|
+
* @param comparator - Comparator function for intervals
|
|
26
|
+
* @returns true if valid
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateNode<T>(node: IntervalNode<T> | null, comparator: (a: IntervalData<T>, b: IntervalData<T>) => number): boolean;
|
|
29
|
+
//# sourceMappingURL=traversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/traversal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAKxF;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAC5C,IAAI,CAKN;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,GAC7D,OAAO,CAuBT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility Operations
|
|
3
|
+
* Static and helper methods for IntervalTree
|
|
4
|
+
*/
|
|
5
|
+
import type { IIntervalTree, Interval, IntervalData, IntervalTreeOptions } from '../interval-tree.interface';
|
|
6
|
+
import type { IntervalNode } from '../node';
|
|
7
|
+
/**
|
|
8
|
+
* Filter intervals by a predicate
|
|
9
|
+
*/
|
|
10
|
+
export declare function filter<T>(tree: IIntervalTree<T>, root: IntervalNode<T> | null, predicate: (interval: IntervalData<T>) => boolean, options: IntervalTreeOptions): IIntervalTree<T>;
|
|
11
|
+
/**
|
|
12
|
+
* Map intervals to a new interval tree
|
|
13
|
+
*/
|
|
14
|
+
export declare function map<T, U>(tree: IIntervalTree<T>, root: IntervalNode<T> | null, mapper: (data: T, interval: Interval) => U, options: IntervalTreeOptions): IIntervalTree<U>;
|
|
15
|
+
/**
|
|
16
|
+
* Get tree structure as string
|
|
17
|
+
*/
|
|
18
|
+
export declare function treeToString<T>(root: IntervalNode<T> | null, balanced: boolean): string;
|
|
19
|
+
/**
|
|
20
|
+
* Validate tree structure
|
|
21
|
+
*/
|
|
22
|
+
export declare function validate<T>(root: IntervalNode<T> | null, comparator: (a: Interval, b: Interval) => number): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Create IntervalTree from array of intervals
|
|
25
|
+
*/
|
|
26
|
+
export declare function fromArray<T>(IntervalTreeClass: new (opts?: IntervalTreeOptions) => IIntervalTree<T>, intervals: Array<{
|
|
27
|
+
interval: Interval;
|
|
28
|
+
data: T;
|
|
29
|
+
}>, options?: IntervalTreeOptions): IIntervalTree<T>;
|
|
30
|
+
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../../../src/data-structures/interval-tree/operations/utilities.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,EACjD,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAAC,CAAC,CAAC,CAWlB;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,EAC1C,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAAC,CAAC,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAIvF;AAUD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,EAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,GAC/C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,iBAAiB,EAAE,KAAK,IAAI,CAAC,EAAE,mBAAmB,KAAK,aAAa,CAAC,CAAC,CAAC,EACvE,SAAS,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EACjD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,aAAa,CAAC,CAAC,CAAC,CAMlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data-structures/lru-cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ILRUCache, LRUCacheOptions, CacheEntry, CacheStats } from './lru-cache.interface';
|
|
2
|
+
/**
|
|
3
|
+
* LRU Cache - Least Recently Used Cache
|
|
4
|
+
*
|
|
5
|
+
* A cache with automatic eviction of least recently used entries.
|
|
6
|
+
* Uses doubly-linked list + hash map for O(1) operations.
|
|
7
|
+
*
|
|
8
|
+
* **Time Complexity:**
|
|
9
|
+
* - get: O(1)
|
|
10
|
+
* - set: O(1)
|
|
11
|
+
* - delete: O(1)
|
|
12
|
+
* - has: O(1)
|
|
13
|
+
* - clear: O(n)
|
|
14
|
+
*
|
|
15
|
+
* **Space Complexity:** O(n) where n = number of entries
|
|
16
|
+
*
|
|
17
|
+
* **Use Cases in Grid:**
|
|
18
|
+
* - Cache rendered cells: Avoid re-rendering visible cells
|
|
19
|
+
* - Cache formula results: =SUM(A1:A1000) computed once
|
|
20
|
+
* - Cache formatted values: "$1,234.56" cached instead of re-formatting
|
|
21
|
+
* - Cache API responses: Reduce server requests
|
|
22
|
+
*
|
|
23
|
+
* @example Cell Rendering Cache
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const cellCache = new LRUCache<string, HTMLElement>({ capacity: 500 });
|
|
26
|
+
*
|
|
27
|
+
* function renderCell(row: number, col: number): HTMLElement {
|
|
28
|
+
* const key = `${row},${col}`;
|
|
29
|
+
* let element = cellCache.get(key);
|
|
30
|
+
*
|
|
31
|
+
* if (!element) {
|
|
32
|
+
* element = createCellElement(row, col); // Expensive operation
|
|
33
|
+
* cellCache.set(key, element);
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* return element;
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example Formula Cache
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const formulaCache = new LRUCache<string, number>({
|
|
43
|
+
* capacity: 1000,
|
|
44
|
+
* ttl: 5000, // 5 seconds
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* function evaluateFormula(formula: string): number {
|
|
48
|
+
* return formulaCache.get(formula) ?? computeFormula(formula);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare class LRUCache<K, V> implements ILRUCache<K, V> {
|
|
53
|
+
private capacity;
|
|
54
|
+
private ttl;
|
|
55
|
+
private cache;
|
|
56
|
+
private head;
|
|
57
|
+
private tail;
|
|
58
|
+
private onEvict?;
|
|
59
|
+
private trackStats;
|
|
60
|
+
private hits;
|
|
61
|
+
private misses;
|
|
62
|
+
private evictions;
|
|
63
|
+
private sets;
|
|
64
|
+
constructor(options?: LRUCacheOptions);
|
|
65
|
+
/**
|
|
66
|
+
* Get a value from the cache
|
|
67
|
+
*/
|
|
68
|
+
get(key: K): V | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Set a value in the cache
|
|
71
|
+
*/
|
|
72
|
+
set(key: K, value: V): void;
|
|
73
|
+
/**
|
|
74
|
+
* Check if a key exists
|
|
75
|
+
*/
|
|
76
|
+
has(key: K): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Delete a specific entry
|
|
79
|
+
*/
|
|
80
|
+
delete(key: K): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Clear all entries
|
|
83
|
+
*/
|
|
84
|
+
clear(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Get current size
|
|
87
|
+
*/
|
|
88
|
+
size(): number;
|
|
89
|
+
/**
|
|
90
|
+
* Get statistics
|
|
91
|
+
*/
|
|
92
|
+
getStats(): CacheStats;
|
|
93
|
+
/**
|
|
94
|
+
* Get all keys (oldest to newest)
|
|
95
|
+
*/
|
|
96
|
+
keys(): K[];
|
|
97
|
+
/**
|
|
98
|
+
* Get all values (oldest to newest)
|
|
99
|
+
*/
|
|
100
|
+
values(): V[];
|
|
101
|
+
/**
|
|
102
|
+
* Get all entries with metadata
|
|
103
|
+
*/
|
|
104
|
+
entries(): Array<[K, CacheEntry<V>]>;
|
|
105
|
+
/**
|
|
106
|
+
* Peek without updating LRU order
|
|
107
|
+
*/
|
|
108
|
+
peek(key: K): V | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Resize cache capacity
|
|
111
|
+
*/
|
|
112
|
+
resize(newCapacity: number): void;
|
|
113
|
+
/**
|
|
114
|
+
* Check if a node is expired
|
|
115
|
+
*/
|
|
116
|
+
private isExpired;
|
|
117
|
+
/**
|
|
118
|
+
* Move node to head (most recently used)
|
|
119
|
+
*/
|
|
120
|
+
private moveToHead;
|
|
121
|
+
/**
|
|
122
|
+
* Add node to head
|
|
123
|
+
*/
|
|
124
|
+
private addToHead;
|
|
125
|
+
/**
|
|
126
|
+
* Remove node from list
|
|
127
|
+
*/
|
|
128
|
+
private removeNode;
|
|
129
|
+
/**
|
|
130
|
+
* Evict least recently used entry
|
|
131
|
+
*/
|
|
132
|
+
private evictLRU;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=lru-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../../../src/data-structures/lru-cache/lru-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAiBhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,OAAO,CAAC,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAAU;IAG5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,IAAI,CAAa;gBAEb,OAAO,GAAE,eAAoB;IAYzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IA0B1B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAyB3B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAYpB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAUvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,QAAQ,IAAI,UAAU;IAsBtB;;OAEG;IACH,IAAI,IAAI,CAAC,EAAE;IAYX;;OAEG;IACH,MAAM,IAAI,CAAC,EAAE;IAYb;;OAEG;IACH,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAoBpC;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAa3B;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAejC;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAcjB"}
|