@blackglory/structures 0.10.13 → 0.10.15

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.
Files changed (42) hide show
  1. package/README.md +46 -1
  2. package/dist/es2015/index.min.mjs +2 -2
  3. package/dist/es2015/index.min.mjs.map +1 -1
  4. package/dist/es2015/index.mjs +1622 -12138
  5. package/dist/es2015/index.mjs.map +1 -1
  6. package/dist/es2015/index.umd.js +1626 -12137
  7. package/dist/es2015/index.umd.js.map +1 -1
  8. package/dist/es2015/index.umd.min.js +2 -2
  9. package/dist/es2015/index.umd.min.js.map +1 -1
  10. package/dist/es2018/index.min.mjs +2 -2
  11. package/dist/es2018/index.min.mjs.map +1 -1
  12. package/dist/es2018/index.mjs +1622 -12138
  13. package/dist/es2018/index.mjs.map +1 -1
  14. package/dist/es2018/index.umd.js +1626 -12137
  15. package/dist/es2018/index.umd.js.map +1 -1
  16. package/dist/es2018/index.umd.min.js +2 -2
  17. package/dist/es2018/index.umd.min.js.map +1 -1
  18. package/lib/es2015/array.d.ts +4 -0
  19. package/lib/es2015/array.js +24 -0
  20. package/lib/es2015/array.js.map +1 -0
  21. package/lib/es2015/bit-set.d.ts +2 -1
  22. package/lib/es2015/bit-set.js +21 -21
  23. package/lib/es2015/bit-set.js.map +1 -1
  24. package/lib/es2015/index.d.ts +2 -0
  25. package/lib/es2015/index.js +2 -0
  26. package/lib/es2015/index.js.map +1 -1
  27. package/lib/es2015/typed-bit-set.d.ts +19 -0
  28. package/lib/es2015/typed-bit-set.js +95 -0
  29. package/lib/es2015/typed-bit-set.js.map +1 -0
  30. package/lib/es2018/array.d.ts +4 -0
  31. package/lib/es2018/array.js +24 -0
  32. package/lib/es2018/array.js.map +1 -0
  33. package/lib/es2018/bit-set.d.ts +2 -1
  34. package/lib/es2018/bit-set.js +21 -21
  35. package/lib/es2018/bit-set.js.map +1 -1
  36. package/lib/es2018/index.d.ts +2 -0
  37. package/lib/es2018/index.js +2 -0
  38. package/lib/es2018/index.js.map +1 -1
  39. package/lib/es2018/typed-bit-set.d.ts +19 -0
  40. package/lib/es2018/typed-bit-set.js +95 -0
  41. package/lib/es2018/typed-bit-set.js.map +1 -0
  42. package/package.json +4 -4
@@ -0,0 +1,4 @@
1
+ export declare function sliceArrayLeft<T>(arr: T[], num: number): T[];
2
+ export declare function sliceArrayRight<T>(arr: T[], num: number): T[];
3
+ export declare function truncateArrayLeft<T>(arr: T[], num: number): void;
4
+ export declare function truncateArrayRight<T>(arr: T[], num: number): void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.truncateArrayRight = exports.truncateArrayLeft = exports.sliceArrayRight = exports.sliceArrayLeft = void 0;
4
+ function sliceArrayLeft(arr, num) {
5
+ return arr.slice(0, num);
6
+ }
7
+ exports.sliceArrayLeft = sliceArrayLeft;
8
+ function sliceArrayRight(arr, num) {
9
+ const startIndex = arr.length - num;
10
+ return arr.slice(startIndex >= 0 ? startIndex : 0);
11
+ }
12
+ exports.sliceArrayRight = sliceArrayRight;
13
+ function truncateArrayLeft(arr, num) {
14
+ if (arr.length > num) {
15
+ arr.length = num;
16
+ }
17
+ }
18
+ exports.truncateArrayLeft = truncateArrayLeft;
19
+ function truncateArrayRight(arr, num) {
20
+ const startIndex = arr.length - num;
21
+ arr.splice(0, startIndex);
22
+ }
23
+ exports.truncateArrayRight = truncateArrayRight;
24
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAI,GAAQ,EAAE,GAAW;IACrD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC1B,CAAC;AAFD,wCAEC;AAED,SAAgB,eAAe,CAAI,GAAQ,EAAE,GAAW;IACtD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;IACnC,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAHD,0CAGC;AAED,SAAgB,iBAAiB,CAAI,GAAQ,EAAE,GAAW;IACxD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;KACjB;AACH,CAAC;AAJD,8CAIC;AAED,SAAgB,kBAAkB,CAAI,GAAQ,EAAE,GAAW;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;IACnC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3B,CAAC;AAHD,gDAGC"}
@@ -1,7 +1,8 @@
1
1
  export declare class BitSet {
2
- private static bitsPerElement;
2
+ private bitsPerElement;
3
3
  private array;
4
4
  private length;
5
+ constructor(bitsPerElement?: number);
5
6
  get [Symbol.toStringTag](): string;
6
7
  get size(): number;
7
8
  [Symbol.iterator](): IterableIterator<number>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BitSet = void 0;
4
- const dynamic_typed_array_1 = require("./dynamic-typed-array");
5
4
  const errors_1 = require("@blackglory/errors");
6
5
  class BitSet {
7
- constructor() {
8
- this.array = new dynamic_typed_array_1.DynamicTypedArray(Uint8Array);
6
+ constructor(bitsPerElement = 8) {
7
+ this.bitsPerElement = bitsPerElement;
8
+ this.array = [];
9
9
  this.length = 0;
10
10
  }
11
11
  get [Symbol.toStringTag]() {
@@ -19,23 +19,24 @@ class BitSet {
19
19
  }
20
20
  *values() {
21
21
  if (this.length > 0) {
22
- const maxArrayLength = Math.ceil(this.length / BitSet.bitsPerElement);
23
- const remainder = BitSet.bitsPerElement - (maxArrayLength * BitSet.bitsPerElement - this.length);
22
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
23
+ const remainder = this.bitsPerElement
24
+ - (maxArrayLength * this.bitsPerElement - this.length);
24
25
  const lastIndex = maxArrayLength - 1;
25
26
  for (let index = 0; index < lastIndex; index++) {
26
- const element = this.array.internalTypedArray[index];
27
- for (let bit = 0; bit < BitSet.bitsPerElement; bit++) {
27
+ const element = this.array[index];
28
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
28
29
  const mask = this.getMask(bit);
29
30
  if ((element & mask) === mask) {
30
- yield index * BitSet.bitsPerElement + bit;
31
+ yield index * this.bitsPerElement + bit;
31
32
  }
32
33
  }
33
34
  }
34
- const lastElement = this.array.internalTypedArray[maxArrayLength - 1];
35
+ const lastElement = this.array[maxArrayLength - 1];
35
36
  for (let bit = 0; bit < remainder; bit++) {
36
37
  const mask = this.getMask(bit);
37
38
  if ((lastElement & mask) === mask) {
38
- yield lastIndex * BitSet.bitsPerElement + bit;
39
+ yield lastIndex * this.bitsPerElement + bit;
39
40
  }
40
41
  }
41
42
  }
@@ -43,9 +44,9 @@ class BitSet {
43
44
  _dumpBinaryStrings() {
44
45
  const result = [];
45
46
  for (let i = 0; i < this.array.length; i++) {
46
- const binary = this.array.internalTypedArray[i].toString(2);
47
- if (binary.length < BitSet.bitsPerElement) {
48
- result.push('0'.repeat(BitSet.bitsPerElement - binary.length) + binary);
47
+ const binary = this.array[i].toString(2);
48
+ if (binary.length < this.bitsPerElement) {
49
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
49
50
  }
50
51
  else {
51
52
  result.push(binary);
@@ -56,7 +57,7 @@ class BitSet {
56
57
  has(value) {
57
58
  var _a;
58
59
  const [index, mask] = this.getPosition(value);
59
- return (((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
60
+ return (((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
60
61
  }
61
62
  add(value) {
62
63
  var _a;
@@ -65,23 +66,23 @@ class BitSet {
65
66
  this.length = value + 1;
66
67
  }
67
68
  const [index, mask] = this.getPosition(value);
68
- this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) | mask);
69
+ this.array[index] = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) | mask;
69
70
  }
70
71
  delete(value) {
71
72
  var _a;
72
73
  const [index, mask] = this.getPosition(value);
73
- const element = ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0);
74
- this.array.set(index, element & ~mask);
74
+ const element = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0);
75
+ this.array[index] = element & ~mask;
75
76
  return (element & mask) === mask;
76
77
  }
77
78
  clear() {
78
79
  for (let i = this.array.length; i--;) {
79
- this.array.set(i, 0);
80
+ this.array[i] = 0;
80
81
  }
81
82
  }
82
83
  getPosition(value) {
83
- const remainder = value % BitSet.bitsPerElement;
84
- const quotient = (value - remainder) / BitSet.bitsPerElement;
84
+ const remainder = value % this.bitsPerElement;
85
+ const quotient = (value - remainder) / this.bitsPerElement;
85
86
  const index = quotient;
86
87
  const mask = this.getMask(remainder);
87
88
  return [index, mask];
@@ -91,5 +92,4 @@ class BitSet {
91
92
  }
92
93
  }
93
94
  exports.BitSet = BitSet;
94
- BitSet.bitsPerElement = Uint8Array.BYTES_PER_ELEMENT * 8;
95
95
  //# sourceMappingURL=bit-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":";;;AAAA,+DAAyD;AACzD,+CAA2C;AAE3C,MAAa,MAAM;IAAnB;QAEU,UAAK,GAAG,IAAI,uCAAiB,CAAC,UAAU,CAAC,CAAA;QACzC,WAAM,GAAG,CAAC,CAAA;IA8FpB,CAAC;IA5FC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,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;YACnB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;YACrE,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YAChG,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAA;YACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBACpD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE;oBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,CAAA;qBAC1C;iBACF;aACF;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;YACrE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,EAAE;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;oBACjC,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,CAAA;iBAC9C;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,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;aACxE;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,GAAG,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IACvD,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,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC5D,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,GAAG,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IAClC,CAAC;IAED,KAAK;QACH,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;YACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACrB;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,cAAc,CAAA;QAC/C,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,cAAc,CAAA;QAC5D,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;QAC3B,OAAO,SAAA,CAAC,EAAI,KAAK,CAAA,CAAA;IACnB,CAAC;;AAhGH,wBAiGC;AAhGgB,qBAAc,GAAG,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export * from './box';
2
2
  export * from './cons';
3
+ export * from './array';
3
4
  export * from './emitter';
4
5
  export * from './hash-map';
5
6
  export * from './hash-set';
@@ -17,3 +18,4 @@ export * from './typed-sparse-set';
17
18
  export { DynamicTypedArray } from './dynamic-typed-array';
18
19
  export * from './sorted-set';
19
20
  export * from './bit-set';
21
+ export * from './typed-bit-set';
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.DynamicTypedArray = void 0;
18
18
  __exportStar(require("./box"), exports);
19
19
  __exportStar(require("./cons"), exports);
20
+ __exportStar(require("./array"), exports);
20
21
  __exportStar(require("./emitter"), exports);
21
22
  __exportStar(require("./hash-map"), exports);
22
23
  __exportStar(require("./hash-set"), exports);
@@ -35,4 +36,5 @@ var dynamic_typed_array_1 = require("./dynamic-typed-array");
35
36
  Object.defineProperty(exports, "DynamicTypedArray", { enumerable: true, get: function () { return dynamic_typed_array_1.DynamicTypedArray; } });
36
37
  __exportStar(require("./sorted-set"), exports);
37
38
  __exportStar(require("./bit-set"), exports);
39
+ __exportStar(require("./typed-bit-set"), exports);
38
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB;AACzB,kDAA+B"}
@@ -0,0 +1,19 @@
1
+ import { DynamicTypedArray } from './dynamic-typed-array';
2
+ import { UnsignedTypedArrayConstructor } from 'justypes';
3
+ export declare class TypedBitSet<T extends UnsignedTypedArrayConstructor> {
4
+ private array;
5
+ private bitsPerElement;
6
+ private length;
7
+ constructor(array: DynamicTypedArray<T>);
8
+ get [Symbol.toStringTag](): string;
9
+ get size(): number;
10
+ [Symbol.iterator](): IterableIterator<number>;
11
+ values(): IterableIterator<number>;
12
+ _dumpBinaryStrings(): string[];
13
+ has(value: number): boolean;
14
+ add(value: number): void;
15
+ delete(value: number): boolean;
16
+ clear(): void;
17
+ private getPosition;
18
+ private getMask;
19
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedBitSet = void 0;
4
+ const errors_1 = require("@blackglory/errors");
5
+ class TypedBitSet {
6
+ constructor(array) {
7
+ this.array = array;
8
+ this.bitsPerElement = this.array.internalTypedArray.BYTES_PER_ELEMENT * 8;
9
+ this.length = 0;
10
+ }
11
+ get [Symbol.toStringTag]() {
12
+ return this.constructor.name;
13
+ }
14
+ get size() {
15
+ return this.length;
16
+ }
17
+ [Symbol.iterator]() {
18
+ return this.values();
19
+ }
20
+ *values() {
21
+ if (this.length > 0) {
22
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
23
+ const remainder = this.bitsPerElement
24
+ - (maxArrayLength * this.bitsPerElement - this.length);
25
+ const lastIndex = maxArrayLength - 1;
26
+ for (let index = 0; index < lastIndex; index++) {
27
+ const element = this.array.internalTypedArray[index];
28
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
29
+ const mask = this.getMask(bit);
30
+ if ((element & mask) === mask) {
31
+ yield index * this.bitsPerElement + bit;
32
+ }
33
+ }
34
+ }
35
+ const lastElement = this.array.internalTypedArray[maxArrayLength - 1];
36
+ for (let bit = 0; bit < remainder; bit++) {
37
+ const mask = this.getMask(bit);
38
+ if ((lastElement & mask) === mask) {
39
+ yield lastIndex * this.bitsPerElement + bit;
40
+ }
41
+ }
42
+ }
43
+ }
44
+ _dumpBinaryStrings() {
45
+ const result = [];
46
+ for (let i = 0; i < this.array.length; i++) {
47
+ const binary = this.array.internalTypedArray[i].toString(2);
48
+ if (binary.length < this.bitsPerElement) {
49
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
50
+ }
51
+ else {
52
+ result.push(binary);
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ has(value) {
58
+ var _a;
59
+ const [index, mask] = this.getPosition(value);
60
+ return (((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
61
+ }
62
+ add(value) {
63
+ var _a;
64
+ (0, errors_1.assert)(value >= 0, 'value must be greater than or equal to 0');
65
+ if (value >= this.length) {
66
+ this.length = value + 1;
67
+ }
68
+ const [index, mask] = this.getPosition(value);
69
+ this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) | mask);
70
+ }
71
+ delete(value) {
72
+ var _a;
73
+ const [index, mask] = this.getPosition(value);
74
+ const element = ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0);
75
+ this.array.set(index, element & ~mask);
76
+ return (element & mask) === mask;
77
+ }
78
+ clear() {
79
+ for (let i = this.array.length; i--;) {
80
+ this.array.set(i, 0);
81
+ }
82
+ }
83
+ getPosition(value) {
84
+ const remainder = value % this.bitsPerElement;
85
+ const quotient = (value - remainder) / this.bitsPerElement;
86
+ const index = quotient;
87
+ const mask = this.getMask(remainder);
88
+ return [index, mask];
89
+ }
90
+ getMask(value) {
91
+ return Math.pow(2, value);
92
+ }
93
+ }
94
+ exports.TypedBitSet = TypedBitSet;
95
+ //# sourceMappingURL=typed-bit-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../../src/typed-bit-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function sliceArrayLeft<T>(arr: T[], num: number): T[];
2
+ export declare function sliceArrayRight<T>(arr: T[], num: number): T[];
3
+ export declare function truncateArrayLeft<T>(arr: T[], num: number): void;
4
+ export declare function truncateArrayRight<T>(arr: T[], num: number): void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.truncateArrayRight = exports.truncateArrayLeft = exports.sliceArrayRight = exports.sliceArrayLeft = void 0;
4
+ function sliceArrayLeft(arr, num) {
5
+ return arr.slice(0, num);
6
+ }
7
+ exports.sliceArrayLeft = sliceArrayLeft;
8
+ function sliceArrayRight(arr, num) {
9
+ const startIndex = arr.length - num;
10
+ return arr.slice(startIndex >= 0 ? startIndex : 0);
11
+ }
12
+ exports.sliceArrayRight = sliceArrayRight;
13
+ function truncateArrayLeft(arr, num) {
14
+ if (arr.length > num) {
15
+ arr.length = num;
16
+ }
17
+ }
18
+ exports.truncateArrayLeft = truncateArrayLeft;
19
+ function truncateArrayRight(arr, num) {
20
+ const startIndex = arr.length - num;
21
+ arr.splice(0, startIndex);
22
+ }
23
+ exports.truncateArrayRight = truncateArrayRight;
24
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAI,GAAQ,EAAE,GAAW;IACrD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC1B,CAAC;AAFD,wCAEC;AAED,SAAgB,eAAe,CAAI,GAAQ,EAAE,GAAW;IACtD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;IACnC,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAHD,0CAGC;AAED,SAAgB,iBAAiB,CAAI,GAAQ,EAAE,GAAW;IACxD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;KACjB;AACH,CAAC;AAJD,8CAIC;AAED,SAAgB,kBAAkB,CAAI,GAAQ,EAAE,GAAW;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;IACnC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3B,CAAC;AAHD,gDAGC"}
@@ -1,7 +1,8 @@
1
1
  export declare class BitSet {
2
- private static bitsPerElement;
2
+ private bitsPerElement;
3
3
  private array;
4
4
  private length;
5
+ constructor(bitsPerElement?: number);
5
6
  get [Symbol.toStringTag](): string;
6
7
  get size(): number;
7
8
  [Symbol.iterator](): IterableIterator<number>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BitSet = void 0;
4
- const dynamic_typed_array_1 = require("./dynamic-typed-array");
5
4
  const errors_1 = require("@blackglory/errors");
6
5
  class BitSet {
7
- constructor() {
8
- this.array = new dynamic_typed_array_1.DynamicTypedArray(Uint8Array);
6
+ constructor(bitsPerElement = 8) {
7
+ this.bitsPerElement = bitsPerElement;
8
+ this.array = [];
9
9
  this.length = 0;
10
10
  }
11
11
  get [Symbol.toStringTag]() {
@@ -19,23 +19,24 @@ class BitSet {
19
19
  }
20
20
  *values() {
21
21
  if (this.length > 0) {
22
- const maxArrayLength = Math.ceil(this.length / BitSet.bitsPerElement);
23
- const remainder = BitSet.bitsPerElement - (maxArrayLength * BitSet.bitsPerElement - this.length);
22
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
23
+ const remainder = this.bitsPerElement
24
+ - (maxArrayLength * this.bitsPerElement - this.length);
24
25
  const lastIndex = maxArrayLength - 1;
25
26
  for (let index = 0; index < lastIndex; index++) {
26
- const element = this.array.internalTypedArray[index];
27
- for (let bit = 0; bit < BitSet.bitsPerElement; bit++) {
27
+ const element = this.array[index];
28
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
28
29
  const mask = this.getMask(bit);
29
30
  if ((element & mask) === mask) {
30
- yield index * BitSet.bitsPerElement + bit;
31
+ yield index * this.bitsPerElement + bit;
31
32
  }
32
33
  }
33
34
  }
34
- const lastElement = this.array.internalTypedArray[maxArrayLength - 1];
35
+ const lastElement = this.array[maxArrayLength - 1];
35
36
  for (let bit = 0; bit < remainder; bit++) {
36
37
  const mask = this.getMask(bit);
37
38
  if ((lastElement & mask) === mask) {
38
- yield lastIndex * BitSet.bitsPerElement + bit;
39
+ yield lastIndex * this.bitsPerElement + bit;
39
40
  }
40
41
  }
41
42
  }
@@ -43,9 +44,9 @@ class BitSet {
43
44
  _dumpBinaryStrings() {
44
45
  const result = [];
45
46
  for (let i = 0; i < this.array.length; i++) {
46
- const binary = this.array.internalTypedArray[i].toString(2);
47
- if (binary.length < BitSet.bitsPerElement) {
48
- result.push('0'.repeat(BitSet.bitsPerElement - binary.length) + binary);
47
+ const binary = this.array[i].toString(2);
48
+ if (binary.length < this.bitsPerElement) {
49
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
49
50
  }
50
51
  else {
51
52
  result.push(binary);
@@ -56,7 +57,7 @@ class BitSet {
56
57
  has(value) {
57
58
  var _a;
58
59
  const [index, mask] = this.getPosition(value);
59
- return (((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
60
+ return (((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
60
61
  }
61
62
  add(value) {
62
63
  var _a;
@@ -65,23 +66,23 @@ class BitSet {
65
66
  this.length = value + 1;
66
67
  }
67
68
  const [index, mask] = this.getPosition(value);
68
- this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) | mask);
69
+ this.array[index] = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0) | mask;
69
70
  }
70
71
  delete(value) {
71
72
  var _a;
72
73
  const [index, mask] = this.getPosition(value);
73
- const element = ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0);
74
- this.array.set(index, element & ~mask);
74
+ const element = ((_a = this.array[index]) !== null && _a !== void 0 ? _a : 0);
75
+ this.array[index] = element & ~mask;
75
76
  return (element & mask) === mask;
76
77
  }
77
78
  clear() {
78
79
  for (let i = this.array.length; i--;) {
79
- this.array.set(i, 0);
80
+ this.array[i] = 0;
80
81
  }
81
82
  }
82
83
  getPosition(value) {
83
- const remainder = value % BitSet.bitsPerElement;
84
- const quotient = (value - remainder) / BitSet.bitsPerElement;
84
+ const remainder = value % this.bitsPerElement;
85
+ const quotient = (value - remainder) / this.bitsPerElement;
85
86
  const index = quotient;
86
87
  const mask = this.getMask(remainder);
87
88
  return [index, mask];
@@ -91,5 +92,4 @@ class BitSet {
91
92
  }
92
93
  }
93
94
  exports.BitSet = BitSet;
94
- BitSet.bitsPerElement = Uint8Array.BYTES_PER_ELEMENT * 8;
95
95
  //# sourceMappingURL=bit-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../../src/bit-set.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export * from './box';
2
2
  export * from './cons';
3
+ export * from './array';
3
4
  export * from './emitter';
4
5
  export * from './hash-map';
5
6
  export * from './hash-set';
@@ -17,3 +18,4 @@ export * from './typed-sparse-set';
17
18
  export { DynamicTypedArray } from './dynamic-typed-array';
18
19
  export * from './sorted-set';
19
20
  export * from './bit-set';
21
+ export * from './typed-bit-set';
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.DynamicTypedArray = void 0;
18
18
  __exportStar(require("./box"), exports);
19
19
  __exportStar(require("./cons"), exports);
20
+ __exportStar(require("./array"), exports);
20
21
  __exportStar(require("./emitter"), exports);
21
22
  __exportStar(require("./hash-map"), exports);
22
23
  __exportStar(require("./hash-set"), exports);
@@ -35,4 +36,5 @@ var dynamic_typed_array_1 = require("./dynamic-typed-array");
35
36
  Object.defineProperty(exports, "DynamicTypedArray", { enumerable: true, get: function () { return dynamic_typed_array_1.DynamicTypedArray; } });
36
37
  __exportStar(require("./sorted-set"), exports);
37
38
  __exportStar(require("./bit-set"), exports);
39
+ __exportStar(require("./typed-bit-set"), exports);
38
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,+CAA4B;AAC5B,+CAA4B;AAC5B,qDAAkC;AAClC,qDAAkC;AAClC,6DAAyD;AAAhD,wHAAA,iBAAiB,OAAA;AAC1B,+CAA4B;AAC5B,4CAAyB;AACzB,kDAA+B"}
@@ -0,0 +1,19 @@
1
+ import { DynamicTypedArray } from './dynamic-typed-array';
2
+ import { UnsignedTypedArrayConstructor } from 'justypes';
3
+ export declare class TypedBitSet<T extends UnsignedTypedArrayConstructor> {
4
+ private array;
5
+ private bitsPerElement;
6
+ private length;
7
+ constructor(array: DynamicTypedArray<T>);
8
+ get [Symbol.toStringTag](): string;
9
+ get size(): number;
10
+ [Symbol.iterator](): IterableIterator<number>;
11
+ values(): IterableIterator<number>;
12
+ _dumpBinaryStrings(): string[];
13
+ has(value: number): boolean;
14
+ add(value: number): void;
15
+ delete(value: number): boolean;
16
+ clear(): void;
17
+ private getPosition;
18
+ private getMask;
19
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedBitSet = void 0;
4
+ const errors_1 = require("@blackglory/errors");
5
+ class TypedBitSet {
6
+ constructor(array) {
7
+ this.array = array;
8
+ this.bitsPerElement = this.array.internalTypedArray.BYTES_PER_ELEMENT * 8;
9
+ this.length = 0;
10
+ }
11
+ get [Symbol.toStringTag]() {
12
+ return this.constructor.name;
13
+ }
14
+ get size() {
15
+ return this.length;
16
+ }
17
+ [Symbol.iterator]() {
18
+ return this.values();
19
+ }
20
+ *values() {
21
+ if (this.length > 0) {
22
+ const maxArrayLength = Math.ceil(this.length / this.bitsPerElement);
23
+ const remainder = this.bitsPerElement
24
+ - (maxArrayLength * this.bitsPerElement - this.length);
25
+ const lastIndex = maxArrayLength - 1;
26
+ for (let index = 0; index < lastIndex; index++) {
27
+ const element = this.array.internalTypedArray[index];
28
+ for (let bit = 0; bit < this.bitsPerElement; bit++) {
29
+ const mask = this.getMask(bit);
30
+ if ((element & mask) === mask) {
31
+ yield index * this.bitsPerElement + bit;
32
+ }
33
+ }
34
+ }
35
+ const lastElement = this.array.internalTypedArray[maxArrayLength - 1];
36
+ for (let bit = 0; bit < remainder; bit++) {
37
+ const mask = this.getMask(bit);
38
+ if ((lastElement & mask) === mask) {
39
+ yield lastIndex * this.bitsPerElement + bit;
40
+ }
41
+ }
42
+ }
43
+ }
44
+ _dumpBinaryStrings() {
45
+ const result = [];
46
+ for (let i = 0; i < this.array.length; i++) {
47
+ const binary = this.array.internalTypedArray[i].toString(2);
48
+ if (binary.length < this.bitsPerElement) {
49
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary);
50
+ }
51
+ else {
52
+ result.push(binary);
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ has(value) {
58
+ var _a;
59
+ const [index, mask] = this.getPosition(value);
60
+ return (((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) & mask) === mask;
61
+ }
62
+ add(value) {
63
+ var _a;
64
+ (0, errors_1.assert)(value >= 0, 'value must be greater than or equal to 0');
65
+ if (value >= this.length) {
66
+ this.length = value + 1;
67
+ }
68
+ const [index, mask] = this.getPosition(value);
69
+ this.array.set(index, ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0) | mask);
70
+ }
71
+ delete(value) {
72
+ var _a;
73
+ const [index, mask] = this.getPosition(value);
74
+ const element = ((_a = this.array.get(index)) !== null && _a !== void 0 ? _a : 0);
75
+ this.array.set(index, element & ~mask);
76
+ return (element & mask) === mask;
77
+ }
78
+ clear() {
79
+ for (let i = this.array.length; i--;) {
80
+ this.array.set(i, 0);
81
+ }
82
+ }
83
+ getPosition(value) {
84
+ const remainder = value % this.bitsPerElement;
85
+ const quotient = (value - remainder) / this.bitsPerElement;
86
+ const index = quotient;
87
+ const mask = this.getMask(remainder);
88
+ return [index, mask];
89
+ }
90
+ getMask(value) {
91
+ return 2 ** value;
92
+ }
93
+ }
94
+ exports.TypedBitSet = TypedBitSet;
95
+ //# sourceMappingURL=typed-bit-set.js.map