@blackglory/structures 0.10.11 → 0.10.14

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.
Files changed (48) hide show
  1. package/README.md +29 -1
  2. package/dist/es2015/index.min.mjs +2 -2
  3. package/dist/es2015/index.min.mjs.map +1 -1
  4. package/dist/es2015/index.mjs +112 -14
  5. package/dist/es2015/index.mjs.map +1 -1
  6. package/dist/es2015/index.umd.js +112 -13
  7. package/dist/es2015/index.umd.js.map +1 -1
  8. package/dist/es2015/index.umd.min.js +2 -2
  9. package/dist/es2015/index.umd.min.js.map +1 -1
  10. package/dist/es2018/index.min.mjs +2 -2
  11. package/dist/es2018/index.min.mjs.map +1 -1
  12. package/dist/es2018/index.mjs +112 -14
  13. package/dist/es2018/index.mjs.map +1 -1
  14. package/dist/es2018/index.umd.js +112 -13
  15. package/dist/es2018/index.umd.js.map +1 -1
  16. package/dist/es2018/index.umd.min.js +2 -2
  17. package/dist/es2018/index.umd.min.js.map +1 -1
  18. package/lib/es2015/bit-set.d.ts +2 -1
  19. package/lib/es2015/bit-set.js +21 -21
  20. package/lib/es2015/bit-set.js.map +1 -1
  21. package/lib/es2015/index.d.ts +1 -0
  22. package/lib/es2015/index.js +1 -0
  23. package/lib/es2015/index.js.map +1 -1
  24. package/lib/es2015/sparse-map.d.ts +1 -0
  25. package/lib/es2015/sparse-map.js +4 -1
  26. package/lib/es2015/sparse-map.js.map +1 -1
  27. package/lib/es2015/typed-bit-set.d.ts +19 -0
  28. package/lib/es2015/typed-bit-set.js +95 -0
  29. package/lib/es2015/typed-bit-set.js.map +1 -0
  30. package/lib/es2015/typed-sparse-map.d.ts +1 -0
  31. package/lib/es2015/typed-sparse-map.js +3 -0
  32. package/lib/es2015/typed-sparse-map.js.map +1 -1
  33. package/lib/es2018/bit-set.d.ts +2 -1
  34. package/lib/es2018/bit-set.js +21 -21
  35. package/lib/es2018/bit-set.js.map +1 -1
  36. package/lib/es2018/index.d.ts +1 -0
  37. package/lib/es2018/index.js +1 -0
  38. package/lib/es2018/index.js.map +1 -1
  39. package/lib/es2018/sparse-map.d.ts +1 -0
  40. package/lib/es2018/sparse-map.js +4 -1
  41. package/lib/es2018/sparse-map.js.map +1 -1
  42. package/lib/es2018/typed-bit-set.d.ts +19 -0
  43. package/lib/es2018/typed-bit-set.js +95 -0
  44. package/lib/es2018/typed-bit-set.js.map +1 -0
  45. package/lib/es2018/typed-sparse-map.d.ts +1 -0
  46. package/lib/es2018/typed-sparse-map.js +3 -0
  47. package/lib/es2018/typed-sparse-map.js.map +1 -1
  48. package/package.json +1 -1
@@ -16504,6 +16504,9 @@
16504
16504
  values() {
16505
16505
  return this.indexToValue.values();
16506
16506
  }
16507
+ getInternalIndexOfKey(key) {
16508
+ return this.keyToIndex[key];
16509
+ }
16507
16510
  has(key) {
16508
16511
  // 跟一般的稀疏集实现不同, 不需要访问values数组.
16509
16512
  return key in this.keyToIndex;
@@ -16540,7 +16543,7 @@
16540
16543
  const index = this.keyToIndex[key];
16541
16544
  this.indexToKey[index] = lastKey;
16542
16545
  this.indexToValue[index] = lastValue;
16543
- this.keyToIndex[key] = index;
16546
+ this.keyToIndex[lastKey] = index;
16544
16547
  delete this.keyToIndex[key];
16545
16548
  }
16546
16549
  }
@@ -16579,6 +16582,9 @@
16579
16582
  yield this.indexToValue.internalTypedArray[i];
16580
16583
  }
16581
16584
  }
16585
+ getInternalIndexOfKey(key) {
16586
+ return this.keyToIndex[key];
16587
+ }
16582
16588
  has(key) {
16583
16589
  const index = this.keyToIndex[key];
16584
16590
  return this.indexToKey[index] === key;
@@ -16986,8 +16992,100 @@
16986
16992
  }
16987
16993
 
16988
16994
  class BitSet {
16989
- constructor() {
16990
- this.array = new DynamicTypedArray(Uint8Array);
16995
+ constructor(bitsPerElement = 8) {
16996
+ this.bitsPerElement = bitsPerElement;
16997
+ this.array = [];
16998
+ this.length = 0;
16999
+ }
17000
+ get [Symbol.toStringTag]() {
17001
+ return this.constructor.name;
17002
+ }
17003
+ get size() {
17004
+ return this.length;
17005
+ }
17006
+ [Symbol.iterator]() {
17007
+ return this.values();
17008
+ }
17009
+ *values() {
17010
+ if (this.length > 0) {
17011
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
17012
+ const remainder = this.bitsPerElement
17013
+ - (maxArrayLength * this.bitsPerElement - this.length);
17014
+ const lastIndex = maxArrayLength - 1;
17015
+ for (let index = 0; index < lastIndex; index++) {
17016
+ const element = this.array[index];
17017
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
17018
+ const mask = this.getMask(bit);
17019
+ if ((element & mask) === mask) {
17020
+ yield index * this.bitsPerElement + bit;
17021
+ }
17022
+ }
17023
+ }
17024
+ const lastElement = this.array[maxArrayLength - 1];
17025
+ for (let bit = 0; bit < remainder; bit++) {
17026
+ const mask = this.getMask(bit);
17027
+ if ((lastElement & mask) === mask) {
17028
+ yield lastIndex * this.bitsPerElement + bit;
17029
+ }
17030
+ }
17031
+ }
17032
+ }
17033
+ _dumpBinaryStrings() {
17034
+ const result = [];
17035
+ for (let i = 0; i < this.array.length; i++) {
17036
+ const binary = this.array[i].toString(2);
17037
+ if (binary.length < this.bitsPerElement) {
17038
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
17039
+ }
17040
+ else {
17041
+ result.push(binary);
17042
+ }
17043
+ }
17044
+ return result;
17045
+ }
17046
+ has(value) {
17047
+ var _a;
17048
+ const [index, mask] = this.getPosition(value);
17049
+ return (((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
17050
+ }
17051
+ add(value) {
17052
+ var _a;
17053
+ es2018$p.assert(value >= 0, 'value must be greater than or equal to 0');
17054
+ if (value >= this.length) {
17055
+ this.length = value + 1;
17056
+ }
17057
+ const [index, mask] = this.getPosition(value);
17058
+ this.array[index] = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) | mask;
17059
+ }
17060
+ delete(value) {
17061
+ var _a;
17062
+ const [index, mask] = this.getPosition(value);
17063
+ const element = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0);
17064
+ this.array[index] = element & ~mask;
17065
+ return (element & mask) === mask;
17066
+ }
17067
+ clear() {
17068
+ for (let i = this.array.length; i--;) {
17069
+ this.array[i] = 0;
17070
+ }
17071
+ }
17072
+ getPosition(value) {
17073
+ const remainder = value % this.bitsPerElement;
17074
+ const quotient = (value - remainder) / this.bitsPerElement;
17075
+ const index = quotient;
17076
+ const mask = this.getMask(remainder);
17077
+ return [index, mask];
17078
+ }
17079
+ // 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
17080
+ getMask(value) {
17081
+ return Math.pow(2, value);
17082
+ }
17083
+ }
17084
+
17085
+ class TypedBitSet {
17086
+ constructor(array) {
17087
+ this.array = array;
17088
+ this.bitsPerElement = this.array.internalTypedArray.BYTES_PER_ELEMENT * 8;
16991
17089
  this.length = 0;
16992
17090
  }
16993
17091
  get [Symbol.toStringTag]() {
@@ -17001,15 +17099,16 @@
17001
17099
  }
17002
17100
  *values() {
17003
17101
  if (this.length > 0) {
17004
- const maxArrayLength = Math.ceil(this.length / BitSet.bitsPerElement);
17005
- const remainder = BitSet.bitsPerElement - (maxArrayLength * BitSet.bitsPerElement - this.length);
17102
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
17103
+ const remainder = this.bitsPerElement
17104
+ - (maxArrayLength * this.bitsPerElement - this.length);
17006
17105
  const lastIndex = maxArrayLength - 1;
17007
17106
  for (let index = 0; index < lastIndex; index++) {
17008
17107
  const element = this.array.internalTypedArray[index];
17009
- for (let bit = 0; bit < BitSet.bitsPerElement; bit++) {
17108
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
17010
17109
  const mask = this.getMask(bit);
17011
17110
  if ((element & mask) === mask) {
17012
- yield index * BitSet.bitsPerElement + bit;
17111
+ yield index * this.bitsPerElement + bit;
17013
17112
  }
17014
17113
  }
17015
17114
  }
@@ -17017,7 +17116,7 @@
17017
17116
  for (let bit = 0; bit < remainder; bit++) {
17018
17117
  const mask = this.getMask(bit);
17019
17118
  if ((lastElement & mask) === mask) {
17020
- yield lastIndex * BitSet.bitsPerElement + bit;
17119
+ yield lastIndex * this.bitsPerElement + bit;
17021
17120
  }
17022
17121
  }
17023
17122
  }
@@ -17026,8 +17125,8 @@
17026
17125
  const result = [];
17027
17126
  for (let i = 0; i < this.array.length; i++) {
17028
17127
  const binary = this.array.internalTypedArray[i].toString(2);
17029
- if (binary.length < BitSet.bitsPerElement) {
17030
- result.push('0'.repeat(BitSet.bitsPerElement - binary.length) + binary);
17128
+ if (binary.length < this.bitsPerElement) {
17129
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
17031
17130
  }
17032
17131
  else {
17033
17132
  result.push(binary);
@@ -17062,8 +17161,8 @@
17062
17161
  }
17063
17162
  }
17064
17163
  getPosition(value) {
17065
- const remainder = value % BitSet.bitsPerElement;
17066
- const quotient = (value - remainder) / BitSet.bitsPerElement;
17164
+ const remainder = value % this.bitsPerElement;
17165
+ const quotient = (value - remainder) / this.bitsPerElement;
17067
17166
  const index = quotient;
17068
17167
  const mask = this.getMask(remainder);
17069
17168
  return [index, mask];
@@ -17073,7 +17172,6 @@
17073
17172
  return Math.pow(2, value);
17074
17173
  }
17075
17174
  }
17076
- BitSet.bitsPerElement = Uint8Array.BYTES_PER_ELEMENT * 8;
17077
17175
 
17078
17176
  exports.BadEventError = BadEventError;
17079
17177
  exports.BitSet = BitSet;
@@ -17092,6 +17190,7 @@
17092
17190
  exports.SparseSet = SparseSet;
17093
17191
  exports.TLRUMap = TLRUMap;
17094
17192
  exports.TrieMap = TrieMap;
17193
+ exports.TypedBitSet = TypedBitSet;
17095
17194
  exports.TypedSparseMap = TypedSparseMap;
17096
17195
  exports.TypedSparseSet = TypedSparseSet;
17097
17196
  exports.convertArrayToCons = convertArrayToCons;