@blackglory/structures 0.10.20 → 0.10.22
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 +40 -39
- package/dist/es2015/index.mjs.map +1 -1
- package/dist/es2015/index.umd.js +40 -39
- 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 +40 -39
- package/dist/es2018/index.mjs.map +1 -1
- package/dist/es2018/index.umd.js +40 -39
- 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 +10 -18
- package/lib/es2015/typed-bit-set.js.map +1 -1
- 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 +10 -18
- package/lib/es2018/typed-bit-set.js.map +1 -1
- 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/es2018/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 = 8) {
|
|
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
|
}
|
|
@@ -6335,8 +6343,8 @@
|
|
|
6335
6343
|
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
6336
6344
|
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6337
6345
|
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6338
|
-
// `
|
|
6339
|
-
es2018Exports$1.assert(bitsPerElement <=
|
|
6346
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6347
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6340
6348
|
this.bitsPerElement = bitsPerElement;
|
|
6341
6349
|
}
|
|
6342
6350
|
get [Symbol.toStringTag]() {
|
|
@@ -6350,25 +6358,17 @@
|
|
|
6350
6358
|
}
|
|
6351
6359
|
*values() {
|
|
6352
6360
|
if (this.length > 0) {
|
|
6353
|
-
|
|
6354
|
-
const
|
|
6355
|
-
|
|
6356
|
-
const lastIndex = maxArrayLength - 1;
|
|
6357
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
6361
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6362
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6363
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
6358
6364
|
let element = this.array.internalTypedArray[index];
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
}
|
|
6366
|
-
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
6367
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6368
|
-
if (lastElement & 1) {
|
|
6369
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6365
|
+
let offset = 0;
|
|
6366
|
+
let indexOfBit;
|
|
6367
|
+
while ((indexOfBit = trailingZeros(element)) !== 32) {
|
|
6368
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
6369
|
+
offset += indexOfBit + 1;
|
|
6370
|
+
element >>= indexOfBit + 1;
|
|
6370
6371
|
}
|
|
6371
|
-
lastElement >>= 1;
|
|
6372
6372
|
}
|
|
6373
6373
|
}
|
|
6374
6374
|
}
|
|
@@ -6429,6 +6429,7 @@
|
|
|
6429
6429
|
}
|
|
6430
6430
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6431
6431
|
getMask(value) {
|
|
6432
|
+
// return 2 ** value
|
|
6432
6433
|
return 1 << value;
|
|
6433
6434
|
}
|
|
6434
6435
|
}
|