@zengrid/shared 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/README.md +44 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +6250 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +6207 -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.d.ts +55 -0
- package/dist/src/algorithms/sorting/timsort.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 +141 -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/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/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/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/segment-tree.d.ts +134 -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/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 +47 -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/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,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexMap implementation
|
|
3
|
+
* Provides O(1) bidirectional lookup with maintained insertion order
|
|
4
|
+
*/
|
|
5
|
+
import type { IIndexMap, IndexMapEntry, IndexMapOptions } from './index-map.interface';
|
|
6
|
+
/**
|
|
7
|
+
* IndexMap - A hybrid data structure combining Map and Array benefits
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - O(1) key → value lookup
|
|
11
|
+
* - O(1) index → entry lookup
|
|
12
|
+
* - O(1) key → index lookup
|
|
13
|
+
* - Optional O(1) value → key reverse lookup
|
|
14
|
+
* - Maintains insertion order
|
|
15
|
+
*
|
|
16
|
+
* Implementation:
|
|
17
|
+
* - Uses Map for key → {value, index} mapping
|
|
18
|
+
* - Uses Array for index → {key, value} mapping
|
|
19
|
+
* - Optional Map for value → key[] reverse mapping
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const map = new IndexMap<string, number>();
|
|
24
|
+
* map.set('a', 1); // index 0
|
|
25
|
+
* map.set('b', 2); // index 1
|
|
26
|
+
* map.set('c', 3); // index 2
|
|
27
|
+
*
|
|
28
|
+
* map.get('b'); // 2
|
|
29
|
+
* map.getByIndex(1); // { key: 'b', value: 2, index: 1 }
|
|
30
|
+
* map.indexOf('c'); // 2
|
|
31
|
+
* map.getValueByIndex(0); // 1
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class IndexMap<K, V> implements IIndexMap<K, V> {
|
|
35
|
+
private keyToData;
|
|
36
|
+
private indexToEntry;
|
|
37
|
+
private valueToKeys?;
|
|
38
|
+
private readonly reverseMapping;
|
|
39
|
+
constructor(options?: IndexMapOptions);
|
|
40
|
+
/**
|
|
41
|
+
* Set a key-value pair
|
|
42
|
+
*/
|
|
43
|
+
set(key: K, value: V): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get value by key
|
|
46
|
+
*/
|
|
47
|
+
get(key: K): V | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Get entry by index
|
|
50
|
+
*/
|
|
51
|
+
getByIndex(index: number): IndexMapEntry<K, V> | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Get key by index
|
|
54
|
+
*/
|
|
55
|
+
getKeyByIndex(index: number): K | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Get value by index
|
|
58
|
+
*/
|
|
59
|
+
getValueByIndex(index: number): V | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Get the index of a key
|
|
62
|
+
*/
|
|
63
|
+
indexOf(key: K): number;
|
|
64
|
+
/**
|
|
65
|
+
* Reverse lookup: get key(s) by value
|
|
66
|
+
*/
|
|
67
|
+
getKeysByValue(value: V): K[];
|
|
68
|
+
/**
|
|
69
|
+
* Check if a key exists
|
|
70
|
+
*/
|
|
71
|
+
has(key: K): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a value exists
|
|
74
|
+
*/
|
|
75
|
+
hasValue(value: V): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Delete an entry by key
|
|
78
|
+
* Reindexes all subsequent entries
|
|
79
|
+
*/
|
|
80
|
+
delete(key: K): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Delete an entry by index
|
|
83
|
+
*/
|
|
84
|
+
deleteByIndex(index: number): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Clear all entries
|
|
87
|
+
*/
|
|
88
|
+
clear(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get all keys in insertion order
|
|
91
|
+
*/
|
|
92
|
+
keys(): K[];
|
|
93
|
+
/**
|
|
94
|
+
* Get all values in insertion order
|
|
95
|
+
*/
|
|
96
|
+
values(): V[];
|
|
97
|
+
/**
|
|
98
|
+
* Get all entries in insertion order
|
|
99
|
+
*/
|
|
100
|
+
entries(): [K, V][];
|
|
101
|
+
/**
|
|
102
|
+
* Iterate over entries
|
|
103
|
+
*/
|
|
104
|
+
forEach(callback: (value: V, key: K, index: number) => void): void;
|
|
105
|
+
/**
|
|
106
|
+
* Find the first key that satisfies a predicate
|
|
107
|
+
*/
|
|
108
|
+
find(predicate: (value: V, key: K, index: number) => boolean): K | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Filter entries by a predicate
|
|
111
|
+
*/
|
|
112
|
+
filter(predicate: (value: V, key: K, index: number) => boolean): IIndexMap<K, V>;
|
|
113
|
+
/**
|
|
114
|
+
* Map values to a new IndexMap
|
|
115
|
+
*/
|
|
116
|
+
map<U>(mapper: (value: V, key: K, index: number) => U): IIndexMap<K, U>;
|
|
117
|
+
/**
|
|
118
|
+
* Number of entries
|
|
119
|
+
*/
|
|
120
|
+
get size(): number;
|
|
121
|
+
/**
|
|
122
|
+
* Whether reverse mapping is enabled
|
|
123
|
+
*/
|
|
124
|
+
get hasReverseMapping(): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Create IndexMap from an array of entries
|
|
127
|
+
*/
|
|
128
|
+
static from<K, V>(entries: Iterable<[K, V]>, options?: IndexMapOptions): IndexMap<K, V>;
|
|
129
|
+
/**
|
|
130
|
+
* Create IndexMap from a regular Map
|
|
131
|
+
*/
|
|
132
|
+
static fromMap<K, V>(source: Map<K, V>, options?: IndexMapOptions): IndexMap<K, V>;
|
|
133
|
+
/**
|
|
134
|
+
* Create IndexMap from an object
|
|
135
|
+
*/
|
|
136
|
+
static fromObject<V>(obj: Record<string, V>, options?: IndexMapOptions): IndexMap<string, V>;
|
|
137
|
+
/**
|
|
138
|
+
* Convert to a plain object (only works with string keys)
|
|
139
|
+
*/
|
|
140
|
+
toObject(): Record<string, V>;
|
|
141
|
+
/**
|
|
142
|
+
* Convert to a regular Map
|
|
143
|
+
*/
|
|
144
|
+
toMap(): Map<K, V>;
|
|
145
|
+
/**
|
|
146
|
+
* Get a string representation for debugging
|
|
147
|
+
*/
|
|
148
|
+
toString(): string;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=index-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-map.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/data-structures/index-map/index-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexMap interfaces for ZenGrid
|
|
3
|
+
* Provides O(1) bidirectional lookup: key → value, index → entry, and optionally value → key
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Entry in the IndexMap containing both key and value
|
|
7
|
+
*/
|
|
8
|
+
export interface IndexMapEntry<K, V> {
|
|
9
|
+
key: K;
|
|
10
|
+
value: V;
|
|
11
|
+
index: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* IndexMap interface
|
|
15
|
+
*
|
|
16
|
+
* A data structure that combines the benefits of Map and Array:
|
|
17
|
+
* - O(1) key → value lookup (like Map)
|
|
18
|
+
* - O(1) index → entry lookup (like Array)
|
|
19
|
+
* - O(1) key → index lookup
|
|
20
|
+
* - Maintains insertion order
|
|
21
|
+
* - Optional O(1) value → key reverse lookup
|
|
22
|
+
*
|
|
23
|
+
* Use cases:
|
|
24
|
+
* - Column/row mappings where you need both name and index access
|
|
25
|
+
* - Ordered collections with fast lookup by both key and position
|
|
26
|
+
* - Maintaining insertion order while allowing random access
|
|
27
|
+
*/
|
|
28
|
+
export interface IIndexMap<K, V> {
|
|
29
|
+
/**
|
|
30
|
+
* Set a key-value pair
|
|
31
|
+
* If key exists, updates the value without changing index
|
|
32
|
+
* If key is new, appends to the end
|
|
33
|
+
* @param key - The key
|
|
34
|
+
* @param value - The value
|
|
35
|
+
* @returns The index of the entry
|
|
36
|
+
* @complexity O(1)
|
|
37
|
+
*/
|
|
38
|
+
set(key: K, value: V): number;
|
|
39
|
+
/**
|
|
40
|
+
* Get value by key
|
|
41
|
+
* @param key - The key to look up
|
|
42
|
+
* @returns The value or undefined if not found
|
|
43
|
+
* @complexity O(1)
|
|
44
|
+
*/
|
|
45
|
+
get(key: K): V | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Get entry by index
|
|
48
|
+
* @param index - The index (0-based)
|
|
49
|
+
* @returns The entry or undefined if out of bounds
|
|
50
|
+
* @complexity O(1)
|
|
51
|
+
*/
|
|
52
|
+
getByIndex(index: number): IndexMapEntry<K, V> | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Get key by index
|
|
55
|
+
* @param index - The index (0-based)
|
|
56
|
+
* @returns The key or undefined if out of bounds
|
|
57
|
+
* @complexity O(1)
|
|
58
|
+
*/
|
|
59
|
+
getKeyByIndex(index: number): K | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Get value by index
|
|
62
|
+
* @param index - The index (0-based)
|
|
63
|
+
* @returns The value or undefined if out of bounds
|
|
64
|
+
* @complexity O(1)
|
|
65
|
+
*/
|
|
66
|
+
getValueByIndex(index: number): V | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Get the index of a key
|
|
69
|
+
* @param key - The key to look up
|
|
70
|
+
* @returns The index or -1 if not found
|
|
71
|
+
* @complexity O(1)
|
|
72
|
+
*/
|
|
73
|
+
indexOf(key: K): number;
|
|
74
|
+
/**
|
|
75
|
+
* Get the key(s) for a given value (reverse lookup)
|
|
76
|
+
* Only available when enableReverseMapping is true
|
|
77
|
+
* @param value - The value to find
|
|
78
|
+
* @returns Array of keys that map to this value (empty if not found or reverse mapping disabled)
|
|
79
|
+
* @complexity O(1) if reverse mapping enabled, O(n) if disabled
|
|
80
|
+
*/
|
|
81
|
+
getKeysByValue(value: V): K[];
|
|
82
|
+
/**
|
|
83
|
+
* Check if a key exists
|
|
84
|
+
* @param key - The key to check
|
|
85
|
+
* @complexity O(1)
|
|
86
|
+
*/
|
|
87
|
+
has(key: K): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Check if a value exists
|
|
90
|
+
* @param value - The value to check
|
|
91
|
+
* @complexity O(1) if reverse mapping enabled, O(n) if disabled
|
|
92
|
+
*/
|
|
93
|
+
hasValue(value: V): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Delete an entry by key
|
|
96
|
+
* Reindexes all subsequent entries
|
|
97
|
+
* @param key - The key to delete
|
|
98
|
+
* @returns true if the entry existed and was deleted
|
|
99
|
+
* @complexity O(n) due to reindexing
|
|
100
|
+
*/
|
|
101
|
+
delete(key: K): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Delete an entry by index
|
|
104
|
+
* Reindexes all subsequent entries
|
|
105
|
+
* @param index - The index to delete
|
|
106
|
+
* @returns true if the index was valid and entry was deleted
|
|
107
|
+
* @complexity O(n) due to reindexing
|
|
108
|
+
*/
|
|
109
|
+
deleteByIndex(index: number): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Clear all entries
|
|
112
|
+
* @complexity O(1)
|
|
113
|
+
*/
|
|
114
|
+
clear(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Get all keys in insertion order
|
|
117
|
+
* @returns Array of keys
|
|
118
|
+
* @complexity O(n)
|
|
119
|
+
*/
|
|
120
|
+
keys(): K[];
|
|
121
|
+
/**
|
|
122
|
+
* Get all values in insertion order
|
|
123
|
+
* @returns Array of values
|
|
124
|
+
* @complexity O(n)
|
|
125
|
+
*/
|
|
126
|
+
values(): V[];
|
|
127
|
+
/**
|
|
128
|
+
* Get all entries in insertion order
|
|
129
|
+
* @returns Array of [key, value] tuples
|
|
130
|
+
* @complexity O(n)
|
|
131
|
+
*/
|
|
132
|
+
entries(): [K, V][];
|
|
133
|
+
/**
|
|
134
|
+
* Iterate over entries
|
|
135
|
+
* @param callback - Function to call for each entry
|
|
136
|
+
* @complexity O(n)
|
|
137
|
+
*/
|
|
138
|
+
forEach(callback: (value: V, key: K, index: number) => void): void;
|
|
139
|
+
/**
|
|
140
|
+
* Find the first key that satisfies a predicate
|
|
141
|
+
* @param predicate - Test function
|
|
142
|
+
* @returns The key or undefined
|
|
143
|
+
* @complexity O(n)
|
|
144
|
+
*/
|
|
145
|
+
find(predicate: (value: V, key: K, index: number) => boolean): K | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* Filter entries by a predicate
|
|
148
|
+
* @param predicate - Test function
|
|
149
|
+
* @returns New IndexMap with entries that pass the test
|
|
150
|
+
* @complexity O(n)
|
|
151
|
+
*/
|
|
152
|
+
filter(predicate: (value: V, key: K, index: number) => boolean): IIndexMap<K, V>;
|
|
153
|
+
/**
|
|
154
|
+
* Map values to a new IndexMap
|
|
155
|
+
* @param mapper - Transform function
|
|
156
|
+
* @returns New IndexMap with transformed values
|
|
157
|
+
* @complexity O(n)
|
|
158
|
+
*/
|
|
159
|
+
map<U>(mapper: (value: V, key: K, index: number) => U): IIndexMap<K, U>;
|
|
160
|
+
/**
|
|
161
|
+
* Number of entries
|
|
162
|
+
*/
|
|
163
|
+
readonly size: number;
|
|
164
|
+
/**
|
|
165
|
+
* Whether reverse value → key mapping is enabled
|
|
166
|
+
*/
|
|
167
|
+
readonly hasReverseMapping: boolean;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Options for creating an IndexMap
|
|
171
|
+
*/
|
|
172
|
+
export interface IndexMapOptions {
|
|
173
|
+
/**
|
|
174
|
+
* Enable bidirectional value → key lookup
|
|
175
|
+
* Maintains a reverse map for O(1) value → key queries
|
|
176
|
+
* Increases memory usage but enables fast reverse lookups
|
|
177
|
+
* @default false
|
|
178
|
+
*/
|
|
179
|
+
enableReverseMapping?: boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Initial capacity hint for optimization
|
|
182
|
+
* @default 16
|
|
183
|
+
*/
|
|
184
|
+
initialCapacity?: number;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=index-map.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-map.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/data-structures/index-map/index-map.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,CAAC,CAAC;IACP,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE3B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAE3D;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAE5C;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAE9C;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAE9B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAE5B;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAExB;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAEtC;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;OAIG;IACH,IAAI,IAAI,CAAC,EAAE,CAAC;IAEZ;;;;OAIG;IACH,MAAM,IAAI,CAAC,EAAE,CAAC;IAEd;;;;OAIG;IACH,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAEnE;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC;IAE7E;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjF;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/data-structures/index-map/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Structures for ZenGrid
|
|
3
|
+
*/
|
|
4
|
+
export { SparseMatrix } from './sparse-matrix';
|
|
5
|
+
export type { ReadonlySparseMatrix, ISparseMatrix, SparseMatrixOptions, } from './sparse-matrix';
|
|
6
|
+
export { PrefixSumArray } from './prefix-sum-array';
|
|
7
|
+
export type { IPrefixSumArray, PrefixSumArrayOptions, } from './prefix-sum-array';
|
|
8
|
+
export { ColumnStore } from './column-store';
|
|
9
|
+
export type { IColumnStore, ColumnStoreOptions, ColumnDefinition, ColumnType, AggregateOperation, AggregationResult, } from './column-store';
|
|
10
|
+
export { IndexMap } from './index-map';
|
|
11
|
+
export type { IIndexMap, IndexMapEntry, IndexMapOptions, } from './index-map';
|
|
12
|
+
export { IntervalTree } from './interval-tree';
|
|
13
|
+
export type { IIntervalTree, Interval, IntervalData, IntervalTreeOptions, } from './interval-tree';
|
|
14
|
+
export { IntervalUtils } from './interval-tree';
|
|
15
|
+
export { Trie } from './trie';
|
|
16
|
+
export type { ITrie, ITrieNode, TrieOptions, TrieSearchResult, } from './trie';
|
|
17
|
+
export { RTree } from './rtree';
|
|
18
|
+
export type { IRTree, Rectangle, RTreeData, RTreeOptions, RTreeSearchResult, RTreeStats, } from './rtree';
|
|
19
|
+
export { DependencyGraph } from './dependency-graph';
|
|
20
|
+
export type { IDependencyGraph, NodeId, Dependency, DependencyGraphOptions, TopologicalSortResult, GraphStats, } from './dependency-graph';
|
|
21
|
+
export { SuffixArray } from './suffix-array';
|
|
22
|
+
export type { ISuffixArray, SuffixArrayOptions, SuffixSearchResult, SuffixArrayStats, } from './suffix-array';
|
|
23
|
+
export { LRUCache } from './lru-cache';
|
|
24
|
+
export type { ILRUCache, LRUCacheOptions, CacheEntry, CacheStats, } from './lru-cache';
|
|
25
|
+
export { CommandStack } from './command-stack';
|
|
26
|
+
export type { ICommandStack, ICommand, ICommandStackOptions, } from './command-stack';
|
|
27
|
+
export { SegmentTree } from './segment-tree';
|
|
28
|
+
export type { ISegmentTree, SegmentTreeOptions, AggregateFunction, AggregationType, } from './segment-tree';
|
|
29
|
+
export { Aggregations, SegmentTreeUtils } from './segment-tree';
|
|
30
|
+
export { SkipList } from './skip-list';
|
|
31
|
+
export type { ISkipList, SkipListNode, SkipListOptions, RangeResult, SkipListStats, } from './skip-list';
|
|
32
|
+
export { defaultComparator, SkipListUtils } from './skip-list';
|
|
33
|
+
export { DisjointSet } from './disjoint-set';
|
|
34
|
+
export type { IDisjointSet, DisjointSetOptions, DisjointSetStats, } from './disjoint-set';
|
|
35
|
+
export { DisjointSetUtils } from './disjoint-set';
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/shared/src/data-structures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EACV,KAAK,EACL,SAAS,EACT,WAAW,EACX,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EACV,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,QAAQ,EACR,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interval Tree - Augmented BST for interval queries
|
|
3
|
+
*/
|
|
4
|
+
export { IntervalTree } from './interval-tree';
|
|
5
|
+
export type { IIntervalTree, Interval, IntervalData, IntervalTreeOptions, } from './interval-tree.interface';
|
|
6
|
+
export { IntervalUtils } from './interval-tree.interface';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/data-structures/interval-tree/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interval Tree implementation
|
|
3
|
+
* Augmented BST for efficient interval queries
|
|
4
|
+
*/
|
|
5
|
+
import type { IIntervalTree, Interval, IntervalData, IntervalTreeOptions } from './interval-tree.interface';
|
|
6
|
+
/**
|
|
7
|
+
* Interval Tree - Augmented BST for interval queries
|
|
8
|
+
*
|
|
9
|
+
* Implementation:
|
|
10
|
+
* - Each node stores an interval and the max endpoint in its subtree
|
|
11
|
+
* - Balanced using AVL tree rotations for guaranteed O(log n) operations
|
|
12
|
+
* - Intervals are ordered by start time
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const tree = new IntervalTree<string>();
|
|
17
|
+
* tree.insert({ start: 10, end: 20 }, 'A');
|
|
18
|
+
* tree.insert({ start: 15, end: 25 }, 'B');
|
|
19
|
+
* tree.insert({ start: 30, end: 40 }, 'C');
|
|
20
|
+
*
|
|
21
|
+
* tree.search({ start: 18, end: 22 }); // Returns A and B
|
|
22
|
+
* tree.searchPoint(35); // Returns C
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class IntervalTree<T> implements IIntervalTree<T> {
|
|
26
|
+
private root;
|
|
27
|
+
private count;
|
|
28
|
+
private nextId;
|
|
29
|
+
private readonly balanced;
|
|
30
|
+
private readonly allowDuplicates;
|
|
31
|
+
private readonly comparator;
|
|
32
|
+
constructor(options?: IntervalTreeOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Insert an interval
|
|
35
|
+
*/
|
|
36
|
+
insert(interval: Interval, data: T): IntervalData<T>;
|
|
37
|
+
private insertNode;
|
|
38
|
+
/**
|
|
39
|
+
* Delete an interval
|
|
40
|
+
*/
|
|
41
|
+
delete(intervalData: IntervalData<T>): boolean;
|
|
42
|
+
private deleteNode;
|
|
43
|
+
/**
|
|
44
|
+
* Delete by ID
|
|
45
|
+
*/
|
|
46
|
+
deleteById(id: string | number): boolean;
|
|
47
|
+
private findById;
|
|
48
|
+
/**
|
|
49
|
+
* Find all overlapping intervals
|
|
50
|
+
*/
|
|
51
|
+
search(interval: Interval): IntervalData<T>[];
|
|
52
|
+
private searchOverlap;
|
|
53
|
+
/**
|
|
54
|
+
* Find all intervals containing a point
|
|
55
|
+
*/
|
|
56
|
+
searchPoint(point: number): IntervalData<T>[];
|
|
57
|
+
/**
|
|
58
|
+
* Find all intervals contained within the given interval
|
|
59
|
+
*/
|
|
60
|
+
searchContained(interval: Interval): IntervalData<T>[];
|
|
61
|
+
private searchContainedHelper;
|
|
62
|
+
/**
|
|
63
|
+
* Find all intervals containing the given interval
|
|
64
|
+
*/
|
|
65
|
+
searchContaining(interval: Interval): IntervalData<T>[];
|
|
66
|
+
private searchContainingHelper;
|
|
67
|
+
/**
|
|
68
|
+
* Find minimum interval (by start time)
|
|
69
|
+
*/
|
|
70
|
+
findMin(): IntervalData<T> | undefined;
|
|
71
|
+
private findMinNode;
|
|
72
|
+
/**
|
|
73
|
+
* Find maximum interval (by max endpoint in tree)
|
|
74
|
+
*/
|
|
75
|
+
findMax(): IntervalData<T> | undefined;
|
|
76
|
+
private findMaxHelper;
|
|
77
|
+
/**
|
|
78
|
+
* Check if any interval overlaps
|
|
79
|
+
*/
|
|
80
|
+
hasOverlap(interval: Interval): boolean;
|
|
81
|
+
private hasOverlapHelper;
|
|
82
|
+
/**
|
|
83
|
+
* Get all intervals in sorted order
|
|
84
|
+
*/
|
|
85
|
+
inorder(): IntervalData<T>[];
|
|
86
|
+
private inorderHelper;
|
|
87
|
+
/**
|
|
88
|
+
* Iterate over all intervals
|
|
89
|
+
*/
|
|
90
|
+
forEach(callback: (interval: IntervalData<T>) => void): void;
|
|
91
|
+
private forEachHelper;
|
|
92
|
+
/**
|
|
93
|
+
* Filter intervals
|
|
94
|
+
*/
|
|
95
|
+
filter(predicate: (interval: IntervalData<T>) => boolean): IIntervalTree<T>;
|
|
96
|
+
/**
|
|
97
|
+
* Map intervals
|
|
98
|
+
*/
|
|
99
|
+
map<U>(mapper: (data: T, interval: Interval) => U): IIntervalTree<U>;
|
|
100
|
+
/**
|
|
101
|
+
* Clear the tree
|
|
102
|
+
*/
|
|
103
|
+
clear(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Get tree size
|
|
106
|
+
*/
|
|
107
|
+
get size(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Check if empty
|
|
110
|
+
*/
|
|
111
|
+
get isEmpty(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Get tree height
|
|
114
|
+
*/
|
|
115
|
+
get height(): number;
|
|
116
|
+
private getHeight;
|
|
117
|
+
/**
|
|
118
|
+
* AVL balancing methods
|
|
119
|
+
*/
|
|
120
|
+
private balance;
|
|
121
|
+
private getBalanceFactor;
|
|
122
|
+
private rotateLeft;
|
|
123
|
+
private rotateRight;
|
|
124
|
+
/**
|
|
125
|
+
* Create IntervalTree from array of intervals
|
|
126
|
+
*/
|
|
127
|
+
static from<T>(intervals: Array<{
|
|
128
|
+
interval: Interval;
|
|
129
|
+
data: T;
|
|
130
|
+
}>, options?: IntervalTreeOptions): IntervalTree<T>;
|
|
131
|
+
/**
|
|
132
|
+
* Debug: Get tree structure as string
|
|
133
|
+
*/
|
|
134
|
+
toString(): string;
|
|
135
|
+
/**
|
|
136
|
+
* Debug: Validate tree structure
|
|
137
|
+
*/
|
|
138
|
+
validate(): boolean;
|
|
139
|
+
private validateNode;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=interval-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval-tree.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/data-structures/interval-tree/interval-tree.ts"],"names":[],"mappings":"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"}
|