@blackglory/structures 0.10.2 → 0.10.5
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 +16 -0
- package/dist/es2015/index.min.mjs +2 -2
- package/dist/es2015/index.min.mjs.map +1 -1
- package/dist/es2015/index.mjs +90 -1
- package/dist/es2015/index.mjs.map +1 -1
- package/dist/es2015/index.umd.js +90 -0
- package/dist/es2015/index.umd.js.map +1 -1
- package/dist/es2015/index.umd.min.js +2 -2
- package/dist/es2015/index.umd.min.js.map +1 -1
- package/dist/es2018/index.min.mjs +2 -2
- package/dist/es2018/index.min.mjs.map +1 -1
- package/dist/es2018/index.mjs +90 -1
- package/dist/es2018/index.mjs.map +1 -1
- package/dist/es2018/index.umd.js +90 -0
- package/dist/es2018/index.umd.js.map +1 -1
- package/dist/es2018/index.umd.min.js +2 -2
- package/dist/es2018/index.umd.min.js.map +1 -1
- package/lib/es2015/bit-set.d.ts +16 -0
- package/lib/es2015/bit-set.js +94 -0
- package/lib/es2015/bit-set.js.map +1 -0
- package/lib/es2015/index.d.ts +1 -0
- package/lib/es2015/index.js +1 -0
- package/lib/es2015/index.js.map +1 -1
- package/lib/es2018/bit-set.d.ts +16 -0
- package/lib/es2018/bit-set.js +94 -0
- package/lib/es2018/bit-set.js.map +1 -0
- package/lib/es2018/index.d.ts +1 -0
- package/lib/es2018/index.js +1 -0
- package/lib/es2018/index.js.map +1 -1
- package/package.json +1 -1
package/dist/es2018/index.umd.js
CHANGED
|
@@ -16959,7 +16959,97 @@
|
|
|
16959
16959
|
}
|
|
16960
16960
|
}
|
|
16961
16961
|
|
|
16962
|
+
class BitSet {
|
|
16963
|
+
constructor() {
|
|
16964
|
+
this.array = new DynamicTypedArray(Uint8Array);
|
|
16965
|
+
this.length = 0;
|
|
16966
|
+
}
|
|
16967
|
+
get [Symbol.toStringTag]() {
|
|
16968
|
+
return this.constructor.name;
|
|
16969
|
+
}
|
|
16970
|
+
get size() {
|
|
16971
|
+
return this.length;
|
|
16972
|
+
}
|
|
16973
|
+
[Symbol.iterator]() {
|
|
16974
|
+
return this.values();
|
|
16975
|
+
}
|
|
16976
|
+
*values() {
|
|
16977
|
+
if (this.length > 0) {
|
|
16978
|
+
const maxArrayLength = Math.ceil(this.length / BitSet.bitsPerElement);
|
|
16979
|
+
const remainder = BitSet.bitsPerElement - (maxArrayLength * BitSet.bitsPerElement - this.length);
|
|
16980
|
+
const lastIndex = maxArrayLength - 1;
|
|
16981
|
+
for (let index = 0; index < lastIndex; index++) {
|
|
16982
|
+
const element = this.array.internalTypedArray[index];
|
|
16983
|
+
for (let bit = 0; bit < BitSet.bitsPerElement; bit++) {
|
|
16984
|
+
const mask = this.getMask(bit);
|
|
16985
|
+
if ((element & mask) === mask) {
|
|
16986
|
+
yield index * 8 + bit;
|
|
16987
|
+
}
|
|
16988
|
+
}
|
|
16989
|
+
}
|
|
16990
|
+
const lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
16991
|
+
for (let bit = 0; bit < remainder; bit++) {
|
|
16992
|
+
const mask = this.getMask(bit);
|
|
16993
|
+
if ((lastElement & mask) === mask) {
|
|
16994
|
+
yield lastIndex * 8 + bit;
|
|
16995
|
+
}
|
|
16996
|
+
}
|
|
16997
|
+
}
|
|
16998
|
+
}
|
|
16999
|
+
_dumpBinaryStrings() {
|
|
17000
|
+
const result = [];
|
|
17001
|
+
const expectedBinaryStringLength = Uint8Array.BYTES_PER_ELEMENT * 8;
|
|
17002
|
+
for (let i = 0; i < this.array.length; i++) {
|
|
17003
|
+
const binary = this.array.internalTypedArray[i].toString(2);
|
|
17004
|
+
if (binary.length < expectedBinaryStringLength) {
|
|
17005
|
+
result.push('0'.repeat(expectedBinaryStringLength - binary.length) + binary);
|
|
17006
|
+
}
|
|
17007
|
+
else {
|
|
17008
|
+
result.push(binary);
|
|
17009
|
+
}
|
|
17010
|
+
}
|
|
17011
|
+
return result;
|
|
17012
|
+
}
|
|
17013
|
+
has(value) {
|
|
17014
|
+
var _a;
|
|
17015
|
+
const { index, mask } = this.getPosition(value);
|
|
17016
|
+
return (((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
|
|
17017
|
+
}
|
|
17018
|
+
add(value) {
|
|
17019
|
+
var _a;
|
|
17020
|
+
es2018$p.assert(value >= 0, 'value must be greater than or equal to 0');
|
|
17021
|
+
if (value >= this.length) {
|
|
17022
|
+
this.length = value + 1;
|
|
17023
|
+
}
|
|
17024
|
+
const { index, mask } = this.getPosition(value);
|
|
17025
|
+
this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) | mask);
|
|
17026
|
+
}
|
|
17027
|
+
delete(value) {
|
|
17028
|
+
var _a;
|
|
17029
|
+
const { index, mask } = this.getPosition(value);
|
|
17030
|
+
this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & ~mask);
|
|
17031
|
+
}
|
|
17032
|
+
clear() {
|
|
17033
|
+
for (let i = this.array.length; i--;) {
|
|
17034
|
+
this.array.set(i, 0);
|
|
17035
|
+
}
|
|
17036
|
+
}
|
|
17037
|
+
getPosition(value) {
|
|
17038
|
+
const remainder = value % BitSet.bitsPerElement;
|
|
17039
|
+
const quotient = (value - remainder) / BitSet.bitsPerElement;
|
|
17040
|
+
const index = quotient;
|
|
17041
|
+
const mask = this.getMask(remainder);
|
|
17042
|
+
return { index, mask };
|
|
17043
|
+
}
|
|
17044
|
+
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
17045
|
+
getMask(value) {
|
|
17046
|
+
return 2 ** value;
|
|
17047
|
+
}
|
|
17048
|
+
}
|
|
17049
|
+
BitSet.bitsPerElement = Uint8Array.BYTES_PER_ELEMENT * 8;
|
|
17050
|
+
|
|
16962
17051
|
exports.BadEventError = BadEventError;
|
|
17052
|
+
exports.BitSet = BitSet;
|
|
16963
17053
|
exports.Box = Box;
|
|
16964
17054
|
exports.DynamicTypedArray = DynamicTypedArray;
|
|
16965
17055
|
exports.Emitter = Emitter;
|