@matter/general 0.17.6 → 0.17.7-alpha.0-20260720-00d9d6fbf
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/cjs/util/Heap.d.ts +4 -5
- package/dist/cjs/util/Heap.d.ts.map +1 -1
- package/dist/cjs/util/Heap.js +13 -22
- package/dist/cjs/util/Heap.js.map +1 -1
- package/dist/esm/util/Heap.d.ts +4 -5
- package/dist/esm/util/Heap.d.ts.map +1 -1
- package/dist/esm/util/Heap.js +13 -22
- package/dist/esm/util/Heap.js.map +1 -1
- package/package.json +2 -2
- package/src/util/Heap.ts +21 -25
package/dist/cjs/util/Heap.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ import { Observable } from "./Observable.js";
|
|
|
16
16
|
*
|
|
17
17
|
* * O(log(n)) enqueue and dequeue
|
|
18
18
|
*
|
|
19
|
-
* *
|
|
19
|
+
* * Holds each item at most once (a priority set); re-adding a queued item is a no-op
|
|
20
|
+
*
|
|
21
|
+
* * O(1) lookup + O(log(n)) removal of an arbitrary item via a maintained position index
|
|
20
22
|
*
|
|
21
23
|
* * {@link added}, {@link deleted} and {@link firstChanged} events
|
|
22
24
|
*/
|
|
@@ -62,10 +64,7 @@ export declare class Heap<T> {
|
|
|
62
64
|
*/
|
|
63
65
|
add(...items: T[]): void;
|
|
64
66
|
/**
|
|
65
|
-
* Delete an item.
|
|
66
|
-
*
|
|
67
|
-
* The first delete is O(n); subsequent deletes are O(1) but insertions and deletions will have additional cost
|
|
68
|
-
* associated.
|
|
67
|
+
* Delete an item. Returns false if the item is not present.
|
|
69
68
|
*/
|
|
70
69
|
delete(item: T): boolean;
|
|
71
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Heap.d.ts","sourceRoot":"","sources":["../../../src/util/Heap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"Heap.d.ts","sourceRoot":"","sources":["../../../src/util/Heap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAYf;;;;;OAKG;IACH,YAAY,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAG3E;IAED;;OAEG;IACH,KAAK,kBASJ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,OAAO,YAEV;IAED;;OAEG;IACH,IAAI,YAAY,sCAKf;IAED;;OAEG;IACH,IAAI,KAAK,0BAKR;IAED;;OAEG;IACH,IAAI,OAAO,0BAKV;IAED;;OAEG;IACH,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,QAoBhB;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,WAYb;IAED;;OAEG;IACH,KAAK,SAGJ;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,0DAgCjC;IAED;;OAEG;IACH,QAAQ,SA0BP;CAgGJ"}
|
package/dist/cjs/util/Heap.js
CHANGED
|
@@ -38,7 +38,7 @@ class Heap {
|
|
|
38
38
|
#firstChanged;
|
|
39
39
|
#deleted;
|
|
40
40
|
#added;
|
|
41
|
-
#positions;
|
|
41
|
+
#positions = /* @__PURE__ */ new Map();
|
|
42
42
|
/**
|
|
43
43
|
* Create new heap.
|
|
44
44
|
*
|
|
@@ -76,7 +76,7 @@ class Heap {
|
|
|
76
76
|
* Is the heap empty?
|
|
77
77
|
*/
|
|
78
78
|
get isEmpty() {
|
|
79
|
-
return
|
|
79
|
+
return !this.#buffer.length;
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
82
|
* Emits when the head of the queue changes.
|
|
@@ -113,27 +113,19 @@ class Heap {
|
|
|
113
113
|
if (this.#normalize) {
|
|
114
114
|
item = this.#normalize(item);
|
|
115
115
|
}
|
|
116
|
+
if (this.#positions.has(item)) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
116
119
|
this.#buffer.push(item);
|
|
117
|
-
this.#bubbleUp(this.#buffer.length - 1);
|
|
120
|
+
const index = this.#bubbleUp(this.#buffer.length - 1);
|
|
121
|
+
this.#positions.set(item, index);
|
|
118
122
|
this.#added?.emit(item);
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
125
|
/**
|
|
122
|
-
* Delete an item.
|
|
123
|
-
*
|
|
124
|
-
* The first delete is O(n); subsequent deletes are O(1) but insertions and deletions will have additional cost
|
|
125
|
-
* associated.
|
|
126
|
+
* Delete an item. Returns false if the item is not present.
|
|
126
127
|
*/
|
|
127
128
|
delete(item) {
|
|
128
|
-
if (this.#buffer === void 0) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
if (!this.#positions) {
|
|
132
|
-
this.#positions = /* @__PURE__ */ new Map();
|
|
133
|
-
for (let i = 0; i < this.#buffer.length; i++) {
|
|
134
|
-
this.#positions.set(this.#buffer[i], i);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
129
|
if (this.#normalize) {
|
|
138
130
|
item = this.#normalize(item);
|
|
139
131
|
}
|
|
@@ -149,6 +141,7 @@ class Heap {
|
|
|
149
141
|
*/
|
|
150
142
|
clear() {
|
|
151
143
|
if (this.#buffer.length) this.#buffer.length = 0;
|
|
144
|
+
this.#positions.clear();
|
|
152
145
|
}
|
|
153
146
|
/**
|
|
154
147
|
* Stream the first value from the heap until aborted.
|
|
@@ -215,7 +208,7 @@ class Heap {
|
|
|
215
208
|
} else {
|
|
216
209
|
const lastIndex = this.#buffer.length - 1;
|
|
217
210
|
this.#buffer[index] = this.#buffer[lastIndex];
|
|
218
|
-
this.#positions
|
|
211
|
+
this.#positions.set(this.#buffer[index], index);
|
|
219
212
|
this.#buffer.length = lastIndex;
|
|
220
213
|
if (index < this.#buffer.length) {
|
|
221
214
|
if (index) {
|
|
@@ -224,7 +217,7 @@ class Heap {
|
|
|
224
217
|
this.#sinkDown(index);
|
|
225
218
|
}
|
|
226
219
|
}
|
|
227
|
-
this.#positions
|
|
220
|
+
this.#positions.delete(item);
|
|
228
221
|
this.#deleted?.emit(item);
|
|
229
222
|
if (!index) {
|
|
230
223
|
this.#firstChanged?.emit(this.first);
|
|
@@ -268,10 +261,8 @@ class Heap {
|
|
|
268
261
|
}
|
|
269
262
|
#swap(index1, index2) {
|
|
270
263
|
[this.#buffer[index1], this.#buffer[index2]] = [this.#buffer[index2], this.#buffer[index1]];
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
this.#positions.set(this.#buffer[index2], index2);
|
|
274
|
-
}
|
|
264
|
+
this.#positions.set(this.#buffer[index1], index1);
|
|
265
|
+
this.#positions.set(this.#buffer[index2], index2);
|
|
275
266
|
}
|
|
276
267
|
#leftChildOf(index) {
|
|
277
268
|
return 2 * index + 1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/Heap.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,yBAA8B;AAC9B,mBAAsB;AACtB,wBAA2B;AAR3B;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/esm/util/Heap.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ import { Observable } from "./Observable.js";
|
|
|
16
16
|
*
|
|
17
17
|
* * O(log(n)) enqueue and dequeue
|
|
18
18
|
*
|
|
19
|
-
* *
|
|
19
|
+
* * Holds each item at most once (a priority set); re-adding a queued item is a no-op
|
|
20
|
+
*
|
|
21
|
+
* * O(1) lookup + O(log(n)) removal of an arbitrary item via a maintained position index
|
|
20
22
|
*
|
|
21
23
|
* * {@link added}, {@link deleted} and {@link firstChanged} events
|
|
22
24
|
*/
|
|
@@ -62,10 +64,7 @@ export declare class Heap<T> {
|
|
|
62
64
|
*/
|
|
63
65
|
add(...items: T[]): void;
|
|
64
66
|
/**
|
|
65
|
-
* Delete an item.
|
|
66
|
-
*
|
|
67
|
-
* The first delete is O(n); subsequent deletes are O(1) but insertions and deletions will have additional cost
|
|
68
|
-
* associated.
|
|
67
|
+
* Delete an item. Returns false if the item is not present.
|
|
69
68
|
*/
|
|
70
69
|
delete(item: T): boolean;
|
|
71
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Heap.d.ts","sourceRoot":"","sources":["../../../src/util/Heap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"Heap.d.ts","sourceRoot":"","sources":["../../../src/util/Heap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAYf;;;;;OAKG;IACH,YAAY,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAG3E;IAED;;OAEG;IACH,KAAK,kBASJ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,OAAO,YAEV;IAED;;OAEG;IACH,IAAI,YAAY,sCAKf;IAED;;OAEG;IACH,IAAI,KAAK,0BAKR;IAED;;OAEG;IACH,IAAI,OAAO,0BAKV;IAED;;OAEG;IACH,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,QAoBhB;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,WAYb;IAED;;OAEG;IACH,KAAK,SAGJ;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,0DAgCjC;IAED;;OAEG;IACH,QAAQ,SA0BP;CAgGJ"}
|
package/dist/esm/util/Heap.js
CHANGED
|
@@ -15,7 +15,7 @@ class Heap {
|
|
|
15
15
|
#firstChanged;
|
|
16
16
|
#deleted;
|
|
17
17
|
#added;
|
|
18
|
-
#positions;
|
|
18
|
+
#positions = /* @__PURE__ */ new Map();
|
|
19
19
|
/**
|
|
20
20
|
* Create new heap.
|
|
21
21
|
*
|
|
@@ -53,7 +53,7 @@ class Heap {
|
|
|
53
53
|
* Is the heap empty?
|
|
54
54
|
*/
|
|
55
55
|
get isEmpty() {
|
|
56
|
-
return
|
|
56
|
+
return !this.#buffer.length;
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* Emits when the head of the queue changes.
|
|
@@ -90,27 +90,19 @@ class Heap {
|
|
|
90
90
|
if (this.#normalize) {
|
|
91
91
|
item = this.#normalize(item);
|
|
92
92
|
}
|
|
93
|
+
if (this.#positions.has(item)) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
93
96
|
this.#buffer.push(item);
|
|
94
|
-
this.#bubbleUp(this.#buffer.length - 1);
|
|
97
|
+
const index = this.#bubbleUp(this.#buffer.length - 1);
|
|
98
|
+
this.#positions.set(item, index);
|
|
95
99
|
this.#added?.emit(item);
|
|
96
100
|
}
|
|
97
101
|
}
|
|
98
102
|
/**
|
|
99
|
-
* Delete an item.
|
|
100
|
-
*
|
|
101
|
-
* The first delete is O(n); subsequent deletes are O(1) but insertions and deletions will have additional cost
|
|
102
|
-
* associated.
|
|
103
|
+
* Delete an item. Returns false if the item is not present.
|
|
103
104
|
*/
|
|
104
105
|
delete(item) {
|
|
105
|
-
if (this.#buffer === void 0) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
if (!this.#positions) {
|
|
109
|
-
this.#positions = /* @__PURE__ */ new Map();
|
|
110
|
-
for (let i = 0; i < this.#buffer.length; i++) {
|
|
111
|
-
this.#positions.set(this.#buffer[i], i);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
106
|
if (this.#normalize) {
|
|
115
107
|
item = this.#normalize(item);
|
|
116
108
|
}
|
|
@@ -126,6 +118,7 @@ class Heap {
|
|
|
126
118
|
*/
|
|
127
119
|
clear() {
|
|
128
120
|
if (this.#buffer.length) this.#buffer.length = 0;
|
|
121
|
+
this.#positions.clear();
|
|
129
122
|
}
|
|
130
123
|
/**
|
|
131
124
|
* Stream the first value from the heap until aborted.
|
|
@@ -192,7 +185,7 @@ class Heap {
|
|
|
192
185
|
} else {
|
|
193
186
|
const lastIndex = this.#buffer.length - 1;
|
|
194
187
|
this.#buffer[index] = this.#buffer[lastIndex];
|
|
195
|
-
this.#positions
|
|
188
|
+
this.#positions.set(this.#buffer[index], index);
|
|
196
189
|
this.#buffer.length = lastIndex;
|
|
197
190
|
if (index < this.#buffer.length) {
|
|
198
191
|
if (index) {
|
|
@@ -201,7 +194,7 @@ class Heap {
|
|
|
201
194
|
this.#sinkDown(index);
|
|
202
195
|
}
|
|
203
196
|
}
|
|
204
|
-
this.#positions
|
|
197
|
+
this.#positions.delete(item);
|
|
205
198
|
this.#deleted?.emit(item);
|
|
206
199
|
if (!index) {
|
|
207
200
|
this.#firstChanged?.emit(this.first);
|
|
@@ -245,10 +238,8 @@ class Heap {
|
|
|
245
238
|
}
|
|
246
239
|
#swap(index1, index2) {
|
|
247
240
|
[this.#buffer[index1], this.#buffer[index2]] = [this.#buffer[index2], this.#buffer[index1]];
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
this.#positions.set(this.#buffer[index2], index2);
|
|
251
|
-
}
|
|
241
|
+
this.#positions.set(this.#buffer[index1], index1);
|
|
242
|
+
this.#positions.set(this.#buffer[index2], index2);
|
|
252
243
|
}
|
|
253
244
|
#leftChildOf(index) {
|
|
254
245
|
return 2 * index + 1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/Heap.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,qBAAqB;AAC9B,SAAS,aAAa;AACtB,SAAS,kBAAkB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.7-alpha.0-20260720-00d9d6fbf",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@noble/curves": "^2.2.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@matter/testing": "0.17.
|
|
38
|
+
"@matter/testing": "0.17.7-alpha.0-20260720-00d9d6fbf"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist/**/*",
|
package/src/util/Heap.ts
CHANGED
|
@@ -19,7 +19,9 @@ import { Observable } from "./Observable.js";
|
|
|
19
19
|
*
|
|
20
20
|
* * O(log(n)) enqueue and dequeue
|
|
21
21
|
*
|
|
22
|
-
* *
|
|
22
|
+
* * Holds each item at most once (a priority set); re-adding a queued item is a no-op
|
|
23
|
+
*
|
|
24
|
+
* * O(1) lookup + O(log(n)) removal of an arbitrary item via a maintained position index
|
|
23
25
|
*
|
|
24
26
|
* * {@link added}, {@link deleted} and {@link firstChanged} events
|
|
25
27
|
*/
|
|
@@ -33,7 +35,7 @@ export class Heap<T> {
|
|
|
33
35
|
#firstChanged?: Observable<[T | undefined]>;
|
|
34
36
|
#deleted?: Observable<[T]>;
|
|
35
37
|
#added?: Observable<[T]>;
|
|
36
|
-
#positions
|
|
38
|
+
readonly #positions = new Map<T, number>();
|
|
37
39
|
|
|
38
40
|
/**
|
|
39
41
|
* Create new heap.
|
|
@@ -78,7 +80,7 @@ export class Heap<T> {
|
|
|
78
80
|
* Is the heap empty?
|
|
79
81
|
*/
|
|
80
82
|
get isEmpty() {
|
|
81
|
-
return
|
|
83
|
+
return !this.#buffer.length;
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
/**
|
|
@@ -120,31 +122,26 @@ export class Heap<T> {
|
|
|
120
122
|
item = this.#normalize(item);
|
|
121
123
|
}
|
|
122
124
|
|
|
125
|
+
// The heap holds each item at most once; a re-add of a queued item is a no-op. #positions maps an item
|
|
126
|
+
// to a single index, so a second copy could not be tracked and would orphan on delete.
|
|
127
|
+
if (this.#positions.has(item)) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
|
|
123
131
|
this.#buffer.push(item);
|
|
124
|
-
|
|
132
|
+
// #bubbleUp updates positions for elements it swaps; record the final resting index for the item itself,
|
|
133
|
+
// which is the only element not covered when it does not move.
|
|
134
|
+
const index = this.#bubbleUp(this.#buffer.length - 1);
|
|
135
|
+
this.#positions.set(item, index);
|
|
125
136
|
|
|
126
137
|
this.#added?.emit(item);
|
|
127
138
|
}
|
|
128
139
|
}
|
|
129
140
|
|
|
130
141
|
/**
|
|
131
|
-
* Delete an item.
|
|
132
|
-
*
|
|
133
|
-
* The first delete is O(n); subsequent deletes are O(1) but insertions and deletions will have additional cost
|
|
134
|
-
* associated.
|
|
142
|
+
* Delete an item. Returns false if the item is not present.
|
|
135
143
|
*/
|
|
136
144
|
delete(item: T) {
|
|
137
|
-
if (this.#buffer === undefined) {
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (!this.#positions) {
|
|
142
|
-
this.#positions = new Map();
|
|
143
|
-
for (let i = 0; i < this.#buffer.length; i++) {
|
|
144
|
-
this.#positions.set(this.#buffer[i], i);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
145
|
if (this.#normalize) {
|
|
149
146
|
item = this.#normalize(item);
|
|
150
147
|
}
|
|
@@ -163,6 +160,7 @@ export class Heap<T> {
|
|
|
163
160
|
*/
|
|
164
161
|
clear() {
|
|
165
162
|
if (this.#buffer.length) this.#buffer.length = 0;
|
|
163
|
+
this.#positions.clear();
|
|
166
164
|
}
|
|
167
165
|
|
|
168
166
|
/**
|
|
@@ -244,7 +242,7 @@ export class Heap<T> {
|
|
|
244
242
|
} else {
|
|
245
243
|
const lastIndex = this.#buffer.length - 1;
|
|
246
244
|
this.#buffer[index] = this.#buffer[lastIndex];
|
|
247
|
-
this.#positions
|
|
245
|
+
this.#positions.set(this.#buffer[index], index);
|
|
248
246
|
this.#buffer.length = lastIndex;
|
|
249
247
|
if (index < this.#buffer.length) {
|
|
250
248
|
if (index) {
|
|
@@ -254,7 +252,7 @@ export class Heap<T> {
|
|
|
254
252
|
}
|
|
255
253
|
}
|
|
256
254
|
|
|
257
|
-
this.#positions
|
|
255
|
+
this.#positions.delete(item);
|
|
258
256
|
|
|
259
257
|
this.#deleted?.emit(item);
|
|
260
258
|
if (!index) {
|
|
@@ -312,10 +310,8 @@ export class Heap<T> {
|
|
|
312
310
|
|
|
313
311
|
#swap(index1: number, index2: number) {
|
|
314
312
|
[this.#buffer[index1], this.#buffer[index2]] = [this.#buffer[index2], this.#buffer[index1]];
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
this.#positions.set(this.#buffer[index2], index2);
|
|
318
|
-
}
|
|
313
|
+
this.#positions.set(this.#buffer[index1], index1);
|
|
314
|
+
this.#positions.set(this.#buffer[index2], index2);
|
|
319
315
|
}
|
|
320
316
|
|
|
321
317
|
#leftChildOf(index: number) {
|