typescript-dsa-stl 1.0.0 → 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 +44 -10
- package/dist/collections/OrderedMap.d.ts +23 -0
- package/dist/collections/OrderedMap.d.ts.map +1 -0
- package/dist/collections/OrderedMap.js +71 -0
- package/dist/collections/OrderedMap.js.map +1 -0
- package/dist/collections/OrderedSet.d.ts +20 -0
- package/dist/collections/OrderedSet.d.ts.map +1 -0
- package/dist/collections/OrderedSet.js +56 -0
- package/dist/collections/OrderedSet.js.map +1 -0
- package/dist/collections/PriorityQueue.d.ts +22 -0
- package/dist/collections/PriorityQueue.d.ts.map +1 -0
- package/dist/collections/PriorityQueue.js +73 -0
- package/dist/collections/PriorityQueue.js.map +1 -0
- package/dist/collections/UnorderedMap.d.ts +20 -0
- package/dist/collections/UnorderedMap.d.ts.map +1 -0
- package/dist/collections/UnorderedMap.js +47 -0
- package/dist/collections/UnorderedMap.js.map +1 -0
- package/dist/collections/UnorderedSet.d.ts +17 -0
- package/dist/collections/UnorderedSet.d.ts.map +1 -0
- package/dist/collections/UnorderedSet.js +38 -0
- package/dist/collections/UnorderedSet.js.map +1 -0
- package/dist/collections/index.d.ts +5 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +5 -0
- package/dist/collections/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# TypeScript_DSA
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**This is the GitHub repository** for the npm package **[typescript-dsa-stl](https://www.npmjs.com/package/typescript-dsa-stl)**.
|
|
4
|
+
|
|
5
|
+
STL-style data structures and algorithms for TypeScript: **Vector**, **Stack**, **Queue**, **List**, **PriorityQueue**, **OrderedMap** (Map), **UnorderedMap**, **OrderedSet** (Set), **UnorderedSet**, and algorithms (`sort`, `binarySearch`, `lowerBound`, `min`, `max`, etc.). Install from npm to use in your project; this repo holds the source code.
|
|
6
|
+
|
|
7
|
+
---
|
|
4
8
|
|
|
5
9
|
## Install
|
|
6
10
|
|
|
@@ -8,6 +12,8 @@ STL-style **data structures and algorithms** for TypeScript: Vector, Stack, Queu
|
|
|
8
12
|
npm install typescript-dsa-stl
|
|
9
13
|
```
|
|
10
14
|
|
|
15
|
+
---
|
|
16
|
+
|
|
11
17
|
## Quick start
|
|
12
18
|
|
|
13
19
|
```ts
|
|
@@ -16,6 +22,11 @@ import {
|
|
|
16
22
|
Stack,
|
|
17
23
|
Queue,
|
|
18
24
|
List,
|
|
25
|
+
PriorityQueue,
|
|
26
|
+
OrderedMap,
|
|
27
|
+
UnorderedMap,
|
|
28
|
+
OrderedSet,
|
|
29
|
+
UnorderedSet,
|
|
19
30
|
sort,
|
|
20
31
|
find,
|
|
21
32
|
binarySearch,
|
|
@@ -46,6 +57,21 @@ const node = list.pushBack(20);
|
|
|
46
57
|
list.insertBefore(node, 15);
|
|
47
58
|
console.log(list.toArray()); // [10, 15, 20]
|
|
48
59
|
|
|
60
|
+
// PriorityQueue (max-heap by default)
|
|
61
|
+
const pq = new PriorityQueue<number>();
|
|
62
|
+
pq.push(3); pq.push(1); pq.push(4);
|
|
63
|
+
console.log(pq.top()); // 4
|
|
64
|
+
pq.pop();
|
|
65
|
+
|
|
66
|
+
// OrderedMap (keys sorted), UnorderedMap (hash)
|
|
67
|
+
const map = new UnorderedMap<string, number>();
|
|
68
|
+
map.set('a', 1); map.set('b', 2);
|
|
69
|
+
console.log(map.get('a')); // 1
|
|
70
|
+
|
|
71
|
+
// OrderedSet (sorted unique), UnorderedSet (hash)
|
|
72
|
+
const set = new UnorderedSet<number>([1, 2, 2, 3]);
|
|
73
|
+
console.log(set.size); // 3
|
|
74
|
+
|
|
49
75
|
// Algorithms (work on arrays and iterables)
|
|
50
76
|
const arr = [3, 1, 4, 1, 5];
|
|
51
77
|
sort(arr); // [1, 1, 3, 4, 5]
|
|
@@ -63,11 +89,13 @@ clamp(42, 0, 10); // 10
|
|
|
63
89
|
range(0, 5); // [0, 1, 2, 3, 4]
|
|
64
90
|
```
|
|
65
91
|
|
|
92
|
+
---
|
|
93
|
+
|
|
66
94
|
## API overview
|
|
67
95
|
|
|
68
96
|
| Module | Exports |
|
|
69
97
|
|--------|--------|
|
|
70
|
-
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode` |
|
|
98
|
+
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet` |
|
|
71
99
|
| **Algorithms** | `sort`, `find`, `findIndex`, `transform`, `filter`, `reduce`, `reverse`, `unique`, `binarySearch`, `lowerBound`, `upperBound`, `min`, `max`, `partition` |
|
|
72
100
|
| **Utils** | `clamp`, `range`, `noop`, `identity`, `swap` |
|
|
73
101
|
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray` |
|
|
@@ -81,6 +109,8 @@ import { clamp, range } from 'typescript-dsa-stl/utils';
|
|
|
81
109
|
import type { Comparator } from 'typescript-dsa-stl/types';
|
|
82
110
|
```
|
|
83
111
|
|
|
112
|
+
---
|
|
113
|
+
|
|
84
114
|
## Data structures
|
|
85
115
|
|
|
86
116
|
| Structure | Access | Insert end | Insert middle | Remove end | Remove middle |
|
|
@@ -89,19 +119,23 @@ import type { Comparator } from 'typescript-dsa-stl/types';
|
|
|
89
119
|
| **Stack** | — | O(1) | — | O(1) | — |
|
|
90
120
|
| **Queue** | — | O(1)* | — | O(1)* | — |
|
|
91
121
|
| **List** | O(n) | O(1) | O(1)** | O(1) | O(1)** |
|
|
122
|
+
| **PriorityQueue** | — | O(log n) | — | O(log n) | — |
|
|
123
|
+
| **OrderedMap** (Map) | O(log n) get | O(n) set | — | O(n) delete | — |
|
|
124
|
+
| **UnorderedMap** | O(1)* get/set | O(1)* | — | O(1)* delete | — |
|
|
125
|
+
| **OrderedSet** (Set) | O(log n) has | O(n) add | — | O(n) delete | — |
|
|
126
|
+
| **UnorderedSet** | O(1)* has/add | O(1)* | — | O(1)* delete | — |
|
|
92
127
|
|
|
93
|
-
\* Amortized
|
|
128
|
+
\* Amortized (hash).
|
|
129
|
+
\** At a known node.
|
|
94
130
|
|
|
95
|
-
|
|
131
|
+
---
|
|
96
132
|
|
|
97
|
-
|
|
98
|
-
2. **Build**: `npm run build`
|
|
99
|
-
3. **Login**: `npm login`
|
|
100
|
-
4. **Publish**: `npm publish` (use `npm publish --access public` if you use a scoped name like `@yourusername/typescript-dsa-stl`)
|
|
133
|
+
## For maintainers
|
|
101
134
|
|
|
102
|
-
|
|
135
|
+
- **Build:** `npm run build` (also runs before `npm publish` via `prepublishOnly`)
|
|
136
|
+
- **Publish:** `npm publish` (use `npm publish --access public` for a scoped package name)
|
|
103
137
|
|
|
104
|
-
|
|
138
|
+
---
|
|
105
139
|
|
|
106
140
|
## License
|
|
107
141
|
|
|
@@ -0,0 +1,23 @@
|
|
|
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.
|
|
4
|
+
*/
|
|
5
|
+
import type { Comparator } from '../types/index.js';
|
|
6
|
+
export declare class OrderedMap<K, V> {
|
|
7
|
+
private _entries;
|
|
8
|
+
private _compare;
|
|
9
|
+
constructor(compare?: Comparator<K>);
|
|
10
|
+
get size(): number;
|
|
11
|
+
get empty(): boolean;
|
|
12
|
+
private _lowerBound;
|
|
13
|
+
get(key: K): V | undefined;
|
|
14
|
+
set(key: K, value: V): void;
|
|
15
|
+
has(key: K): boolean;
|
|
16
|
+
delete(key: K): boolean;
|
|
17
|
+
clear(): void;
|
|
18
|
+
keys(): Iterable<K>;
|
|
19
|
+
values(): Iterable<V>;
|
|
20
|
+
entries(): Iterable<[K, V]>;
|
|
21
|
+
[Symbol.iterator](): Iterator<[K, V]>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=OrderedMap.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
function defaultCompare(a, b) {
|
|
2
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
3
|
+
}
|
|
4
|
+
export class OrderedMap {
|
|
5
|
+
constructor(compare) {
|
|
6
|
+
this._entries = [];
|
|
7
|
+
this._compare = compare ?? defaultCompare;
|
|
8
|
+
}
|
|
9
|
+
get size() {
|
|
10
|
+
return this._entries.length;
|
|
11
|
+
}
|
|
12
|
+
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
|
+
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;
|
|
34
|
+
}
|
|
35
|
+
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
|
+
}
|
|
43
|
+
}
|
|
44
|
+
has(key) {
|
|
45
|
+
return this.get(key) !== undefined;
|
|
46
|
+
}
|
|
47
|
+
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;
|
|
54
|
+
}
|
|
55
|
+
clear() {
|
|
56
|
+
this._entries.length = 0;
|
|
57
|
+
}
|
|
58
|
+
keys() {
|
|
59
|
+
return this._entries.map((e) => e[0]);
|
|
60
|
+
}
|
|
61
|
+
values() {
|
|
62
|
+
return this._entries.map((e) => e[1]);
|
|
63
|
+
}
|
|
64
|
+
entries() {
|
|
65
|
+
return this._entries;
|
|
66
|
+
}
|
|
67
|
+
[Symbol.iterator]() {
|
|
68
|
+
return this._entries[Symbol.iterator]();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=OrderedMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderedMap.js","sourceRoot":"","sources":["../../src/collections/OrderedMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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.
|
|
4
|
+
*/
|
|
5
|
+
import type { Comparator } from '../types/index.js';
|
|
6
|
+
export declare class OrderedSet<T> {
|
|
7
|
+
private _data;
|
|
8
|
+
private _compare;
|
|
9
|
+
constructor(compare?: Comparator<T>);
|
|
10
|
+
get size(): number;
|
|
11
|
+
get empty(): boolean;
|
|
12
|
+
private _lowerBound;
|
|
13
|
+
has(value: T): boolean;
|
|
14
|
+
add(value: T): void;
|
|
15
|
+
delete(value: T): boolean;
|
|
16
|
+
clear(): void;
|
|
17
|
+
[Symbol.iterator](): Iterator<T>;
|
|
18
|
+
toArray(): T[];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=OrderedSet.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
function defaultCompare(a, b) {
|
|
2
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
3
|
+
}
|
|
4
|
+
export class OrderedSet {
|
|
5
|
+
constructor(compare) {
|
|
6
|
+
this._data = [];
|
|
7
|
+
this._compare = compare ?? defaultCompare;
|
|
8
|
+
}
|
|
9
|
+
get size() {
|
|
10
|
+
return this._data.length;
|
|
11
|
+
}
|
|
12
|
+
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
|
+
has(value) {
|
|
29
|
+
const i = this._lowerBound(value);
|
|
30
|
+
return i < this._data.length && this._compare(this._data[i], value) === 0;
|
|
31
|
+
}
|
|
32
|
+
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
|
+
}
|
|
37
|
+
}
|
|
38
|
+
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;
|
|
45
|
+
}
|
|
46
|
+
clear() {
|
|
47
|
+
this._data.length = 0;
|
|
48
|
+
}
|
|
49
|
+
[Symbol.iterator]() {
|
|
50
|
+
return this._data[Symbol.iterator]();
|
|
51
|
+
}
|
|
52
|
+
toArray() {
|
|
53
|
+
return [...this._data];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=OrderedSet.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Priority queue (binary heap). O(log n) push and pop, O(1) top.
|
|
3
|
+
* Default: max-heap (highest priority at top). Pass a custom comparator to change order.
|
|
4
|
+
*/
|
|
5
|
+
import type { Comparator } from '../types/index.js';
|
|
6
|
+
export declare class PriorityQueue<T> {
|
|
7
|
+
private _heap;
|
|
8
|
+
private _compare;
|
|
9
|
+
/** compare(a,b) < 0 means a has lower priority than b. Default: max-heap. */
|
|
10
|
+
constructor(compare?: Comparator<T>);
|
|
11
|
+
get size(): number;
|
|
12
|
+
get empty(): boolean;
|
|
13
|
+
/** Highest-priority element. */
|
|
14
|
+
top(): T;
|
|
15
|
+
push(value: T): void;
|
|
16
|
+
pop(): T | undefined;
|
|
17
|
+
clear(): void;
|
|
18
|
+
private _siftUp;
|
|
19
|
+
private _siftDown;
|
|
20
|
+
toArray(): T[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=PriorityQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriorityQueue.d.ts","sourceRoot":"","sources":["../../src/collections/PriorityQueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAEhC,6EAA6E;gBACjE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAInC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,gCAAgC;IAChC,GAAG,IAAI,CAAC;IAKR,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAKpB,GAAG,IAAI,CAAC,GAAG,SAAS;IAWpB,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,SAAS;IAgBjB,OAAO,IAAI,CAAC,EAAE;CAGf"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
function defaultCompare(a, b) {
|
|
2
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
3
|
+
}
|
|
4
|
+
export class PriorityQueue {
|
|
5
|
+
/** compare(a,b) < 0 means a has lower priority than b. Default: max-heap. */
|
|
6
|
+
constructor(compare) {
|
|
7
|
+
this._heap = [];
|
|
8
|
+
this._compare = compare ?? defaultCompare;
|
|
9
|
+
}
|
|
10
|
+
get size() {
|
|
11
|
+
return this._heap.length;
|
|
12
|
+
}
|
|
13
|
+
get empty() {
|
|
14
|
+
return this._heap.length === 0;
|
|
15
|
+
}
|
|
16
|
+
/** Highest-priority element. */
|
|
17
|
+
top() {
|
|
18
|
+
if (this._heap.length === 0)
|
|
19
|
+
throw new RangeError('PriorityQueue is empty');
|
|
20
|
+
return this._heap[0];
|
|
21
|
+
}
|
|
22
|
+
push(value) {
|
|
23
|
+
this._heap.push(value);
|
|
24
|
+
this._siftUp(this._heap.length - 1);
|
|
25
|
+
}
|
|
26
|
+
pop() {
|
|
27
|
+
if (this._heap.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
const top = this._heap[0];
|
|
30
|
+
const last = this._heap.pop();
|
|
31
|
+
if (this._heap.length > 0) {
|
|
32
|
+
this._heap[0] = last;
|
|
33
|
+
this._siftDown(0);
|
|
34
|
+
}
|
|
35
|
+
return top;
|
|
36
|
+
}
|
|
37
|
+
clear() {
|
|
38
|
+
this._heap.length = 0;
|
|
39
|
+
}
|
|
40
|
+
_siftUp(i) {
|
|
41
|
+
const cmp = this._compare;
|
|
42
|
+
const arr = this._heap;
|
|
43
|
+
while (i > 0) {
|
|
44
|
+
const parent = (i - 1) >>> 1;
|
|
45
|
+
if (cmp(arr[i], arr[parent]) <= 0)
|
|
46
|
+
break;
|
|
47
|
+
[arr[i], arr[parent]] = [arr[parent], arr[i]];
|
|
48
|
+
i = parent;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_siftDown(i) {
|
|
52
|
+
const cmp = this._compare;
|
|
53
|
+
const arr = this._heap;
|
|
54
|
+
const n = arr.length;
|
|
55
|
+
while (true) {
|
|
56
|
+
let best = i;
|
|
57
|
+
const left = 2 * i + 1;
|
|
58
|
+
const right = 2 * i + 2;
|
|
59
|
+
if (left < n && cmp(arr[left], arr[best]) > 0)
|
|
60
|
+
best = left;
|
|
61
|
+
if (right < n && cmp(arr[right], arr[best]) > 0)
|
|
62
|
+
best = right;
|
|
63
|
+
if (best === i)
|
|
64
|
+
break;
|
|
65
|
+
[arr[i], arr[best]] = [arr[best], arr[i]];
|
|
66
|
+
i = best;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
toArray() {
|
|
70
|
+
return [...this._heap];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=PriorityQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/collections/PriorityQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unordered map (STL-style unordered_map). Hash-based. O(1) average get/set/has/delete.
|
|
3
|
+
* Wraps the native Map with an STL-like API.
|
|
4
|
+
*/
|
|
5
|
+
export declare class UnorderedMap<K, V> {
|
|
6
|
+
private _map;
|
|
7
|
+
constructor(entries?: Iterable<[K, V]>);
|
|
8
|
+
get size(): number;
|
|
9
|
+
get empty(): boolean;
|
|
10
|
+
get(key: K): V | undefined;
|
|
11
|
+
set(key: K, value: V): void;
|
|
12
|
+
has(key: K): boolean;
|
|
13
|
+
delete(key: K): boolean;
|
|
14
|
+
clear(): void;
|
|
15
|
+
keys(): Iterable<K>;
|
|
16
|
+
values(): Iterable<V>;
|
|
17
|
+
entries(): Iterable<[K, V]>;
|
|
18
|
+
[Symbol.iterator](): Iterator<[K, V]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=UnorderedMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnorderedMap.d.ts","sourceRoot":"","sources":["../../src/collections/UnorderedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAmC;gBAEnC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAMtC,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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unordered map (STL-style unordered_map). Hash-based. O(1) average get/set/has/delete.
|
|
3
|
+
* Wraps the native Map with an STL-like API.
|
|
4
|
+
*/
|
|
5
|
+
export class UnorderedMap {
|
|
6
|
+
constructor(entries) {
|
|
7
|
+
this._map = new Map();
|
|
8
|
+
if (entries) {
|
|
9
|
+
for (const [k, v] of entries)
|
|
10
|
+
this._map.set(k, v);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
get size() {
|
|
14
|
+
return this._map.size;
|
|
15
|
+
}
|
|
16
|
+
get empty() {
|
|
17
|
+
return this._map.size === 0;
|
|
18
|
+
}
|
|
19
|
+
get(key) {
|
|
20
|
+
return this._map.get(key);
|
|
21
|
+
}
|
|
22
|
+
set(key, value) {
|
|
23
|
+
this._map.set(key, value);
|
|
24
|
+
}
|
|
25
|
+
has(key) {
|
|
26
|
+
return this._map.has(key);
|
|
27
|
+
}
|
|
28
|
+
delete(key) {
|
|
29
|
+
return this._map.delete(key);
|
|
30
|
+
}
|
|
31
|
+
clear() {
|
|
32
|
+
this._map.clear();
|
|
33
|
+
}
|
|
34
|
+
keys() {
|
|
35
|
+
return this._map.keys();
|
|
36
|
+
}
|
|
37
|
+
values() {
|
|
38
|
+
return this._map.values();
|
|
39
|
+
}
|
|
40
|
+
entries() {
|
|
41
|
+
return this._map.entries();
|
|
42
|
+
}
|
|
43
|
+
[Symbol.iterator]() {
|
|
44
|
+
return this._map.entries();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=UnorderedMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnorderedMap.js","sourceRoot":"","sources":["../../src/collections/UnorderedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,YAAY;IAGvB,YAAY,OAA0B;QAF9B,SAAI,GAAyB,IAAI,GAAG,EAAE,CAAC;QAG7C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unordered set (STL-style unordered_set). Hash-based. O(1) average add/has/delete.
|
|
3
|
+
* Wraps the native Set with an STL-like API.
|
|
4
|
+
*/
|
|
5
|
+
export declare class UnorderedSet<T> {
|
|
6
|
+
private _set;
|
|
7
|
+
constructor(values?: Iterable<T>);
|
|
8
|
+
get size(): number;
|
|
9
|
+
get empty(): boolean;
|
|
10
|
+
has(value: T): boolean;
|
|
11
|
+
add(value: T): void;
|
|
12
|
+
delete(value: T): boolean;
|
|
13
|
+
clear(): void;
|
|
14
|
+
[Symbol.iterator](): Iterator<T>;
|
|
15
|
+
toArray(): T[];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=UnorderedSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnorderedSet.d.ts","sourceRoot":"","sources":["../../src/collections/UnorderedSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAgC;gBAEhC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAMhC,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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unordered set (STL-style unordered_set). Hash-based. O(1) average add/has/delete.
|
|
3
|
+
* Wraps the native Set with an STL-like API.
|
|
4
|
+
*/
|
|
5
|
+
export class UnorderedSet {
|
|
6
|
+
constructor(values) {
|
|
7
|
+
this._set = new Set();
|
|
8
|
+
if (values) {
|
|
9
|
+
for (const v of values)
|
|
10
|
+
this._set.add(v);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
get size() {
|
|
14
|
+
return this._set.size;
|
|
15
|
+
}
|
|
16
|
+
get empty() {
|
|
17
|
+
return this._set.size === 0;
|
|
18
|
+
}
|
|
19
|
+
has(value) {
|
|
20
|
+
return this._set.has(value);
|
|
21
|
+
}
|
|
22
|
+
add(value) {
|
|
23
|
+
this._set.add(value);
|
|
24
|
+
}
|
|
25
|
+
delete(value) {
|
|
26
|
+
return this._set.delete(value);
|
|
27
|
+
}
|
|
28
|
+
clear() {
|
|
29
|
+
this._set.clear();
|
|
30
|
+
}
|
|
31
|
+
[Symbol.iterator]() {
|
|
32
|
+
return this._set.values();
|
|
33
|
+
}
|
|
34
|
+
toArray() {
|
|
35
|
+
return [...this._set];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=UnorderedSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnorderedSet.js","sourceRoot":"","sources":["../../src/collections/UnorderedSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,YAAY;IAGvB,YAAY,MAAoB;QAFxB,SAAI,GAAsB,IAAI,GAAG,EAAE,CAAC;QAG1C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -2,4 +2,9 @@ export { Vector } from './Vector.js';
|
|
|
2
2
|
export { Stack } from './Stack.js';
|
|
3
3
|
export { Queue } from './Queue.js';
|
|
4
4
|
export { List, ListNode } from './List.js';
|
|
5
|
+
export { PriorityQueue } from './PriorityQueue.js';
|
|
6
|
+
export { OrderedMap } from './OrderedMap.js';
|
|
7
|
+
export { UnorderedMap } from './UnorderedMap.js';
|
|
8
|
+
export { OrderedSet } from './OrderedSet.js';
|
|
9
|
+
export { UnorderedSet } from './UnorderedSet.js';
|
|
5
10
|
//# 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"}
|
|
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"}
|
|
@@ -2,4 +2,9 @@ export { Vector } from './Vector.js';
|
|
|
2
2
|
export { Stack } from './Stack.js';
|
|
3
3
|
export { Queue } from './Queue.js';
|
|
4
4
|
export { List, ListNode } from './List.js';
|
|
5
|
+
export { PriorityQueue } from './PriorityQueue.js';
|
|
6
|
+
export { OrderedMap } from './OrderedMap.js';
|
|
7
|
+
export { UnorderedMap } from './UnorderedMap.js';
|
|
8
|
+
export { OrderedSet } from './OrderedSet.js';
|
|
9
|
+
export { UnorderedSet } from './UnorderedSet.js';
|
|
5
10
|
//# 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"}
|
|
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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode } from './collections/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, } from './collections/index.js';
|
|
9
9
|
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
|
|
10
10
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
11
11
|
export type { Comparator, Predicate, UnaryFn, Reducer, IterableLike } from './types/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode } from './collections/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, } from './collections/index.js';
|
|
9
9
|
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, } from './algorithms/index.js';
|
|
10
10
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
11
11
|
export { toArray } from './types/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED