@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/lib/es2015/bit-set.js
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BitSet = void 0;
|
|
4
4
|
const errors_1 = require("@blackglory/errors");
|
|
5
|
+
const trailing_zeros_1 = require("./utils/trailing-zeros");
|
|
5
6
|
class BitSet {
|
|
6
|
-
constructor(bitsPerElement =
|
|
7
|
+
constructor(bitsPerElement = 8) {
|
|
7
8
|
this.bitsPerElement = bitsPerElement;
|
|
8
9
|
this.array = [];
|
|
9
10
|
this.length = 0;
|
|
10
11
|
this._size = 0;
|
|
11
12
|
(0, errors_1.assert)(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
12
13
|
(0, errors_1.assert)(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
13
|
-
(0, errors_1.assert)(bitsPerElement <=
|
|
14
|
+
(0, errors_1.assert)(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
14
15
|
}
|
|
15
16
|
get [Symbol.toStringTag]() {
|
|
16
17
|
return this.constructor.name;
|
|
@@ -23,26 +24,17 @@ class BitSet {
|
|
|
23
24
|
}
|
|
24
25
|
*values() {
|
|
25
26
|
if (this.length > 0) {
|
|
26
|
-
const maxArrayLength =
|
|
27
|
-
|
|
28
|
-
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
29
|
-
const lastIndex = maxArrayLength - 1;
|
|
30
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
27
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
28
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
31
29
|
let element = this.array[index];
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
let offset = 0;
|
|
31
|
+
let indexOfBit;
|
|
32
|
+
while ((indexOfBit = (0, trailing_zeros_1.trailingZeros)(element)) !== 32) {
|
|
33
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
34
|
+
offset += indexOfBit + 1;
|
|
35
|
+
element >>= indexOfBit + 1;
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
40
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
41
|
-
if (lastElement & 1) {
|
|
42
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
43
|
-
}
|
|
44
|
-
lastElement >>= 1;
|
|
45
|
-
}
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
40
|
_dumpBinaryStrings() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;
|
|
1
|
+
{"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAC3C,0DAAqD;AAErD,MAAa,MAAM;IAKjB,YAAoB,iBAAyB,CAAC;QAA1B,mBAAc,GAAd,cAAc,CAAY;QAJtC,UAAK,GAAa,EAAE,CAAA;QACpB,WAAM,GAAG,CAAC,CAAA;QACV,UAAK,GAAG,CAAC,CAAA;QAGf,IAAA,eAAM,EACJ,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAChC,iDAAiD,CAClD,CAAA;QACD,IAAA,eAAM,EACJ,cAAc,GAAG,CAAC,EAClB,qDAAqD,CACtD,CAAA;QAED,IAAA,eAAM,EACJ,cAAc,IAAI,EAAE,EACpB,6DAA6D,CAC9D,CAAA;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,CAAE,MAAM;QACN,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAEnB,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;YAEhE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,EAAE,KAAK,EAAE,EAAE;gBACnD,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC/B,IAAI,MAAM,GAAG,CAAC,CAAA;gBACd,IAAI,UAAkB,CAAA;gBACtB,OAAO,CAAC,UAAU,GAAG,IAAA,8BAAa,EAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,UAAU,CAAA;oBACvD,MAAM,IAAI,UAAU,GAAG,CAAC,CAAA;oBACxB,OAAO,KAAK,UAAU,GAAG,CAAC,CAAA;iBAC3B;aACF;SACF;IACH,CAAC;IAED,kBAAkB;QAChB,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACxC,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;aACtE;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aACpB;SACF;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,GAAG,CAAC,KAAa;;QACf,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAE7C,OAAO,CAAC,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IACnD,CAAC;IAED,GAAG,CAAC,KAAa;;QACf,IAAA,eAAM,EAAC,KAAK,IAAI,CAAC,EAAE,0CAA0C,CAAC,CAAA;QAC9D,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAA;SACxB;QAED,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAE7C,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAA;QAElC,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;QACvC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;IACH,CAAC;IAED,MAAM,CAAC,KAAa;;QAClB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAE7C,MAAM,OAAO,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,CAAA;QAEnC,MAAM,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;QACzC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK;QACH,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;YACpC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;SAClB;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAA;QAC7C,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;QAC1D,MAAM,KAAK,GAAG,QAAQ,CAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACtB,CAAC;IAGO,OAAO,CAAC,KAAa;QAE3B,OAAO,CAAC,IAAI,KAAK,CAAA;IACnB,CAAC;CACF;AAxHD,wBAwHC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TypedBitSet = void 0;
|
|
4
4
|
const errors_1 = require("@blackglory/errors");
|
|
5
|
+
const trailing_zeros_1 = require("./utils/trailing-zeros");
|
|
5
6
|
class TypedBitSet {
|
|
6
7
|
constructor(array) {
|
|
7
8
|
this.array = array;
|
|
@@ -10,7 +11,7 @@ class TypedBitSet {
|
|
|
10
11
|
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
11
12
|
(0, errors_1.assert)(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
12
13
|
(0, errors_1.assert)(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
13
|
-
(0, errors_1.assert)(bitsPerElement <=
|
|
14
|
+
(0, errors_1.assert)(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
14
15
|
this.bitsPerElement = bitsPerElement;
|
|
15
16
|
}
|
|
16
17
|
get [Symbol.toStringTag]() {
|
|
@@ -24,26 +25,17 @@ class TypedBitSet {
|
|
|
24
25
|
}
|
|
25
26
|
*values() {
|
|
26
27
|
if (this.length > 0) {
|
|
27
|
-
const maxArrayLength =
|
|
28
|
-
|
|
29
|
-
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
30
|
-
const lastIndex = maxArrayLength - 1;
|
|
31
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
28
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
29
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
32
30
|
let element = this.array.internalTypedArray[index];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
let offset = 0;
|
|
32
|
+
let indexOfBit;
|
|
33
|
+
while ((indexOfBit = (0, trailing_zeros_1.trailingZeros)(element)) !== 32) {
|
|
34
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
35
|
+
offset += indexOfBit + 1;
|
|
36
|
+
element >>= indexOfBit + 1;
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
|
-
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
41
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
42
|
-
if (lastElement & 1) {
|
|
43
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
44
|
-
}
|
|
45
|
-
lastElement >>= 1;
|
|
46
|
-
}
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
41
|
_dumpBinaryStrings() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../../src/typed-bit-set.ts"],"names":[],"mappings":";;;AAEA,+CAA2C;
|
|
1
|
+
{"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../../src/typed-bit-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function trailingZeros(value: number): number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trailingZeros = void 0;
|
|
4
|
+
const mod37BitPositions = [
|
|
5
|
+
32, 0, 1, 26, 2, 23, 27, 0, 3, 16,
|
|
6
|
+
24, 30, 28, 11, 0, 13, 4, 7, 17, 0,
|
|
7
|
+
25, 22, 31, 15, 29, 10, 12, 6, 0, 21,
|
|
8
|
+
14, 9, 5, 20, 8, 19, 18
|
|
9
|
+
];
|
|
10
|
+
function trailingZeros(value) {
|
|
11
|
+
return mod37BitPositions[(-value & value) % 37];
|
|
12
|
+
}
|
|
13
|
+
exports.trailingZeros = trailingZeros;
|
|
14
|
+
//# sourceMappingURL=trailing-zeros.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailing-zeros.js","sourceRoot":"","sources":["../../../src/utils/trailing-zeros.ts"],"names":[],"mappings":";;;AACA,MAAM,iBAAiB,GAAa;IAClC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IACjC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAClC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IACpC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;CACxB,CAAA;AAMD,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;AACjD,CAAC;AAFD,sCAEC"}
|
package/lib/es2018/bit-set.js
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BitSet = void 0;
|
|
4
4
|
const errors_1 = require("@blackglory/errors");
|
|
5
|
+
const trailing_zeros_1 = require("./utils/trailing-zeros");
|
|
5
6
|
class BitSet {
|
|
6
|
-
constructor(bitsPerElement =
|
|
7
|
+
constructor(bitsPerElement = 8) {
|
|
7
8
|
this.bitsPerElement = bitsPerElement;
|
|
8
9
|
this.array = [];
|
|
9
10
|
this.length = 0;
|
|
10
11
|
this._size = 0;
|
|
11
12
|
(0, errors_1.assert)(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
12
13
|
(0, errors_1.assert)(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
13
|
-
(0, errors_1.assert)(bitsPerElement <=
|
|
14
|
+
(0, errors_1.assert)(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
14
15
|
}
|
|
15
16
|
get [Symbol.toStringTag]() {
|
|
16
17
|
return this.constructor.name;
|
|
@@ -23,26 +24,17 @@ class BitSet {
|
|
|
23
24
|
}
|
|
24
25
|
*values() {
|
|
25
26
|
if (this.length > 0) {
|
|
26
|
-
const maxArrayLength =
|
|
27
|
-
|
|
28
|
-
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
29
|
-
const lastIndex = maxArrayLength - 1;
|
|
30
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
27
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
28
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
31
29
|
let element = this.array[index];
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
let offset = 0;
|
|
31
|
+
let indexOfBit;
|
|
32
|
+
while ((indexOfBit = (0, trailing_zeros_1.trailingZeros)(element)) !== 32) {
|
|
33
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
34
|
+
offset += indexOfBit + 1;
|
|
35
|
+
element >>= indexOfBit + 1;
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
let lastElement = this.array[maxArrayLength - 1];
|
|
40
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
41
|
-
if (lastElement & 1) {
|
|
42
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
43
|
-
}
|
|
44
|
-
lastElement >>= 1;
|
|
45
|
-
}
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
40
|
_dumpBinaryStrings() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;
|
|
1
|
+
{"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TypedBitSet = void 0;
|
|
4
4
|
const errors_1 = require("@blackglory/errors");
|
|
5
|
+
const trailing_zeros_1 = require("./utils/trailing-zeros");
|
|
5
6
|
class TypedBitSet {
|
|
6
7
|
constructor(array) {
|
|
7
8
|
this.array = array;
|
|
@@ -10,7 +11,7 @@ class TypedBitSet {
|
|
|
10
11
|
const bitsPerElement = array.BYTES_PER_ELEMENT * 8;
|
|
11
12
|
(0, errors_1.assert)(Number.isInteger(bitsPerElement), 'The parameter bitsPerElement must be an integer');
|
|
12
13
|
(0, errors_1.assert)(bitsPerElement > 0, 'The parameter bitsPerElement must be greater than 0');
|
|
13
|
-
(0, errors_1.assert)(bitsPerElement <=
|
|
14
|
+
(0, errors_1.assert)(bitsPerElement <= 31, 'The mask of bitsPerElement must be less than or equal to 31');
|
|
14
15
|
this.bitsPerElement = bitsPerElement;
|
|
15
16
|
}
|
|
16
17
|
get [Symbol.toStringTag]() {
|
|
@@ -24,26 +25,17 @@ class TypedBitSet {
|
|
|
24
25
|
}
|
|
25
26
|
*values() {
|
|
26
27
|
if (this.length > 0) {
|
|
27
|
-
const maxArrayLength =
|
|
28
|
-
|
|
29
|
-
- (maxArrayLength * this.bitsPerElement - this.length);
|
|
30
|
-
const lastIndex = maxArrayLength - 1;
|
|
31
|
-
for (let index = 0; index < lastIndex; index++) {
|
|
28
|
+
const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1;
|
|
29
|
+
for (let index = 0; index < maxArrayLength; index++) {
|
|
32
30
|
let element = this.array.internalTypedArray[index];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
let offset = 0;
|
|
32
|
+
let indexOfBit;
|
|
33
|
+
while ((indexOfBit = (0, trailing_zeros_1.trailingZeros)(element)) !== 32) {
|
|
34
|
+
yield index * this.bitsPerElement + offset + indexOfBit;
|
|
35
|
+
offset += indexOfBit + 1;
|
|
36
|
+
element >>= indexOfBit + 1;
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
|
-
let lastElement = this.array.internalTypedArray[maxArrayLength - 1];
|
|
41
|
-
for (let bit = 0; bit < remainder; bit++) {
|
|
42
|
-
if (lastElement & 1) {
|
|
43
|
-
yield lastIndex * this.bitsPerElement + bit;
|
|
44
|
-
}
|
|
45
|
-
lastElement >>= 1;
|
|
46
|
-
}
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
41
|
_dumpBinaryStrings() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../../src/typed-bit-set.ts"],"names":[],"mappings":";;;AAEA,+CAA2C;
|
|
1
|
+
{"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../../src/typed-bit-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function trailingZeros(value: number): number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trailingZeros = void 0;
|
|
4
|
+
const mod37BitPositions = [
|
|
5
|
+
32, 0, 1, 26, 2, 23, 27, 0, 3, 16,
|
|
6
|
+
24, 30, 28, 11, 0, 13, 4, 7, 17, 0,
|
|
7
|
+
25, 22, 31, 15, 29, 10, 12, 6, 0, 21,
|
|
8
|
+
14, 9, 5, 20, 8, 19, 18
|
|
9
|
+
];
|
|
10
|
+
function trailingZeros(value) {
|
|
11
|
+
return mod37BitPositions[(-value & value) % 37];
|
|
12
|
+
}
|
|
13
|
+
exports.trailingZeros = trailingZeros;
|
|
14
|
+
//# sourceMappingURL=trailing-zeros.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailing-zeros.js","sourceRoot":"","sources":["../../../src/utils/trailing-zeros.ts"],"names":[],"mappings":";;;AACA,MAAM,iBAAiB,GAAa;IAClC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IACjC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAClC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IACpC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;CACxB,CAAA;AAMD,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,iBAAiB,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;AACjD,CAAC;AAFD,sCAEC"}
|