@blackglory/structures 0.10.19 → 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 +2 -1
- package/dist/es2015/index.min.mjs +2 -2
- package/dist/es2015/index.min.mjs.map +1 -1
- package/dist/es2015/index.mjs +46 -22
- package/dist/es2015/index.mjs.map +1 -1
- package/dist/es2015/index.umd.js +46 -22
- 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 +2 -2
- package/dist/es2018/index.min.mjs.map +1 -1
- package/dist/es2018/index.mjs +46 -22
- package/dist/es2018/index.mjs.map +1 -1
- package/dist/es2018/index.umd.js +46 -22
- 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 +13 -18
- package/lib/es2015/bit-set.js.map +1 -1
- package/lib/es2015/dynamic-typed-array.d.ts +1 -0
- package/lib/es2015/dynamic-typed-array.js +3 -0
- package/lib/es2015/dynamic-typed-array.js.map +1 -1
- package/lib/es2015/typed-bit-set.js +8 -4
- 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 +13 -18
- package/lib/es2018/bit-set.js.map +1 -1
- package/lib/es2018/dynamic-typed-array.d.ts +1 -0
- package/lib/es2018/dynamic-typed-array.js +3 -0
- package/lib/es2018/dynamic-typed-array.js.map +1 -1
- package/lib/es2018/typed-bit-set.js +8 -4
- 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 +3 -2
package/dist/es2015/index.umd.js
CHANGED
|
@@ -5918,6 +5918,9 @@
|
|
|
5918
5918
|
get [Symbol.toStringTag]() {
|
|
5919
5919
|
return this.constructor.name;
|
|
5920
5920
|
}
|
|
5921
|
+
get BYTES_PER_ELEMENT() {
|
|
5922
|
+
return this.typedArrayConstructor.BYTES_PER_ELEMENT;
|
|
5923
|
+
}
|
|
5921
5924
|
/**
|
|
5922
5925
|
* 数组当前的容量.
|
|
5923
5926
|
*/
|
|
@@ -6219,12 +6222,31 @@
|
|
|
6219
6222
|
}
|
|
6220
6223
|
}
|
|
6221
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
|
+
|
|
6222
6240
|
class BitSet {
|
|
6223
|
-
constructor(bitsPerElement =
|
|
6241
|
+
constructor(bitsPerElement = 31) {
|
|
6224
6242
|
this.bitsPerElement = bitsPerElement;
|
|
6225
6243
|
this.array = [];
|
|
6226
6244
|
this.length = 0;
|
|
6227
6245
|
this._size = 0;
|
|
6246
|
+
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6247
|
+
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6248
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6249
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6228
6250
|
}
|
|
6229
6251
|
get [Symbol.toStringTag]() {
|
|
6230
6252
|
return this.constructor.name;
|
|
@@ -6237,26 +6259,18 @@
|
|
|
6237
6259
|
}
|
|
6238
6260
|
*values() {
|
|
6239
6261
|
if (this.length > 0) {
|
|
6240
|
-
|
|
6241
|
-
const
|
|
6242
|
-
|
|
6243
|
-
const lastIndex = maxArrayLength - 1;
|
|
6244
|
-
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++) {
|
|
6245
6265
|
let element = this.array[index];
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
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;
|
|
6251
6272
|
}
|
|
6252
6273
|
}
|
|
6253
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
6254
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6255
|
-
if (lastElement & 1) {
|
|
6256
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6257
|
-
}
|
|
6258
|
-
lastElement >>= 1;
|
|
6259
|
-
}
|
|
6260
6274
|
}
|
|
6261
6275
|
}
|
|
6262
6276
|
_dumpBinaryStrings() {
|
|
@@ -6316,6 +6330,7 @@
|
|
|
6316
6330
|
}
|
|
6317
6331
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6318
6332
|
getMask(value) {
|
|
6333
|
+
// return 2 ** value
|
|
6319
6334
|
return 1 << value;
|
|
6320
6335
|
}
|
|
6321
6336
|
}
|
|
@@ -6323,9 +6338,14 @@
|
|
|
6323
6338
|
class TypedBitSet {
|
|
6324
6339
|
constructor(array) {
|
|
6325
6340
|
this.array = array;
|
|
6326
|
-
this.bitsPerElement = this.array.internalTypedArray.BYTES_PER_ELEMENT * 8;
|
|
6327
6341
|
this.length = 0;
|
|
6328
6342
|
this._size = 0;
|
|
6343
|
+
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
6344
|
+
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6345
|
+
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6346
|
+
// `32`是该数据结构中能够处理的最大值
|
|
6347
|
+
es2018Exports$1.assert(bitsPerElement <= 32, 'The mask of bitsPerElement must be less than or equal to 32');
|
|
6348
|
+
this.bitsPerElement = bitsPerElement;
|
|
6329
6349
|
}
|
|
6330
6350
|
get [Symbol.toStringTag]() {
|
|
6331
6351
|
return this.constructor.name;
|
|
@@ -6338,14 +6358,16 @@
|
|
|
6338
6358
|
}
|
|
6339
6359
|
*values() {
|
|
6340
6360
|
if (this.length > 0) {
|
|
6341
|
-
|
|
6361
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6362
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6342
6363
|
const remainder = this.bitsPerElement
|
|
6343
6364
|
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
6344
6365
|
const lastIndex = maxArrayLength - 1;
|
|
6345
6366
|
for (let index = 0; index < lastIndex; index++) {
|
|
6346
6367
|
let element = this.array.internalTypedArray[index];
|
|
6347
6368
|
for (let bit = 0; bit < this.bitsPerElement; bit++) {
|
|
6348
|
-
if (element
|
|
6369
|
+
// if (isOdd(element)) {
|
|
6370
|
+
if (element % 2) {
|
|
6349
6371
|
yield index * this.bitsPerElement + bit;
|
|
6350
6372
|
}
|
|
6351
6373
|
element >>= 1;
|
|
@@ -6353,7 +6375,8 @@
|
|
|
6353
6375
|
}
|
|
6354
6376
|
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
6355
6377
|
for (let bit = 0; bit < remainder; bit++) {
|
|
6356
|
-
if (lastElement
|
|
6378
|
+
// if (isOdd(lastElement)) {
|
|
6379
|
+
if (lastElement % 2) {
|
|
6357
6380
|
yield lastIndex * this.bitsPerElement + bit;
|
|
6358
6381
|
}
|
|
6359
6382
|
lastElement >>= 1;
|
|
@@ -6417,6 +6440,7 @@
|
|
|
6417
6440
|
}
|
|
6418
6441
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6419
6442
|
getMask(value) {
|
|
6443
|
+
// return 2 ** value
|
|
6420
6444
|
return 1 << value;
|
|
6421
6445
|
}
|
|
6422
6446
|
}
|