@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.mjs
CHANGED
|
@@ -6216,16 +6216,31 @@ class SortedSet {
|
|
|
6216
6216
|
}
|
|
6217
6217
|
}
|
|
6218
6218
|
|
|
6219
|
+
// http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightModLookup
|
|
6220
|
+
const mod37BitPositions = [
|
|
6221
|
+
32, 0, 1, 26, 2, 23, 27, 0, 3, 16,
|
|
6222
|
+
24, 30, 28, 11, 0, 13, 4, 7, 17, 0,
|
|
6223
|
+
25, 22, 31, 15, 29, 10, 12, 6, 0, 21,
|
|
6224
|
+
14, 9, 5, 20, 8, 19, 18
|
|
6225
|
+
];
|
|
6226
|
+
/**
|
|
6227
|
+
* 该函数在找不到结果时返回32, 与Rust内置函数的表现一致.
|
|
6228
|
+
* https://doc.rust-lang.org/std/primitive.u32.html#method.trailing_zeros
|
|
6229
|
+
*/
|
|
6230
|
+
function trailingZeros(value) {
|
|
6231
|
+
return mod37BitPositions[(-value & value) % 37];
|
|
6232
|
+
}
|
|
6233
|
+
|
|
6219
6234
|
class BitSet {
|
|
6220
|
-
constructor(bitsPerElement =
|
|
6235
|
+
constructor(bitsPerElement = 8) {
|
|
6221
6236
|
this.bitsPerElement = bitsPerElement;
|
|
6222
6237
|
this.array = [];
|
|
6223
6238
|
this.length = 0;
|
|
6224
6239
|
this._size = 0;
|
|
6225
6240
|
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6226
6241
|
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6227
|
-
// `
|
|
6228
|
-
es2018Exports$1.assert(bitsPerElement <=
|
|
6242
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6243
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6229
6244
|
}
|
|
6230
6245
|
get [Symbol.toStringTag]() {
|
|
6231
6246
|
return this.constructor.name;
|
|
@@ -6238,26 +6253,18 @@ class BitSet {
|
|
|
6238
6253
|
}
|
|
6239
6254
|
*values() {
|
|
6240
6255
|
if (this.length > 0) {
|
|
6241
|
-
|
|
6242
|
-
const
|
|
6243
|
-
|
|
6244
|
-
const lastIndex = maxArrayLength - 1;
|
|
6245
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
6256
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6257
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6258
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
6246
6259
|
let element = this.array[index];
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6260
|
+
let offset = 0;
|
|
6261
|
+
let indexOfBit;
|
|
6262
|
+
while ((indexOfBit = trailingZeros(element)) !== 32) {
|
|
6263
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
6264
|
+
offset += indexOfBit + 1;
|
|
6265
|
+
element >>= indexOfBit + 1;
|
|
6252
6266
|
}
|
|
6253
6267
|
}
|
|
6254
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
6255
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6256
|
-
if (lastElement & 1) {
|
|
6257
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6258
|
-
}
|
|
6259
|
-
lastElement >>= 1;
|
|
6260
|
-
}
|
|
6261
6268
|
}
|
|
6262
6269
|
}
|
|
6263
6270
|
_dumpBinaryStrings() {
|
|
@@ -6317,6 +6324,7 @@ class BitSet {
|
|
|
6317
6324
|
}
|
|
6318
6325
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6319
6326
|
getMask(value) {
|
|
6327
|
+
// return 2 ** value
|
|
6320
6328
|
return 1 << value;
|
|
6321
6329
|
}
|
|
6322
6330
|
}
|
|
@@ -6329,8 +6337,8 @@ class TypedBitSet {
|
|
|
6329
6337
|
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
6330
6338
|
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6331
6339
|
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6332
|
-
// `
|
|
6333
|
-
es2018Exports$1.assert(bitsPerElement <=
|
|
6340
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6341
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6334
6342
|
this.bitsPerElement = bitsPerElement;
|
|
6335
6343
|
}
|
|
6336
6344
|
get [Symbol.toStringTag]() {
|
|
@@ -6344,25 +6352,17 @@ class TypedBitSet {
|
|
|
6344
6352
|
}
|
|
6345
6353
|
*values() {
|
|
6346
6354
|
if (this.length > 0) {
|
|
6347
|
-
|
|
6348
|
-
const
|
|
6349
|
-
|
|
6350
|
-
const lastIndex = maxArrayLength - 1;
|
|
6351
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
6355
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6356
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6357
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
6352
6358
|
let element = this.array.internalTypedArray[index];
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
|
|
6358
|
-
|
|
6359
|
-
}
|
|
6360
|
-
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
6361
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6362
|
-
if (lastElement & 1) {
|
|
6363
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6359
|
+
let offset = 0;
|
|
6360
|
+
let indexOfBit;
|
|
6361
|
+
while ((indexOfBit = trailingZeros(element)) !== 32) {
|
|
6362
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
6363
|
+
offset += indexOfBit + 1;
|
|
6364
|
+
element >>= indexOfBit + 1;
|
|
6364
6365
|
}
|
|
6365
|
-
lastElement >>= 1;
|
|
6366
6366
|
}
|
|
6367
6367
|
}
|
|
6368
6368
|
}
|
|
@@ -6423,6 +6423,7 @@ class TypedBitSet {
|
|
|
6423
6423
|
}
|
|
6424
6424
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6425
6425
|
getMask(value) {
|
|
6426
|
+
// return 2 ** value
|
|
6426
6427
|
return 1 << value;
|
|
6427
6428
|
}
|
|
6428
6429
|
}
|