typescript-dsa-stl 1.3.0 → 1.4.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 CHANGED
@@ -175,12 +175,12 @@ import type { Comparator } from 'typescript-dsa-stl/types';
175
175
  | **Queue** | — | O(1)* | — | O(1)* | — |
176
176
  | **List** | O(n) | O(1) | O(1)** | O(1) | O(1)** |
177
177
  | **PriorityQueue** | — | O(log n) | — | O(log n) | — |
178
- | **OrderedMap** (Map) | O(log n) get | O(n) set | — | O(n) delete | — |
178
+ | **OrderedMap** (Map) | O(log n) get | O(log n) set | — | O(log n) delete | — |
179
179
  | **UnorderedMap** | O(1)* get/set | O(1)* | — | O(1)* delete | — |
180
- | **OrderedSet** (Set) | O(log n) has | O(n) add | — | O(n) delete | — |
180
+ | **OrderedSet** (Set) | O(log n) has | O(log n) add | — | O(log n) delete | — |
181
181
  | **UnorderedSet** | O(1)* has/add | O(1)* | — | O(1)* delete | — |
182
- | **OrderedMultiMap** | O(log n) get | O(n) set | — | O(n) delete | — |
183
- | **OrderedMultiSet** | O(log n) has/count | O(n) add | — | O(n) delete | — |
182
+ | **OrderedMultiMap** | O(log n) get | O(log n) set | — | O(log n) delete | — |
183
+ | **OrderedMultiSet** | O(log n) has/count | O(log n) add | — | O(log n) delete | — |
184
184
 
185
185
  \* Amortized (hash).
186
186
  \** At a known node.
@@ -1,15 +1,13 @@
1
1
  /**
2
- * Ordered map (STL-style map). Keys sorted by comparator. O(log n) get/has, O(n) set/delete.
3
- * Implemented with a sorted array and binary search.
2
+ * Ordered map (STL-style map). Keys sorted by comparator.
3
+ * O(log n) get/set/has/delete. Implemented with a Red-Black tree.
4
4
  */
5
5
  import type { Comparator } from '../types/index.js';
6
6
  export declare class OrderedMap<K, V> {
7
- private _entries;
8
- private _compare;
7
+ private _tree;
9
8
  constructor(compare?: Comparator<K>);
10
9
  get size(): number;
11
10
  get empty(): boolean;
12
- private _lowerBound;
13
11
  get(key: K): V | undefined;
14
12
  set(key: K, value: V): void;
15
13
  has(key: K): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMap.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAInC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,OAAO,CAAC,WAAW;IAYnB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAQ1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAS3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IASvB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;IAInB,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIrB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGtC"}
1
+ {"version":3,"file":"OrderedMap.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAqB;gBAEtB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAOnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAI1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;IAInB,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIrB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGtC"}
@@ -1,71 +1,46 @@
1
+ import { RedBlackTree } from './RedBlackTree.js';
1
2
  function defaultCompare(a, b) {
2
3
  return a < b ? -1 : a > b ? 1 : 0;
3
4
  }
4
5
  export class OrderedMap {
5
6
  constructor(compare) {
6
- this._entries = [];
7
- this._compare = compare ?? defaultCompare;
7
+ this._tree = new RedBlackTree({
8
+ compare: compare ?? defaultCompare,
9
+ allowDuplicateKeys: false,
10
+ });
8
11
  }
9
12
  get size() {
10
- return this._entries.length;
13
+ return this._tree.size;
11
14
  }
12
15
  get empty() {
13
- return this._entries.length === 0;
14
- }
15
- _lowerBound(key) {
16
- const cmp = this._compare;
17
- let lo = 0;
18
- let hi = this._entries.length;
19
- while (lo < hi) {
20
- const mid = (lo + hi) >>> 1;
21
- if (cmp(this._entries[mid][0], key) < 0)
22
- lo = mid + 1;
23
- else
24
- hi = mid;
25
- }
26
- return lo;
16
+ return this._tree.empty;
27
17
  }
28
18
  get(key) {
29
- const i = this._lowerBound(key);
30
- if (i < this._entries.length && this._compare(this._entries[i][0], key) === 0) {
31
- return this._entries[i][1];
32
- }
33
- return undefined;
19
+ return this._tree.get(key);
34
20
  }
35
21
  set(key, value) {
36
- const i = this._lowerBound(key);
37
- if (i < this._entries.length && this._compare(this._entries[i][0], key) === 0) {
38
- this._entries[i][1] = value;
39
- }
40
- else {
41
- this._entries.splice(i, 0, [key, value]);
42
- }
22
+ this._tree.set(key, value);
43
23
  }
44
24
  has(key) {
45
- return this.get(key) !== undefined;
25
+ return this._tree.has(key);
46
26
  }
47
27
  delete(key) {
48
- const i = this._lowerBound(key);
49
- if (i < this._entries.length && this._compare(this._entries[i][0], key) === 0) {
50
- this._entries.splice(i, 1);
51
- return true;
52
- }
53
- return false;
28
+ return this._tree.deleteKey(key);
54
29
  }
55
30
  clear() {
56
- this._entries.length = 0;
31
+ this._tree.clear();
57
32
  }
58
33
  keys() {
59
- return this._entries.map((e) => e[0]);
34
+ return this._tree.keys();
60
35
  }
61
36
  values() {
62
- return this._entries.map((e) => e[1]);
37
+ return this._tree.values();
63
38
  }
64
39
  entries() {
65
- return this._entries;
40
+ return this._tree.entries();
66
41
  }
67
42
  [Symbol.iterator]() {
68
- return this._entries[Symbol.iterator]();
43
+ return this._tree.entries();
69
44
  }
70
45
  }
71
46
  //# sourceMappingURL=OrderedMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMap.js","sourceRoot":"","sources":["../../src/collections/OrderedMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrderedMap.js","sourceRoot":"","sources":["../../src/collections/OrderedMap.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,cAAc,CAAI,CAAI,EAAE,CAAI;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,UAAU;IAGrB,YAAY,OAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAO;YAClC,OAAO,EAAE,OAAO,IAAI,cAAc;YAClC,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -1,16 +1,14 @@
1
1
  /**
2
2
  * Ordered multimap (STL-style multimap). Keys sorted by comparator; one key can have multiple values.
3
- * O(log n) get/has, O(n) set/delete. Implemented with a sorted array of [key, value] pairs.
3
+ * O(log n) get/set/has/delete. Implemented with a Red-Black tree (duplicate keys allowed).
4
4
  */
5
5
  import type { Comparator } from '../types/index.js';
6
6
  export declare class OrderedMultiMap<K, V> {
7
- private _entries;
7
+ private _tree;
8
8
  private _compare;
9
9
  constructor(compare?: Comparator<K>);
10
10
  get size(): number;
11
11
  get empty(): boolean;
12
- private _lowerBound;
13
- private _upperBound;
14
12
  /** First value for key, or undefined. */
15
13
  get(key: K): V | undefined;
16
14
  /** All values for key (in order). */
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMultiMap.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMultiMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAInC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAYnB,yCAAyC;IACzC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAQ1B,qCAAqC;IACrC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;IAMnB,qDAAqD;IACrD,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAK3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAKpB,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;IASnC,qCAAqC;IACrC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM;IAIrB,qGAAqG;IACrG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO;IAiBlC,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM;IAQzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;IAInB,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIrB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGtC"}
1
+ {"version":3,"file":"OrderedMultiMap.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMultiMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAQnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,yCAAyC;IACzC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAK1B,qCAAqC;IACrC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;IAUnB,qDAAqD;IACrD,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;IASnC,qCAAqC;IACrC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM;IAIrB,qGAAqG;IACrG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO;IAelC,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;IAInB,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIrB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGtC"}
@@ -1,121 +1,90 @@
1
+ import { RedBlackTree } from './RedBlackTree.js';
1
2
  function defaultCompare(a, b) {
2
3
  return a < b ? -1 : a > b ? 1 : 0;
3
4
  }
4
5
  export class OrderedMultiMap {
5
6
  constructor(compare) {
6
- this._entries = [];
7
7
  this._compare = compare ?? defaultCompare;
8
+ this._tree = new RedBlackTree({
9
+ compare: this._compare,
10
+ allowDuplicateKeys: true,
11
+ });
8
12
  }
9
13
  get size() {
10
- return this._entries.length;
14
+ return this._tree.size;
11
15
  }
12
16
  get empty() {
13
- return this._entries.length === 0;
14
- }
15
- _lowerBound(key) {
16
- const cmp = this._compare;
17
- let lo = 0;
18
- let hi = this._entries.length;
19
- while (lo < hi) {
20
- const mid = (lo + hi) >>> 1;
21
- if (cmp(this._entries[mid][0], key) < 0)
22
- lo = mid + 1;
23
- else
24
- hi = mid;
25
- }
26
- return lo;
27
- }
28
- _upperBound(key) {
29
- const cmp = this._compare;
30
- let lo = 0;
31
- let hi = this._entries.length;
32
- while (lo < hi) {
33
- const mid = (lo + hi) >>> 1;
34
- if (cmp(key, this._entries[mid][0]) < 0)
35
- hi = mid;
36
- else
37
- lo = mid + 1;
38
- }
39
- return lo;
17
+ return this._tree.empty;
40
18
  }
41
19
  /** First value for key, or undefined. */
42
20
  get(key) {
43
- const i = this._lowerBound(key);
44
- if (i < this._entries.length && this._compare(this._entries[i][0], key) === 0) {
45
- return this._entries[i][1];
46
- }
47
- return undefined;
21
+ const node = this._tree.find(key);
22
+ return node ? node.value : undefined;
48
23
  }
49
24
  /** All values for key (in order). */
50
25
  getAll(key) {
51
- const lo = this._lowerBound(key);
52
- const hi = this._upperBound(key);
53
- return this._entries.slice(lo, hi).map((e) => e[1]);
26
+ const out = [];
27
+ let node = this._tree.lowerBound(key);
28
+ while (node !== null && this._compare(node.key, key) === 0) {
29
+ out.push(node.value);
30
+ node = this._tree.successor(node);
31
+ }
32
+ return out;
54
33
  }
55
34
  /** Add a key-value pair (duplicate keys allowed). */
56
35
  set(key, value) {
57
- const i = this._lowerBound(key);
58
- this._entries.splice(i, 0, [key, value]);
36
+ this._tree.set(key, value);
59
37
  }
60
38
  has(key) {
61
- const i = this._lowerBound(key);
62
- return i < this._entries.length && this._compare(this._entries[i][0], key) === 0;
39
+ return this._tree.has(key);
63
40
  }
64
41
  /** True if the pair (key, value) exists. */
65
42
  hasEntry(key, value) {
66
- const lo = this._lowerBound(key);
67
- const hi = this._upperBound(key);
68
- for (let j = lo; j < hi; j++) {
69
- if (this._entries[j][1] === value)
43
+ let node = this._tree.lowerBound(key);
44
+ while (node !== null && this._compare(node.key, key) === 0) {
45
+ if (node.value === value)
70
46
  return true;
47
+ node = this._tree.successor(node);
71
48
  }
72
49
  return false;
73
50
  }
74
51
  /** Number of pairs with this key. */
75
52
  count(key) {
76
- return this._upperBound(key) - this._lowerBound(key);
53
+ return this._tree.count(key);
77
54
  }
78
55
  /** Remove one pair for key (first). If value is given, remove that pair. Returns true if removed. */
79
56
  delete(key, value) {
80
- const lo = this._lowerBound(key);
81
- const hi = this._upperBound(key);
82
- if (lo >= hi)
83
- return false;
84
- if (value !== undefined) {
85
- for (let j = lo; j < hi; j++) {
86
- if (this._entries[j][1] === value) {
87
- this._entries.splice(j, 1);
88
- return true;
89
- }
57
+ if (value === undefined) {
58
+ return this._tree.deleteKey(key);
59
+ }
60
+ let node = this._tree.lowerBound(key);
61
+ while (node !== null && this._compare(node.key, key) === 0) {
62
+ if (node.value === value) {
63
+ this._tree.deleteNode(node);
64
+ return true;
90
65
  }
91
- return false;
66
+ node = this._tree.successor(node);
92
67
  }
93
- this._entries.splice(lo, 1);
94
- return true;
68
+ return false;
95
69
  }
96
70
  /** Remove all pairs for key. Returns count removed. */
97
71
  deleteAll(key) {
98
- const lo = this._lowerBound(key);
99
- const hi = this._upperBound(key);
100
- const removed = hi - lo;
101
- if (removed > 0)
102
- this._entries.splice(lo, removed);
103
- return removed;
72
+ return this._tree.deleteAllKeys(key);
104
73
  }
105
74
  clear() {
106
- this._entries.length = 0;
75
+ this._tree.clear();
107
76
  }
108
77
  keys() {
109
- return this._entries.map((e) => e[0]);
78
+ return this._tree.keys();
110
79
  }
111
80
  values() {
112
- return this._entries.map((e) => e[1]);
81
+ return this._tree.values();
113
82
  }
114
83
  entries() {
115
- return this._entries;
84
+ return this._tree.entries();
116
85
  }
117
86
  [Symbol.iterator]() {
118
- return this._entries[Symbol.iterator]();
87
+ return this._tree.entries();
119
88
  }
120
89
  }
121
90
  //# sourceMappingURL=OrderedMultiMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMultiMap.js","sourceRoot":"","sources":["../../src/collections/OrderedMultiMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrderedMultiMap.js","sourceRoot":"","sources":["../../src/collections/OrderedMultiMap.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,13 @@
1
1
  /**
2
2
  * Ordered multiset (STL-style multiset). Elements sorted by comparator; duplicates allowed.
3
- * O(log n) has/count, O(n) add/delete. Implemented with a sorted array and binary search.
3
+ * O(log n) has/count/add/delete. Implemented with a Red-Black tree (duplicate keys allowed).
4
4
  */
5
5
  import type { Comparator } from '../types/index.js';
6
6
  export declare class OrderedMultiSet<T> {
7
- private _data;
8
- private _compare;
7
+ private _tree;
9
8
  constructor(compare?: Comparator<T>);
10
9
  get size(): number;
11
10
  get empty(): boolean;
12
- private _lowerBound;
13
- private _upperBound;
14
11
  has(value: T): boolean;
15
12
  /** Number of elements equal to value. */
16
13
  count(value: T): number;
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMultiSet.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMultiSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,eAAe,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAInC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAYnB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAKtB,yCAAyC;IACzC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAIvB,yCAAyC;IACzC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAKnB,+DAA+D;IAC/D,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IASzB,8DAA8D;IAC9D,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAQ3B,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,OAAO,IAAI,CAAC,EAAE;CAGf"}
1
+ {"version":3,"file":"OrderedMultiSet.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedMultiSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,qBAAa,eAAe,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAqB;gBAEtB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAOnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAItB,yCAAyC;IACzC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAIvB,yCAAyC;IACzC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAInB,+DAA+D;IAC/D,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAIzB,8DAA8D;IAC9D,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAI3B,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,OAAO,IAAI,CAAC,EAAE;CAGf"}
@@ -1,82 +1,47 @@
1
+ import { RedBlackTree } from './RedBlackTree.js';
1
2
  function defaultCompare(a, b) {
2
3
  return a < b ? -1 : a > b ? 1 : 0;
3
4
  }
4
5
  export class OrderedMultiSet {
5
6
  constructor(compare) {
6
- this._data = [];
7
- this._compare = compare ?? defaultCompare;
7
+ this._tree = new RedBlackTree({
8
+ compare: compare ?? defaultCompare,
9
+ allowDuplicateKeys: true,
10
+ });
8
11
  }
9
12
  get size() {
10
- return this._data.length;
13
+ return this._tree.size;
11
14
  }
12
15
  get empty() {
13
- return this._data.length === 0;
14
- }
15
- _lowerBound(value) {
16
- const cmp = this._compare;
17
- let lo = 0;
18
- let hi = this._data.length;
19
- while (lo < hi) {
20
- const mid = (lo + hi) >>> 1;
21
- if (cmp(this._data[mid], value) < 0)
22
- lo = mid + 1;
23
- else
24
- hi = mid;
25
- }
26
- return lo;
27
- }
28
- _upperBound(value) {
29
- const cmp = this._compare;
30
- let lo = 0;
31
- let hi = this._data.length;
32
- while (lo < hi) {
33
- const mid = (lo + hi) >>> 1;
34
- if (cmp(value, this._data[mid]) < 0)
35
- hi = mid;
36
- else
37
- lo = mid + 1;
38
- }
39
- return lo;
16
+ return this._tree.empty;
40
17
  }
41
18
  has(value) {
42
- const i = this._lowerBound(value);
43
- return i < this._data.length && this._compare(this._data[i], value) === 0;
19
+ return this._tree.has(value);
44
20
  }
45
21
  /** Number of elements equal to value. */
46
22
  count(value) {
47
- return this._upperBound(value) - this._lowerBound(value);
23
+ return this._tree.count(value);
48
24
  }
49
25
  /** Insert value (duplicates allowed). */
50
26
  add(value) {
51
- const i = this._lowerBound(value);
52
- this._data.splice(i, 0, value);
27
+ this._tree.set(value, value);
53
28
  }
54
29
  /** Remove one occurrence of value. Returns true if removed. */
55
30
  delete(value) {
56
- const i = this._lowerBound(value);
57
- if (i < this._data.length && this._compare(this._data[i], value) === 0) {
58
- this._data.splice(i, 1);
59
- return true;
60
- }
61
- return false;
31
+ return this._tree.deleteKey(value);
62
32
  }
63
33
  /** Remove all occurrences of value. Returns count removed. */
64
34
  deleteAll(value) {
65
- const lo = this._lowerBound(value);
66
- const hi = this._upperBound(value);
67
- const removed = hi - lo;
68
- if (removed > 0)
69
- this._data.splice(lo, removed);
70
- return removed;
35
+ return this._tree.deleteAllKeys(value);
71
36
  }
72
37
  clear() {
73
- this._data.length = 0;
38
+ this._tree.clear();
74
39
  }
75
40
  [Symbol.iterator]() {
76
- return this._data[Symbol.iterator]();
41
+ return this._tree.keys();
77
42
  }
78
43
  toArray() {
79
- return [...this._data];
44
+ return [...this._tree.keys()];
80
45
  }
81
46
  }
82
47
  //# sourceMappingURL=OrderedMultiSet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedMultiSet.js","sourceRoot":"","sources":["../../src/collections/OrderedMultiSet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OrderedMultiSet.js","sourceRoot":"","sources":["../../src/collections/OrderedMultiSet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,cAAc,CAAI,CAAI,EAAE,CAAI;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,eAAe;IAG1B,YAAY,OAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAO;YAClC,OAAO,EAAE,OAAO,IAAI,cAAc;YAClC,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,KAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,yCAAyC;IACzC,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,+DAA+D;IAC/D,MAAM,CAAC,KAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,KAAQ;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -1,15 +1,13 @@
1
1
  /**
2
- * Ordered set (STL-style set). Unique elements sorted by comparator. O(log n) has, O(n) add/delete.
3
- * Implemented with a sorted array and binary search.
2
+ * Ordered set (STL-style set). Unique elements sorted by comparator.
3
+ * O(log n) has/add/delete. Implemented with a Red-Black tree.
4
4
  */
5
5
  import type { Comparator } from '../types/index.js';
6
6
  export declare class OrderedSet<T> {
7
- private _data;
8
- private _compare;
7
+ private _tree;
9
8
  constructor(compare?: Comparator<T>);
10
9
  get size(): number;
11
10
  get empty(): boolean;
12
- private _lowerBound;
13
11
  has(value: T): boolean;
14
12
  add(value: T): void;
15
13
  delete(value: T): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedSet.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAInC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,OAAO,CAAC,WAAW;IAYnB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAKtB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAOnB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IASzB,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,OAAO,IAAI,CAAC,EAAE;CAGf"}
1
+ {"version":3,"file":"OrderedSet.d.ts","sourceRoot":"","sources":["../../src/collections/OrderedSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAqB;gBAEtB,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAOnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAItB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAInB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAIhC,OAAO,IAAI,CAAC,EAAE;CAGf"}
@@ -1,56 +1,37 @@
1
+ import { RedBlackTree } from './RedBlackTree.js';
1
2
  function defaultCompare(a, b) {
2
3
  return a < b ? -1 : a > b ? 1 : 0;
3
4
  }
4
5
  export class OrderedSet {
5
6
  constructor(compare) {
6
- this._data = [];
7
- this._compare = compare ?? defaultCompare;
7
+ this._tree = new RedBlackTree({
8
+ compare: compare ?? defaultCompare,
9
+ allowDuplicateKeys: false,
10
+ });
8
11
  }
9
12
  get size() {
10
- return this._data.length;
13
+ return this._tree.size;
11
14
  }
12
15
  get empty() {
13
- return this._data.length === 0;
14
- }
15
- _lowerBound(value) {
16
- const cmp = this._compare;
17
- let lo = 0;
18
- let hi = this._data.length;
19
- while (lo < hi) {
20
- const mid = (lo + hi) >>> 1;
21
- if (cmp(this._data[mid], value) < 0)
22
- lo = mid + 1;
23
- else
24
- hi = mid;
25
- }
26
- return lo;
16
+ return this._tree.empty;
27
17
  }
28
18
  has(value) {
29
- const i = this._lowerBound(value);
30
- return i < this._data.length && this._compare(this._data[i], value) === 0;
19
+ return this._tree.has(value);
31
20
  }
32
21
  add(value) {
33
- const i = this._lowerBound(value);
34
- if (i >= this._data.length || this._compare(this._data[i], value) !== 0) {
35
- this._data.splice(i, 0, value);
36
- }
22
+ this._tree.set(value, value);
37
23
  }
38
24
  delete(value) {
39
- const i = this._lowerBound(value);
40
- if (i < this._data.length && this._compare(this._data[i], value) === 0) {
41
- this._data.splice(i, 1);
42
- return true;
43
- }
44
- return false;
25
+ return this._tree.deleteKey(value);
45
26
  }
46
27
  clear() {
47
- this._data.length = 0;
28
+ this._tree.clear();
48
29
  }
49
30
  [Symbol.iterator]() {
50
- return this._data[Symbol.iterator]();
31
+ return this._tree.keys();
51
32
  }
52
33
  toArray() {
53
- return [...this._data];
34
+ return [...this._tree.keys()];
54
35
  }
55
36
  }
56
37
  //# sourceMappingURL=OrderedSet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderedSet.js","sourceRoot":"","sources":["../../src/collections/OrderedSet.ts"],"names":[],"mappings":"AAMA,SAAS,cAAc,CAAI,CAAI,EAAE,CAAI;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,UAAU;IAIrB,YAAY,OAAuB;QAH3B,UAAK,GAAQ,EAAE,CAAC;QAItB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,cAAc,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAEO,WAAW,CAAC,KAAQ;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;gBAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;gBAC7C,EAAE,GAAG,GAAG,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"OrderedSet.js","sourceRoot":"","sources":["../../src/collections/OrderedSet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,cAAc,CAAI,CAAI,EAAE,CAAI;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,UAAU;IAGrB,YAAY,OAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAO;YAClC,OAAO,EAAE,OAAO,IAAI,cAAc;YAClC,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Red-Black tree. O(log n) get/set/add/delete. Used by OrderedSet, OrderedMap, OrderedMultiSet, OrderedMultiMap.
3
+ */
4
+ import type { Comparator } from '../types/index.js';
5
+ export declare class RBNode<K, V> {
6
+ key: K;
7
+ value: V;
8
+ left: RBNode<K, V>;
9
+ right: RBNode<K, V>;
10
+ parent: RBNode<K, V>;
11
+ color: 0 | 1;
12
+ constructor(key: K, value: V, color: 0 | 1);
13
+ }
14
+ export interface RedBlackTreeOptions<K> {
15
+ compare?: Comparator<K>;
16
+ /** If true, multiple nodes can have the same key (for MultiSet/MultiMap). */
17
+ allowDuplicateKeys?: boolean;
18
+ }
19
+ export declare class RedBlackTree<K, V> {
20
+ private _nil;
21
+ private _root;
22
+ private _compare;
23
+ private _allowDuplicateKeys;
24
+ private _nodeCount;
25
+ constructor(options?: RedBlackTreeOptions<K>);
26
+ get size(): number;
27
+ get empty(): boolean;
28
+ private _cmp;
29
+ /** Insert position: when equal and allowDuplicateKeys, go right; else we replace (handled in set). */
30
+ private _insertPosition;
31
+ /** Find leftmost node with key >= key. */
32
+ lowerBound(key: K): RBNode<K, V> | null;
33
+ /** Find leftmost node with key > key. */
34
+ upperBound(key: K): RBNode<K, V> | null;
35
+ find(key: K): RBNode<K, V> | null;
36
+ has(key: K): boolean;
37
+ get(key: K): V | undefined;
38
+ /**
39
+ * Set or insert. If allowDuplicateKeys is false and key exists, replaces value.
40
+ * Otherwise inserts. Returns the node (existing or new).
41
+ */
42
+ set(key: K, value: V): RBNode<K, V>;
43
+ private _leftRotate;
44
+ private _rightRotate;
45
+ private _insertFixup;
46
+ /** Remove one node with key. Returns true if removed. */
47
+ deleteKey(key: K): boolean;
48
+ /** Remove all nodes with key. Returns count removed. */
49
+ deleteAllKeys(key: K): number;
50
+ /** Remove this node. */
51
+ deleteNode(z: RBNode<K, V>): void;
52
+ private _deleteNode;
53
+ private _transplant;
54
+ private _minimum;
55
+ private _deleteFixup;
56
+ /** Number of nodes with key === key (for duplicate-key trees). */
57
+ count(key: K): number;
58
+ /** Number of nodes with key in [lowerKey, upperKey). */
59
+ countBetween(lowerKey: K, upperKey: K): number;
60
+ /** In-order successor (internal use). */
61
+ successor(node: RBNode<K, V>): RBNode<K, V> | null;
62
+ /** In-order successor. */
63
+ private _successor;
64
+ /** First node in in-order (leftmost). */
65
+ first(): RBNode<K, V> | null;
66
+ clear(): void;
67
+ /** In-order iteration over nodes. */
68
+ nodes(): IterableIterator<RBNode<K, V>>;
69
+ /** In-order iteration over [key, value] pairs. */
70
+ entries(): IterableIterator<[K, V]>;
71
+ keys(): IterableIterator<K>;
72
+ values(): IterableIterator<V>;
73
+ }
74
+ //# sourceMappingURL=RedBlackTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedBlackTree.d.ts","sourceRoot":"","sources":["../../src/collections/RedBlackTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,414 @@
1
+ const RED = 0;
2
+ const BLACK = 1;
3
+ export class RBNode {
4
+ constructor(key, value, color) {
5
+ this.key = key;
6
+ this.value = value;
7
+ this.color = color;
8
+ this.left = this;
9
+ this.right = this;
10
+ this.parent = this;
11
+ }
12
+ }
13
+ export class RedBlackTree {
14
+ constructor(options = {}) {
15
+ this._nodeCount = 0;
16
+ this._compare = options.compare ?? ((a, b) => (a < b ? -1 : a > b ? 1 : 0));
17
+ this._allowDuplicateKeys = options.allowDuplicateKeys ?? false;
18
+ this._nil = new RBNode(null, null, BLACK);
19
+ this._nil.left = this._nil;
20
+ this._nil.right = this._nil;
21
+ this._nil.parent = this._nil;
22
+ this._root = this._nil;
23
+ }
24
+ get size() {
25
+ return this._nodeCount;
26
+ }
27
+ get empty() {
28
+ return this._nodeCount === 0;
29
+ }
30
+ _cmp(a, b) {
31
+ return this._compare(a, b);
32
+ }
33
+ /** Insert position: when equal and allowDuplicateKeys, go right; else we replace (handled in set). */
34
+ _insertPosition(key) {
35
+ let x = this._root;
36
+ let p = this._nil;
37
+ let goRight = false;
38
+ while (x !== this._nil) {
39
+ p = x;
40
+ const c = this._cmp(key, x.key);
41
+ if (c < 0) {
42
+ x = x.left;
43
+ goRight = false;
44
+ }
45
+ else if (c > 0) {
46
+ x = x.right;
47
+ goRight = true;
48
+ }
49
+ else {
50
+ if (this._allowDuplicateKeys) {
51
+ x = x.right;
52
+ goRight = true;
53
+ }
54
+ else {
55
+ return { node: x, goRight: true };
56
+ }
57
+ }
58
+ }
59
+ return { node: p, goRight };
60
+ }
61
+ /** Find leftmost node with key >= key. */
62
+ lowerBound(key) {
63
+ let x = this._root;
64
+ let result = null;
65
+ while (x !== this._nil) {
66
+ const c = this._cmp(x.key, key);
67
+ if (c >= 0) {
68
+ result = x;
69
+ x = x.left;
70
+ }
71
+ else {
72
+ x = x.right;
73
+ }
74
+ }
75
+ return result;
76
+ }
77
+ /** Find leftmost node with key > key. */
78
+ upperBound(key) {
79
+ let x = this._root;
80
+ let result = null;
81
+ while (x !== this._nil) {
82
+ if (this._cmp(x.key, key) > 0) {
83
+ result = x;
84
+ x = x.left;
85
+ }
86
+ else {
87
+ x = x.right;
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+ find(key) {
93
+ const node = this.lowerBound(key);
94
+ if (node !== null && this._cmp(node.key, key) === 0)
95
+ return node;
96
+ return null;
97
+ }
98
+ has(key) {
99
+ return this.find(key) !== null;
100
+ }
101
+ get(key) {
102
+ const node = this.find(key);
103
+ return node ? node.value : undefined;
104
+ }
105
+ /**
106
+ * Set or insert. If allowDuplicateKeys is false and key exists, replaces value.
107
+ * Otherwise inserts. Returns the node (existing or new).
108
+ */
109
+ set(key, value) {
110
+ const { node: p, goRight } = this._insertPosition(key);
111
+ if (!this._allowDuplicateKeys && p !== this._nil && this._cmp(p.key, key) === 0) {
112
+ p.value = value;
113
+ return p;
114
+ }
115
+ const z = new RBNode(key, value, RED);
116
+ z.left = this._nil;
117
+ z.right = this._nil;
118
+ z.parent = p;
119
+ if (p === this._nil) {
120
+ this._root = z;
121
+ }
122
+ else if (goRight) {
123
+ p.right = z;
124
+ }
125
+ else {
126
+ p.left = z;
127
+ }
128
+ this._nodeCount++;
129
+ this._insertFixup(z);
130
+ return z;
131
+ }
132
+ _leftRotate(x) {
133
+ const y = x.right;
134
+ x.right = y.left;
135
+ if (y.left !== this._nil)
136
+ y.left.parent = x;
137
+ y.parent = x.parent;
138
+ if (x.parent === this._nil) {
139
+ this._root = y;
140
+ }
141
+ else if (x === x.parent.left) {
142
+ x.parent.left = y;
143
+ }
144
+ else {
145
+ x.parent.right = y;
146
+ }
147
+ y.left = x;
148
+ x.parent = y;
149
+ }
150
+ _rightRotate(y) {
151
+ const x = y.left;
152
+ y.left = x.right;
153
+ if (x.right !== this._nil)
154
+ x.right.parent = y;
155
+ x.parent = y.parent;
156
+ if (y.parent === this._nil) {
157
+ this._root = x;
158
+ }
159
+ else if (y === y.parent.left) {
160
+ y.parent.left = x;
161
+ }
162
+ else {
163
+ y.parent.right = x;
164
+ }
165
+ x.right = y;
166
+ y.parent = x;
167
+ }
168
+ _insertFixup(z) {
169
+ while (z.parent.color === RED) {
170
+ if (z.parent === z.parent.parent.left) {
171
+ const y = z.parent.parent.right;
172
+ if (y.color === RED) {
173
+ z.parent.color = BLACK;
174
+ y.color = BLACK;
175
+ z.parent.parent.color = RED;
176
+ z = z.parent.parent;
177
+ }
178
+ else {
179
+ if (z === z.parent.right) {
180
+ z = z.parent;
181
+ this._leftRotate(z);
182
+ }
183
+ z.parent.color = BLACK;
184
+ z.parent.parent.color = RED;
185
+ this._rightRotate(z.parent.parent);
186
+ }
187
+ }
188
+ else {
189
+ const y = z.parent.parent.left;
190
+ if (y.color === RED) {
191
+ z.parent.color = BLACK;
192
+ y.color = BLACK;
193
+ z.parent.parent.color = RED;
194
+ z = z.parent.parent;
195
+ }
196
+ else {
197
+ if (z === z.parent.left) {
198
+ z = z.parent;
199
+ this._rightRotate(z);
200
+ }
201
+ z.parent.color = BLACK;
202
+ z.parent.parent.color = RED;
203
+ this._leftRotate(z.parent.parent);
204
+ }
205
+ }
206
+ }
207
+ this._root.color = BLACK;
208
+ }
209
+ /** Remove one node with key. Returns true if removed. */
210
+ deleteKey(key) {
211
+ const z = this.find(key);
212
+ if (z === null)
213
+ return false;
214
+ this._deleteNode(z);
215
+ return true;
216
+ }
217
+ /** Remove all nodes with key. Returns count removed. */
218
+ deleteAllKeys(key) {
219
+ let n = 0;
220
+ while (this.deleteKey(key))
221
+ n++;
222
+ return n;
223
+ }
224
+ /** Remove this node. */
225
+ deleteNode(z) {
226
+ if (z === this._nil)
227
+ return;
228
+ this._deleteNode(z);
229
+ }
230
+ _deleteNode(z) {
231
+ let y = z;
232
+ let yOriginalColor = y.color;
233
+ let x;
234
+ if (z.left === this._nil) {
235
+ x = z.right;
236
+ this._transplant(z, z.right);
237
+ }
238
+ else if (z.right === this._nil) {
239
+ x = z.left;
240
+ this._transplant(z, z.left);
241
+ }
242
+ else {
243
+ y = this._minimum(z.right);
244
+ yOriginalColor = y.color;
245
+ x = y.right;
246
+ if (y.parent === z) {
247
+ if (x !== this._nil)
248
+ x.parent = y;
249
+ }
250
+ else {
251
+ this._transplant(y, y.right);
252
+ y.right = z.right;
253
+ y.right.parent = y;
254
+ }
255
+ this._transplant(z, y);
256
+ y.left = z.left;
257
+ y.left.parent = y;
258
+ y.color = z.color;
259
+ }
260
+ if (yOriginalColor === BLACK) {
261
+ this._deleteFixup(x);
262
+ }
263
+ this._nodeCount--;
264
+ }
265
+ _transplant(u, v) {
266
+ if (u.parent === this._nil) {
267
+ this._root = v;
268
+ }
269
+ else if (u === u.parent.left) {
270
+ u.parent.left = v;
271
+ }
272
+ else {
273
+ u.parent.right = v;
274
+ }
275
+ v.parent = u.parent;
276
+ }
277
+ _minimum(x) {
278
+ while (x.left !== this._nil)
279
+ x = x.left;
280
+ return x;
281
+ }
282
+ _deleteFixup(x) {
283
+ while (x !== this._root && x.color === BLACK) {
284
+ if (x === x.parent.left) {
285
+ let w = x.parent.right;
286
+ if (w.color === RED) {
287
+ w.color = BLACK;
288
+ x.parent.color = RED;
289
+ this._leftRotate(x.parent);
290
+ w = x.parent.right;
291
+ }
292
+ if (w.left.color === BLACK && w.right.color === BLACK) {
293
+ w.color = RED;
294
+ x = x.parent;
295
+ }
296
+ else {
297
+ if (w.right.color === BLACK) {
298
+ w.left.color = BLACK;
299
+ w.color = RED;
300
+ this._rightRotate(w);
301
+ w = x.parent.right;
302
+ }
303
+ w.color = x.parent.color;
304
+ x.parent.color = BLACK;
305
+ w.right.color = BLACK;
306
+ this._leftRotate(x.parent);
307
+ x = this._root;
308
+ }
309
+ }
310
+ else {
311
+ let w = x.parent.left;
312
+ if (w.color === RED) {
313
+ w.color = BLACK;
314
+ x.parent.color = RED;
315
+ this._rightRotate(x.parent);
316
+ w = x.parent.left;
317
+ }
318
+ if (w.right.color === BLACK && w.left.color === BLACK) {
319
+ w.color = RED;
320
+ x = x.parent;
321
+ }
322
+ else {
323
+ if (w.left.color === BLACK) {
324
+ w.right.color = BLACK;
325
+ w.color = RED;
326
+ this._leftRotate(w);
327
+ w = x.parent.left;
328
+ }
329
+ w.color = x.parent.color;
330
+ x.parent.color = BLACK;
331
+ w.left.color = BLACK;
332
+ this._rightRotate(x.parent);
333
+ x = this._root;
334
+ }
335
+ }
336
+ }
337
+ x.color = BLACK;
338
+ }
339
+ /** Number of nodes with key === key (for duplicate-key trees). */
340
+ count(key) {
341
+ let x = this.lowerBound(key);
342
+ let n = 0;
343
+ while (x !== null && this._cmp(x.key, key) === 0) {
344
+ n++;
345
+ x = this._successor(x);
346
+ }
347
+ return n;
348
+ }
349
+ /** Number of nodes with key in [lowerKey, upperKey). */
350
+ countBetween(lowerKey, upperKey) {
351
+ let lo = this.lowerBound(lowerKey);
352
+ const hi = this.upperBound(upperKey);
353
+ let n = 0;
354
+ while (lo !== null && (hi === null || lo !== hi) && this._cmp(lo.key, upperKey) < 0) {
355
+ n++;
356
+ lo = this._successor(lo);
357
+ }
358
+ return n;
359
+ }
360
+ /** In-order successor (internal use). */
361
+ successor(node) {
362
+ return this._successor(node);
363
+ }
364
+ /** In-order successor. */
365
+ _successor(x) {
366
+ if (x.right !== this._nil) {
367
+ let s = x.right;
368
+ while (s.left !== this._nil)
369
+ s = s.left;
370
+ return s;
371
+ }
372
+ let p = x.parent;
373
+ while (p !== this._nil && x === p.right) {
374
+ x = p;
375
+ p = p.parent;
376
+ }
377
+ return p === this._nil ? null : p;
378
+ }
379
+ /** First node in in-order (leftmost). */
380
+ first() {
381
+ if (this._root === this._nil)
382
+ return null;
383
+ let x = this._root;
384
+ while (x.left !== this._nil)
385
+ x = x.left;
386
+ return x;
387
+ }
388
+ clear() {
389
+ this._root = this._nil;
390
+ this._nodeCount = 0;
391
+ }
392
+ /** In-order iteration over nodes. */
393
+ *nodes() {
394
+ let x = this.first();
395
+ while (x !== null) {
396
+ yield x;
397
+ x = this._successor(x);
398
+ }
399
+ }
400
+ /** In-order iteration over [key, value] pairs. */
401
+ *entries() {
402
+ for (const node of this.nodes())
403
+ yield [node.key, node.value];
404
+ }
405
+ *keys() {
406
+ for (const node of this.nodes())
407
+ yield node.key;
408
+ }
409
+ *values() {
410
+ for (const node of this.nodes())
411
+ yield node.value;
412
+ }
413
+ }
414
+ //# sourceMappingURL=RedBlackTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedBlackTree.js","sourceRoot":"","sources":["../../src/collections/RedBlackTree.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,5 @@ export { OrderedSet } from './OrderedSet.js';
9
9
  export { UnorderedSet } from './UnorderedSet.js';
10
10
  export { OrderedMultiSet } from './OrderedMultiSet.js';
11
11
  export { OrderedMultiMap } from './OrderedMultiMap.js';
12
+ export { RedBlackTree, RBNode } from './RedBlackTree.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
@@ -9,4 +9,5 @@ export { OrderedSet } from './OrderedSet.js';
9
9
  export { UnorderedSet } from './UnorderedSet.js';
10
10
  export { OrderedMultiSet } from './OrderedMultiSet.js';
11
11
  export { OrderedMultiMap } from './OrderedMultiMap.js';
12
+ export { RedBlackTree, RBNode } from './RedBlackTree.js';
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typescript-dsa-stl",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "STL-style data structures and algorithms for TypeScript: Vector, Stack, Queue, List, PriorityQueue, Map, Set, sort, binarySearch. Use like C++ STL.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",