@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.mjs
CHANGED
|
@@ -5912,6 +5912,9 @@ class DynamicTypedArray {
|
|
|
5912
5912
|
get [Symbol.toStringTag]() {
|
|
5913
5913
|
return this.constructor.name;
|
|
5914
5914
|
}
|
|
5915
|
+
get BYTES_PER_ELEMENT() {
|
|
5916
|
+
return this.typedArrayConstructor.BYTES_PER_ELEMENT;
|
|
5917
|
+
}
|
|
5915
5918
|
/**
|
|
5916
5919
|
* 数组当前的容量.
|
|
5917
5920
|
*/
|
|
@@ -6213,12 +6216,31 @@ class SortedSet {
|
|
|
6213
6216
|
}
|
|
6214
6217
|
}
|
|
6215
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
|
+
|
|
6216
6234
|
class BitSet {
|
|
6217
|
-
constructor(bitsPerElement =
|
|
6235
|
+
constructor(bitsPerElement = 31) {
|
|
6218
6236
|
this.bitsPerElement = bitsPerElement;
|
|
6219
6237
|
this.array = [];
|
|
6220
6238
|
this.length = 0;
|
|
6221
6239
|
this._size = 0;
|
|
6240
|
+
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6241
|
+
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6242
|
+
// `31`是该数据结构中能够处理的最大值
|
|
6243
|
+
es2018Exports$1.assert(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
6222
6244
|
}
|
|
6223
6245
|
get [Symbol.toStringTag]() {
|
|
6224
6246
|
return this.constructor.name;
|
|
@@ -6231,26 +6253,18 @@ class BitSet {
|
|
|
6231
6253
|
}
|
|
6232
6254
|
*values() {
|
|
6233
6255
|
if (this.length > 0) {
|
|
6234
|
-
|
|
6235
|
-
const
|
|
6236
|
-
|
|
6237
|
-
const lastIndex = maxArrayLength - 1;
|
|
6238
|
-
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++) {
|
|
6239
6259
|
let element = this.array[index];
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
|
|
6244
|
-
|
|
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;
|
|
6245
6266
|
}
|
|
6246
6267
|
}
|
|
6247
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
6248
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
6249
|
-
if (lastElement & 1) {
|
|
6250
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
6251
|
-
}
|
|
6252
|
-
lastElement >>= 1;
|
|
6253
|
-
}
|
|
6254
6268
|
}
|
|
6255
6269
|
}
|
|
6256
6270
|
_dumpBinaryStrings() {
|
|
@@ -6310,6 +6324,7 @@ class BitSet {
|
|
|
6310
6324
|
}
|
|
6311
6325
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6312
6326
|
getMask(value) {
|
|
6327
|
+
// return 2 ** value
|
|
6313
6328
|
return 1 << value;
|
|
6314
6329
|
}
|
|
6315
6330
|
}
|
|
@@ -6317,9 +6332,14 @@ class BitSet {
|
|
|
6317
6332
|
class TypedBitSet {
|
|
6318
6333
|
constructor(array) {
|
|
6319
6334
|
this.array = array;
|
|
6320
|
-
this.bitsPerElement = this.array.internalTypedArray.BYTES_PER_ELEMENT * 8;
|
|
6321
6335
|
this.length = 0;
|
|
6322
6336
|
this._size = 0;
|
|
6337
|
+
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
6338
|
+
es2018Exports$1.assert(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
6339
|
+
es2018Exports$1.assert(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
6340
|
+
// `32`是该数据结构中能够处理的最大值
|
|
6341
|
+
es2018Exports$1.assert(bitsPerElement <= 32, 'The mask of bitsPerElement must be less than or equal to 32');
|
|
6342
|
+
this.bitsPerElement = bitsPerElement;
|
|
6323
6343
|
}
|
|
6324
6344
|
get [Symbol.toStringTag]() {
|
|
6325
6345
|
return this.constructor.name;
|
|
@@ -6332,14 +6352,16 @@ class TypedBitSet {
|
|
|
6332
6352
|
}
|
|
6333
6353
|
*values() {
|
|
6334
6354
|
if (this.length > 0) {
|
|
6335
|
-
|
|
6355
|
+
// maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
|
|
6356
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
6336
6357
|
const remainder = this.bitsPerElement
|
|
6337
6358
|
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
6338
6359
|
const lastIndex = maxArrayLength - 1;
|
|
6339
6360
|
for (let index = 0; index < lastIndex; index++) {
|
|
6340
6361
|
let element = this.array.internalTypedArray[index];
|
|
6341
6362
|
for (let bit = 0; bit < this.bitsPerElement; bit++) {
|
|
6342
|
-
if (element
|
|
6363
|
+
// if (isOdd(element)) {
|
|
6364
|
+
if (element % 2) {
|
|
6343
6365
|
yield index * this.bitsPerElement + bit;
|
|
6344
6366
|
}
|
|
6345
6367
|
element >>= 1;
|
|
@@ -6347,7 +6369,8 @@ class TypedBitSet {
|
|
|
6347
6369
|
}
|
|
6348
6370
|
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
6349
6371
|
for (let bit = 0; bit < remainder; bit++) {
|
|
6350
|
-
if (lastElement
|
|
6372
|
+
// if (isOdd(lastElement)) {
|
|
6373
|
+
if (lastElement % 2) {
|
|
6351
6374
|
yield lastIndex * this.bitsPerElement + bit;
|
|
6352
6375
|
}
|
|
6353
6376
|
lastElement >>= 1;
|
|
@@ -6411,6 +6434,7 @@ class TypedBitSet {
|
|
|
6411
6434
|
}
|
|
6412
6435
|
// 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
|
|
6413
6436
|
getMask(value) {
|
|
6437
|
+
// return 2 ** value
|
|
6414
6438
|
return 1 << value;
|
|
6415
6439
|
}
|
|
6416
6440
|
}
|