@woosh/meep-engine 2.117.18 → 2.117.19

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.
@@ -6,7 +6,6 @@ import { min2 } from "../../math/min2.js";
6
6
  import { invokeObjectEquals } from "../../model/object/invokeObjectEquals.js";
7
7
  import { invokeObjectHash } from "../../model/object/invokeObjectHash.js";
8
8
  import { array_copy } from "../array/array_copy.js";
9
- import { array_swap_one } from "../array/array_swap_one.js";
10
9
  import { UintArrayForCount } from "../array/typed/uint_array_for_count.js";
11
10
 
12
11
  /*
@@ -140,62 +139,62 @@ export class HashMap {
140
139
  * number of bins is always power or two
141
140
  * @type {Uint32Array}
142
141
  */
143
- #bins = EMPTY_BINS;
142
+ __bins = EMPTY_BINS;
144
143
 
145
144
  /**
146
145
  * Note that dead entries are marked as such with a special reserved hash values, so records can be reused for new entries
147
146
  * @type {Array<HashMapEntry<K,V>>}
148
147
  */
149
- #entries = new Array(0);
148
+ __entries = new Array(0);
150
149
 
151
150
  /**
152
151
  * Pointer to the end of allocated entries segment
153
152
  * @type {number}
154
153
  */
155
- #entries_bound = 0;
154
+ __entries_bound = 0;
156
155
 
157
156
  /**
158
157
  *
159
158
  * @type {number}
160
159
  */
161
- #entries_start = 0;
160
+ __entries_start = 0;
162
161
 
163
162
  /**
164
163
  * number of records in the map
165
164
  * @type {number}
166
165
  */
167
- #size = 0;
166
+ __size = 0;
168
167
 
169
- #bin_count = 0;
168
+ __bin_count = 0;
170
169
 
171
170
  /**
172
171
  * Always exactly half of the number of bins
173
172
  * @type {number}
174
173
  */
175
- #entries_allocated_count = 0;
174
+ __entries_allocated_count = 0;
176
175
 
177
- #bin_count_power_of_two = 0;
176
+ __bin_count_power_of_two = 0;
178
177
 
179
- #entries_count_power_of_two = 0;
178
+ __entries_count_power_of_two = 0;
180
179
 
181
180
  /**
182
181
  * Mask used to map from hash to a bin index
183
182
  * @type {number}
184
183
  */
185
- #bin_count_mask = 0;
184
+ __bin_count_mask = 0;
186
185
 
187
186
  /**
188
187
  * How full the table can get before number of buckets is increased
189
188
  * @type {number}
190
189
  * @private
191
190
  */
192
- #load_factor = DEFAULT_LOAD_FACTOR;
191
+ __load_factor = DEFAULT_LOAD_FACTOR;
193
192
 
194
193
  /**
195
194
  * Used to track modifications to prevent concurrent changes during iteration
196
195
  * @type {number}
197
196
  */
198
- #version = 0;
197
+ __version = 0;
199
198
 
200
199
  /**
201
200
  * @template K, V
@@ -234,13 +233,13 @@ export class HashMap {
234
233
  */
235
234
  this.keyEqualityFunction = keyEqualityFunction;
236
235
 
237
- this.#load_factor = loadFactor;
236
+ this.__load_factor = loadFactor;
238
237
 
239
238
  this.#setBinCount(ceilPowerOfTwo(capacity));
240
239
  }
241
240
 
242
241
  get size() {
243
- return this.#size;
242
+ return this.__size;
244
243
  }
245
244
 
246
245
  /**
@@ -248,7 +247,7 @@ export class HashMap {
248
247
  * @returns {number}
249
248
  */
250
249
  getCurrentLoad() {
251
- return this.#size / this.#bin_count;
250
+ return this.__size / this.__bin_count;
252
251
  }
253
252
 
254
253
  /**
@@ -260,33 +259,33 @@ export class HashMap {
260
259
  assert.isNonNegativeInteger(count, 'count');
261
260
  assert.equal(isPowerOfTwo(count), true, `count must be a power of two, instead was ${count}`);
262
261
 
263
- if (count < this.#size) {
264
- throw new Error(`count must be at least equal to must of records in the map (=${this.#size}), instead was ${count}`);
262
+ if (count < this.__size) {
263
+ throw new Error(`count must be at least equal to must of records in the map (=${this.__size}), instead was ${count}`);
265
264
  }
266
265
 
267
266
 
268
- this.#entries_count_power_of_two = ctz32(count);
269
- this.#bin_count_power_of_two = this.#entries_count_power_of_two + 1;
267
+ this.__entries_count_power_of_two = ctz32(count);
268
+ this.__bin_count_power_of_two = this.__entries_count_power_of_two + 1;
270
269
 
271
- this.#bin_count = 2 ** this.#bin_count_power_of_two;
272
- this.#bin_count_mask = this.#bin_count - 1;
270
+ this.__bin_count = 2 ** this.__bin_count_power_of_two;
271
+ this.__bin_count_mask = this.__bin_count - 1;
273
272
 
274
- const old_entry_allocation_count = this.#entries_allocated_count;
273
+ const old_entry_allocation_count = this.__entries_allocated_count;
275
274
 
276
- this.#entries_allocated_count = 2 ** this.#entries_count_power_of_two;
275
+ this.__entries_allocated_count = 2 ** this.__entries_count_power_of_two;
277
276
 
278
- const BinsArray = UintArrayForCount(this.#entries_allocated_count + ENTRY_BASE);
277
+ const BinsArray = UintArrayForCount(this.__entries_allocated_count + ENTRY_BASE);
279
278
 
280
- this.#bins = new BinsArray(this.#bin_count);
279
+ this.__bins = new BinsArray(this.__bin_count);
281
280
 
282
- const new_entries = new Array(this.#entries_allocated_count);
283
- const old_entries = this.#entries;
281
+ const new_entries = new Array(this.__entries_allocated_count);
282
+ const old_entries = this.__entries;
284
283
 
285
- this.#entries = new_entries;
284
+ this.__entries = new_entries;
286
285
 
287
- array_copy(old_entries, 0, new_entries, 0, min2(old_entry_allocation_count, this.#entries_allocated_count));
286
+ array_copy(old_entries, 0, new_entries, 0, min2(old_entry_allocation_count, this.__entries_allocated_count));
288
287
 
289
- if (this.#size > 0) {
288
+ if (this.__size > 0) {
290
289
  // re-hash
291
290
  this.rebuild();
292
291
  }
@@ -298,7 +297,7 @@ export class HashMap {
298
297
  * @returns {number}
299
298
  * @private
300
299
  */
301
- #compute_bin_index(hash) {
300
+ compute_bin_index(hash) {
302
301
  assert.isInteger(hash, 'hash');
303
302
 
304
303
  // mix the input hash to minimize potential impact of poor hash function spread
@@ -307,7 +306,7 @@ export class HashMap {
307
306
  // force index to unsigned integer
308
307
  const index = mixed_hash >>> 0;
309
308
 
310
- return index & this.#bin_count_mask;
309
+ return index & this.__bin_count_mask;
311
310
  }
312
311
 
313
312
  /**
@@ -355,15 +354,15 @@ export class HashMap {
355
354
  */
356
355
  #allocate_entry(k, v, hash) {
357
356
 
358
- const i = this.#entries_bound;
357
+ const i = this.__entries_bound;
359
358
 
360
- this.#entries_bound++;
359
+ this.__entries_bound++;
361
360
 
362
- if (this.#entries[i] !== undefined) {
361
+ if (this.__entries[i] !== undefined) {
363
362
 
364
363
  // entry exists, let's reuse it
365
364
 
366
- const entry = this.#entries[i];
365
+ const entry = this.__entries[i];
367
366
 
368
367
  assert.equal(entry.hash, RESERVED_HASH, 'Entry is occupied');
369
368
 
@@ -375,7 +374,7 @@ export class HashMap {
375
374
 
376
375
  // entry slot is empty
377
376
 
378
- this.#entries[i] = new HashMapEntry(k, v, hash);
377
+ this.__entries[i] = new HashMapEntry(k, v, hash);
379
378
 
380
379
  }
381
380
 
@@ -396,11 +395,11 @@ export class HashMap {
396
395
  }
397
396
 
398
397
  #rebuild_if_necessary() {
399
- if (this.#entries_bound !== this.#entries_allocated_count) {
398
+ if (this.__entries_bound !== this.__entries_allocated_count) {
400
399
  return;
401
400
  }
402
401
 
403
- if (this.#size === this.#entries_allocated_count) {
402
+ if (this.__size === this.__entries_allocated_count) {
404
403
  // used up all allocated entries
405
404
  // bin count must always be larger than end of the entries table
406
405
  this.#grow();
@@ -419,20 +418,20 @@ export class HashMap {
419
418
  this.#rebuild_if_necessary();
420
419
 
421
420
  const raw_hash = this.#build_key_hash(key);
422
- let bin_index = this.#compute_bin_index(raw_hash);
421
+ let bin_index = this.compute_bin_index(raw_hash);
423
422
 
424
423
  assert.isFiniteNumber(bin_index, 'hash');
425
424
 
426
425
  let first_deleted_bin_index = UNDEFINED_BIN_INDEX;
427
426
 
428
427
  for (; ;) {
429
- const bin = this.#bins[bin_index];
428
+ const bin = this.__bins[bin_index];
430
429
 
431
430
  if (bin > BIN_RESERVED_VALUE_DELETED) {
432
431
  // bin is occupied
433
432
 
434
433
  // check if it's the entry that we're looking for
435
- const entry = this.#entries[bin - ENTRY_BASE];
434
+ const entry = this.__entries[bin - ENTRY_BASE];
436
435
 
437
436
  if (this.#entry_equality_check(entry, raw_hash, key)) {
438
437
  // found the right entry
@@ -450,17 +449,17 @@ export class HashMap {
450
449
 
451
450
  const entry_index = this.#allocate_entry(key, value, raw_hash);
452
451
 
453
- assert.defined(this.#entries[entry_index], 'entry');
452
+ assert.defined(this.__entries[entry_index], 'entry');
454
453
 
455
- assert.equal(this.#entries[entry_index].hash, raw_hash, 'entry.hash');
456
- assert.equal(this.#entries[entry_index].value, value, 'entry.value');
457
- assert.equal(this.#entries[entry_index].key, key, 'entry.key');
454
+ assert.equal(this.__entries[entry_index].hash, raw_hash, 'entry.hash');
455
+ assert.equal(this.__entries[entry_index].value, value, 'entry.value');
456
+ assert.equal(this.__entries[entry_index].key, key, 'entry.key');
458
457
 
459
458
  const bin_value = entry_index + ENTRY_BASE;
460
459
 
461
- this.#bins[bin_index] = bin_value;
460
+ this.__bins[bin_index] = bin_value;
462
461
 
463
- assert.equal(bin_value, this.#bins[bin_index], 'Bin value write error');
462
+ assert.equal(bin_value, this.__bins[bin_index], 'Bin value write error');
464
463
 
465
464
  break;
466
465
 
@@ -471,19 +470,19 @@ export class HashMap {
471
470
  }
472
471
 
473
472
  // perform secondary hashing
474
- bin_index = generate_next_linear_congruential_index(bin_index, this.#bin_count_mask);
473
+ bin_index = generate_next_linear_congruential_index(bin_index, this.__bin_count_mask);
475
474
 
476
475
  }
477
476
 
478
- const old_size = this.#size;
477
+ const old_size = this.__size;
479
478
  const new_size = old_size + 1;
480
- this.#size = new_size;
479
+ this.__size = new_size;
481
480
 
482
481
  // compute actual current load
483
- const bucket_count = this.#bin_count;
482
+ const bucket_count = this.__bin_count;
484
483
  const load = new_size / bucket_count;
485
484
 
486
- if (load > this.#load_factor) {
485
+ if (load > this.__load_factor) {
487
486
  // current load is too high, increase table size
488
487
  this.#grow();
489
488
  }
@@ -497,16 +496,16 @@ export class HashMap {
497
496
  get(key) {
498
497
  const raw_hash = this.#build_key_hash(key);
499
498
 
500
- let bin_index = this.#compute_bin_index(raw_hash);
499
+ let bin_index = this.compute_bin_index(raw_hash);
501
500
 
502
501
  for (; ;) {
503
- const bin = this.#bins[bin_index];
502
+ const bin = this.__bins[bin_index];
504
503
 
505
504
  if (bin > BIN_RESERVED_VALUE_DELETED) {
506
505
  // bin is occupied
507
506
 
508
507
  // check if the entry is what we're looking for
509
- const entry = this.#entries[bin - ENTRY_BASE];
508
+ const entry = this.__entries[bin - ENTRY_BASE];
510
509
 
511
510
  if (this.#entry_equality_check(entry, raw_hash, key)) {
512
511
  // found the right entry
@@ -519,7 +518,7 @@ export class HashMap {
519
518
  }
520
519
 
521
520
  // perform secondary hashing
522
- bin_index = generate_next_linear_congruential_index(bin_index, this.#bin_count_mask);
521
+ bin_index = generate_next_linear_congruential_index(bin_index, this.__bin_count_mask);
523
522
 
524
523
  }
525
524
 
@@ -569,24 +568,25 @@ export class HashMap {
569
568
  }
570
569
 
571
570
  /**
572
- *
573
- * @param {number} bin
571
+ * Update the entries start of table TAB after removing an entry with index N in the array entries.
572
+ * @param {number} bin index of deleted entry
574
573
  */
575
574
  #update_range_for_deleted(bin) {
576
- if (this.#entries_start === bin) {
577
- let start = bin + 1;
578
- let bound = this.#entries_bound;
575
+ if (this.__entries_start !== bin) {
576
+ return;
577
+ }
579
578
 
580
- const entries = this.#entries;
579
+ let start = bin + 1;
580
+ let bound = this.__entries_bound;
581
+ const entries = this.__entries;
581
582
 
582
- while (start < bound && entries[start].hash === RESERVED_HASH) {
583
- start++;
584
- }
583
+ while (start < bound && entries[start].hash === RESERVED_HASH) {
584
+ start++;
585
+ }
585
586
 
586
- assert.greaterThanOrEqual(bound - start, this.#size, `live entity bounds must span at least number of entries equal to map size(=${this.#size}), instead got start(=${start}), and end(=${bound})`)
587
+ assert.greaterThanOrEqual(bound - start, this.__size, `live entity bounds must span at least number of entries equal to map size(=${this.__size}), instead got start(=${start}), and end(=${bound})`)
587
588
 
588
- this.#entries_start = start;
589
- }
589
+ this.__entries_start = start;
590
590
  }
591
591
 
592
592
  /**
@@ -597,12 +597,12 @@ export class HashMap {
597
597
  delete(key) {
598
598
 
599
599
  const raw_hash = this.#build_key_hash(key);
600
- let bin_index = this.#compute_bin_index(raw_hash);
600
+ let bin_index = this.compute_bin_index(raw_hash);
601
601
 
602
602
  assert.isFiniteNumber(bin_index, 'hash');
603
603
 
604
- const bins = this.#bins;
605
- const entries = this.#entries;
604
+ const bins = this.__bins;
605
+ const entries = this.__entries;
606
606
 
607
607
  for (; ;) {
608
608
  const bin = bins[bin_index];
@@ -623,7 +623,7 @@ export class HashMap {
623
623
  // mark slot as removed
624
624
  bins[bin_index] = BIN_RESERVED_VALUE_DELETED;
625
625
 
626
- this.#size--;
626
+ this.__size--;
627
627
 
628
628
  this.#update_range_for_deleted(entry_index);
629
629
 
@@ -636,7 +636,7 @@ export class HashMap {
636
636
  }
637
637
 
638
638
  // perform secondary hashing
639
- bin_index = generate_next_linear_congruential_index(bin_index, this.#bin_count_mask);
639
+ bin_index = generate_next_linear_congruential_index(bin_index, this.__bin_count_mask);
640
640
 
641
641
  }
642
642
  }
@@ -650,9 +650,9 @@ export class HashMap {
650
650
  verifyHashes(callback, thisArg) {
651
651
  let all_hashes_valid = true;
652
652
 
653
- const count = this.#bin_count;
653
+ const count = this.__bin_count;
654
654
  for (let j = 0; j < count; j++) {
655
- const bin = this.#bins[j];
655
+ const bin = this.__bins[j];
656
656
 
657
657
  if (bin <= BIN_RESERVED_VALUE_DELETED) {
658
658
  // unoccupied
@@ -662,7 +662,7 @@ export class HashMap {
662
662
  /**
663
663
  * @type {HashMapEntry<K,V>}
664
664
  */
665
- const entry = this.#entries[bin - ENTRY_BASE];
665
+ const entry = this.__entries[bin - ENTRY_BASE];
666
666
 
667
667
  //check hash
668
668
  const raw_hash = this.#build_key_hash(entry.key);
@@ -679,7 +679,7 @@ export class HashMap {
679
679
  }
680
680
 
681
681
  #grow() {
682
- this.#setBinCount(this.#entries_allocated_count * 2);
682
+ this.#setBinCount(this.__entries_allocated_count * 2);
683
683
  }
684
684
 
685
685
 
@@ -687,17 +687,17 @@ export class HashMap {
687
687
  * Rebuild table, useful for when table is resized
688
688
  */
689
689
  rebuild() {
690
- const entries_bound = this.#entries_bound;
691
- const entries = this.#entries;
690
+ const entries_bound = this.__entries_bound;
691
+ const entries = this.__entries;
692
692
 
693
693
  // reset all bins
694
- const bins = this.#bins;
694
+ const bins = this.__bins;
695
695
  bins.fill(BIN_RESERVED_VALUE_EMPTY);
696
696
 
697
697
  let written_entries = 0;
698
698
 
699
699
  for (
700
- let existing_entry_index = this.#entries_start;
700
+ let existing_entry_index = this.__entries_start;
701
701
  existing_entry_index < entries_bound;
702
702
  existing_entry_index++
703
703
  ) {
@@ -715,11 +715,13 @@ export class HashMap {
715
715
 
716
716
  if (new_index !== existing_entry_index) {
717
717
  // move entries to the new position, compacting holes
718
- array_swap_one(entries, new_index, existing_entry_index);
718
+
719
+ entries[new_index] = entries[existing_entry_index];
719
720
  }
720
721
 
721
- let bin_index = this.#compute_bin_index(hash);
722
+ let bin_index = this.compute_bin_index(hash);
722
723
 
724
+ // search for place for the entry
723
725
  for (; ;) {
724
726
  const bin = bins[bin_index];
725
727
 
@@ -730,22 +732,22 @@ export class HashMap {
730
732
  }
731
733
 
732
734
  // perform secondary hashing
733
- bin_index = generate_next_linear_congruential_index(bin_index, this.#bin_count_mask);
735
+ bin_index = generate_next_linear_congruential_index(bin_index, this.__bin_count_mask);
734
736
 
735
737
  }
736
738
  }
737
739
 
738
- assert.equal(written_entries, this.#size, `live entries(=${written_entries}) should match size(=${this.#size})`);
740
+ assert.equal(written_entries, this.__size, `live entries(=${written_entries}) should match size(=${this.__size})`);
739
741
 
740
- this.#entries_start = 0;
741
- this.#entries_bound = this.#size;
742
- this.#version++;
742
+ this.__entries_start = 0;
743
+ this.__entries_bound = this.__size;
744
+ this.__version++;
743
745
  }
744
746
 
745
747
  #count_live_entities() {
746
748
  let count = 0;
747
- for (let i = this.#entries_start; i < this.#entries_bound; i++) {
748
- const entry = this.#entries[i];
749
+ for (let i = this.__entries_start; i < this.__entries_bound; i++) {
750
+ const entry = this.__entries[i];
749
751
 
750
752
  if (entry.hash !== RESERVED_HASH) {
751
753
  count++;
@@ -762,13 +764,13 @@ export class HashMap {
762
764
  forEach(callback, thisArg) {
763
765
  assert.isFunction(callback, 'callback');
764
766
 
765
- const count = this.#bin_count;
766
- const entries = this.#entries;
767
- const bins = this.#bins;
768
- const start_version = this.#version;
767
+ const count = this.__bin_count;
768
+ const entries = this.__entries;
769
+ const bins = this.__bins;
770
+ const start_version = this.__version;
769
771
 
770
772
  for (let j = 0; j < count; j++) {
771
- assert.equal(start_version, this.#version, 'HashMap modified during traversal');
773
+ assert.equal(start_version, this.__version, 'HashMap modified during traversal');
772
774
 
773
775
  const bin = bins[j];
774
776
 
@@ -802,8 +804,8 @@ export class HashMap {
802
804
  clear() {
803
805
 
804
806
  // clear out all
805
- const bins = this.#bins;
806
- const count = this.#bin_count;
807
+ const bins = this.__bins;
808
+ const count = this.__bin_count;
807
809
 
808
810
  for (let i = 0; i < count; i++) {
809
811
  const bin = bins[i];
@@ -814,7 +816,7 @@ export class HashMap {
814
816
  // occupied, move to deleted
815
817
  const entry_index = bin - ENTRY_BASE;
816
818
 
817
- this.#deallocate(this.#entries[entry_index]);
819
+ this.#deallocate(this.__entries[entry_index]);
818
820
  }
819
821
 
820
822
  // mark as empty
@@ -824,23 +826,23 @@ export class HashMap {
824
826
 
825
827
  }
826
828
 
827
- this.#size = 0;
829
+ this.__size = 0;
828
830
 
829
- this.#entries_start = 0;
830
- this.#entries_bound = 0;
831
+ this.__entries_start = 0;
832
+ this.__entries_bound = 0;
831
833
  }
832
834
 
833
835
  * [Symbol.iterator]() {
834
836
 
835
- const count = this.#bin_count;
837
+ const count = this.__bin_count;
836
838
 
837
- const bins = this.#bins;
838
- const entries = this.#entries;
839
+ const bins = this.__bins;
840
+ const entries = this.__entries;
839
841
 
840
- const start_version = this.#version;
842
+ const start_version = this.__version;
841
843
 
842
844
  for (let j = 0; j < count; j++) {
843
- assert.equal(start_version, this.#version, 'HashMap modified during traversal');
845
+ assert.equal(start_version, this.__version, 'HashMap modified during traversal');
844
846
 
845
847
  const bin = bins[j];
846
848
 
@@ -1,3 +0,0 @@
1
- export class ManagedTexture {
2
- }
3
- //# sourceMappingURL=ManagedTexture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ManagedTexture.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/material/manager/ManagedTexture.js"],"names":[],"mappings":"AAAA;CAEC"}
@@ -1,3 +0,0 @@
1
- export class ManagedTexture {
2
-
3
- }
@@ -1,3 +0,0 @@
1
- export class TextureManager {
2
- }
3
- //# sourceMappingURL=TextureManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextureManager.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/material/manager/TextureManager.js"],"names":[],"mappings":"AAAA;CAEC"}
@@ -1,3 +0,0 @@
1
- export class TextureManager {
2
-
3
- }