@blackglory/structures 0.10.20 → 0.10.21
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 +1 -1
- package/dist/es2015/index.min.mjs +1 -1
- package/dist/es2015/index.min.mjs.map +1 -1
- package/dist/es2015/index.mjs +35 -23
- package/dist/es2015/index.mjs.map +1 -1
- package/dist/es2015/index.umd.js +35 -23
- package/dist/es2015/index.umd.js.map +1 -1
- package/dist/es2015/index.umd.min.js +1 -1
- package/dist/es2015/index.umd.min.js.map +1 -1
- package/dist/es2018/index.min.mjs +1 -1
- package/dist/es2018/index.min.mjs.map +1 -1
- package/dist/es2018/index.mjs +35 -23
- package/dist/es2018/index.mjs.map +1 -1
- package/dist/es2018/index.umd.js +35 -23
- package/dist/es2018/index.umd.js.map +1 -1
- package/dist/es2018/index.umd.min.js +1 -1
- package/dist/es2018/index.umd.min.js.map +1 -1
- package/lib/es2015/bit-set.js +11 -19
- package/lib/es2015/bit-set.js.map +1 -1
- package/lib/es2015/typed-bit-set.js +3 -3
- package/lib/es2015/typed-bit-set.js.map +1 -1
- package/lib/es2015/utils/bit-scan.d.ts +1 -0
- package/lib/es2015/utils/bit-scan.js +14 -0
- package/lib/es2015/utils/bit-scan.js.map +1 -0
- package/lib/es2015/utils/trailing-zeros.d.ts +1 -0
- package/lib/es2015/utils/trailing-zeros.js +14 -0
- package/lib/es2015/utils/trailing-zeros.js.map +1 -0
- package/lib/es2018/bit-set.js +11 -19
- package/lib/es2018/bit-set.js.map +1 -1
- package/lib/es2018/typed-bit-set.js +3 -3
- package/lib/es2018/typed-bit-set.js.map +1 -1
- package/lib/es2018/utils/bit-scan.d.ts +1 -0
- package/lib/es2018/utils/bit-scan.js +14 -0
- package/lib/es2018/utils/bit-scan.js.map +1 -0
- package/lib/es2018/utils/trailing-zeros.d.ts +1 -0
- package/lib/es2018/utils/trailing-zeros.js +14 -0
- package/lib/es2018/utils/trailing-zeros.js.map +1 -0
- package/package.json +1 -1
package/dist/es2015/index.umd.js
CHANGED
|
@@ -6222,16 +6222,31 @@
|
|
|
6222
6222
|
}
|
|
6223
6223
|
}
|
|
6224
6224
|
|
|
6225
|
+
// http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightModLookup
|
|
6226
|
+
const mod37BitPositions = [
|
|
6227
|
+
32, 0, 1, 26, 2, 23, 27, 0, 3, 16,
|
|
6228
|
+
24, 30, 28, 11, 0, 13, 4, 7, 17, 0,
|
|
6229
|
+
25, 22, 31, 15, 29, 10, 12, 6, 0, 21,
|
|
6230
|
+
14, 9, 5, 20, 8, 19, 18
|
|
6231
|
+
];
|
|
6232
|
+
/**
|
|
6233
|
+
* 该函数在找不到结果时返回32, 与Rust内置函数的表现一致.
|
|
6234
|
+
* https://doc.rust-lang.org/std/primitive.u32.html#method.trailing_zeros
|
|
6235
|
+
*/
|
|
6236
|
+
function trailingZeros(value) {
|
|
6237
|
+
return mod37BitPositions[(-value & value) % 37];
|
|
6238
|
+
}
|
|
6239
|
+
|
|
6225
6240
|
class BitSet {
|
|
6226
|
-
constructor(bitsPerElement =
|
|
6241
|
+
constructor(bitsPerElement = 31) {
|
|
6227
6242
|
this.bitsPerElement = bitsPerElement;
|
|
6228
6243
|
this.array = [];
|
|
6229
6244
|
this.length = 0;
|
|
6230
6245
|
this._size = 0;
|
|
6231
6246
|
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6232
6247
|
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6233
|
-
// `
|
|
6234
|
-
es2018Exports$1.assert(bitsPerElement <=
|
|
6248
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6249
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6235
6250
|
}
|
|
6236
6251
|
get [Symbol.toStringTag]() {
|
|
6237
6252
|
return this.constructor.name;
|
|
@@ -6244,26 +6259,18 @@
|
|
|
6244
6259
|
}
|
|
6245
6260
|
*values() {
|
|
6246
6261
|
if (this.length > 0) {
|
|
6247
|
-
|
|
6248
|
-
const
|
|
6249
|
-
|
|
6250
|
-
const lastIndex = maxArrayLength - 1;
|
|
6251
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
6262
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6263
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6264
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
6252
6265
|
let element = this.array[index];
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6266
|
+
let offset = 0;
|
|
6267
|
+
let indexOfBit;
|
|
6268
|
+
while ((indexOfBit = trailingZeros(element)) !== 32) {
|
|
6269
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
6270
|
+
offset += indexOfBit + 1;
|
|
6271
|
+
element >>= indexOfBit + 1;
|
|
6258
6272
|
}
|
|
6259
6273
|
}
|
|
6260
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
6261
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6262
|
-
if (lastElement & 1) {
|
|
6263
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6264
|
-
}
|
|
6265
|
-
lastElement >>= 1;
|
|
6266
|
-
}
|
|
6267
6274
|
}
|
|
6268
6275
|
}
|
|
6269
6276
|
_dumpBinaryStrings() {
|
|
@@ -6323,6 +6330,7 @@
|
|
|
6323
6330
|
}
|
|
6324
6331
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6325
6332
|
getMask(value) {
|
|
6333
|
+
// return 2 ** value
|
|
6326
6334
|
return 1 << value;
|
|
6327
6335
|
}
|
|
6328
6336
|
}
|
|
@@ -6350,14 +6358,16 @@
|
|
|
6350
6358
|
}
|
|
6351
6359
|
*values() {
|
|
6352
6360
|
if (this.length > 0) {
|
|
6353
|
-
|
|
6361
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6362
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6354
6363
|
const remainder = this.bitsPerElement
|
|
6355
6364
|
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
6356
6365
|
const lastIndex = maxArrayLength - 1;
|
|
6357
6366
|
for (let index = 0; index < lastIndex; index++) {
|
|
6358
6367
|
let element = this.array.internalTypedArray[index];
|
|
6359
6368
|
for (let bit = 0; bit < this.bitsPerElement; bit++) {
|
|
6360
|
-
if (element
|
|
6369
|
+
// if (isOdd(element)) {
|
|
6370
|
+
if (element % 2) {
|
|
6361
6371
|
yield index * this.bitsPerElement + bit;
|
|
6362
6372
|
}
|
|
6363
6373
|
element >>= 1;
|
|
@@ -6365,7 +6375,8 @@
|
|
|
6365
6375
|
}
|
|
6366
6376
|
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
6367
6377
|
for (let bit = 0; bit < remainder; bit++) {
|
|
6368
|
-
if (lastElement
|
|
6378
|
+
// if (isOdd(lastElement)) {
|
|
6379
|
+
if (lastElement % 2) {
|
|
6369
6380
|
yield lastIndex * this.bitsPerElement + bit;
|
|
6370
6381
|
}
|
|
6371
6382
|
lastElement >>= 1;
|
|
@@ -6429,6 +6440,7 @@
|
|
|
6429
6440
|
}
|
|
6430
6441
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6431
6442
|
getMask(value) {
|
|
6443
|
+
// return 2 ** value
|
|
6432
6444
|
return 1 << value;
|
|
6433
6445
|
}
|
|
6434
6446
|
}
|