@blackglory/structures 0.13.3 → 0.14.0

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 (66) hide show
  1. package/lib/array.js.map +1 -1
  2. package/lib/big-map.js.map +1 -1
  3. package/lib/big-set.js.map +1 -1
  4. package/lib/bit-set.js.map +1 -1
  5. package/lib/box.js +3 -3
  6. package/lib/box.js.map +1 -1
  7. package/lib/cons.js.map +1 -1
  8. package/lib/dynamic-typed-array.js +10 -10
  9. package/lib/dynamic-typed-array.js.map +1 -1
  10. package/lib/emitter.d.ts +1 -1
  11. package/lib/emitter.js.map +1 -1
  12. package/lib/expirable-map.js.map +1 -1
  13. package/lib/hash-map.js +4 -4
  14. package/lib/hash-map.js.map +1 -1
  15. package/lib/hash-set.js +4 -4
  16. package/lib/hash-set.js.map +1 -1
  17. package/lib/lru-map.js +6 -6
  18. package/lib/lru-map.js.map +1 -1
  19. package/lib/queue.js.map +1 -1
  20. package/lib/radix-tree.js.map +1 -1
  21. package/lib/sorted-set.js +3 -3
  22. package/lib/sorted-set.js.map +1 -1
  23. package/lib/sparse-map.js.map +1 -1
  24. package/lib/sparse-set.js +9 -9
  25. package/lib/sparse-set.js.map +1 -1
  26. package/lib/string-radix-tree.js.map +1 -1
  27. package/lib/string-trie-map.js +1 -1
  28. package/lib/string-trie-map.js.map +1 -1
  29. package/lib/tlru-map.js +6 -6
  30. package/lib/tlru-map.js.map +1 -1
  31. package/lib/trie-map.js +1 -1
  32. package/lib/trie-map.js.map +1 -1
  33. package/lib/typed-bit-set.js.map +1 -1
  34. package/lib/typed-sparse-map.js +6 -6
  35. package/lib/typed-sparse-map.js.map +1 -1
  36. package/lib/typed-sparse-set.js.map +1 -1
  37. package/lib/utils/skip-list.js +3 -3
  38. package/lib/utils/skip-list.js.map +1 -1
  39. package/package.json +31 -31
  40. package/src/array.ts +19 -0
  41. package/src/big-map.ts +98 -0
  42. package/src/big-set.ts +72 -0
  43. package/src/bit-set.ts +124 -0
  44. package/src/box.ts +15 -0
  45. package/src/cons.ts +15 -0
  46. package/src/dynamic-typed-array.ts +201 -0
  47. package/src/emitter.ts +76 -0
  48. package/src/expirable-map.ts +122 -0
  49. package/src/hash-map.ts +34 -0
  50. package/src/hash-set.ts +38 -0
  51. package/src/index.ts +24 -0
  52. package/src/lru-map.ts +69 -0
  53. package/src/queue.ts +30 -0
  54. package/src/radix-tree.ts +264 -0
  55. package/src/sorted-set.ts +34 -0
  56. package/src/sparse-map.ts +83 -0
  57. package/src/sparse-set.ts +67 -0
  58. package/src/string-radix-tree.ts +263 -0
  59. package/src/string-trie-map.ts +102 -0
  60. package/src/tlru-map.ts +162 -0
  61. package/src/trie-map.ts +102 -0
  62. package/src/typed-bit-set.ts +129 -0
  63. package/src/typed-sparse-map.ts +97 -0
  64. package/src/typed-sparse-set.ts +71 -0
  65. package/src/utils/skip-list.ts +195 -0
  66. package/src/utils/trailing-zeros.ts +15 -0
@@ -1,11 +1,5 @@
1
1
  import { assert } from '@blackglory/errors';
2
2
  export class TypedSparseMap {
3
- constructor(array) {
4
- this.keyToIndex = [];
5
- this.indexToKey = [];
6
- assert(array.length === 0, 'array should be empty');
7
- this.indexToValue = array;
8
- }
9
3
  get [Symbol.toStringTag]() {
10
4
  return this.constructor.name;
11
5
  }
@@ -15,6 +9,12 @@ export class TypedSparseMap {
15
9
  get internalTypedArray() {
16
10
  return this.indexToValue.internalTypedArray;
17
11
  }
12
+ constructor(array) {
13
+ this.keyToIndex = [];
14
+ this.indexToKey = [];
15
+ assert(array.length === 0, 'array should be empty');
16
+ this.indexToValue = array;
17
+ }
18
18
  *entries() {
19
19
  for (let i = 0; i < this.indexToKey.length; i++) {
20
20
  yield [
@@ -1 +1 @@
1
- {"version":3,"file":"typed-sparse-map.js","sourceRoot":"","sources":["../src/typed-sparse-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typed-sparse-map.js","sourceRoot":"","sources":["../src/typed-sparse-map.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"typed-sparse-set.js","sourceRoot":"","sources":["../src/typed-sparse-set.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IAMzB,YAAY,KAA2B;QACrC,MAAM,YAAY,GAA8B,EAAE,CAAA;QAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE;gBAC/D,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;aAC5B;SACF;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,CAAE,MAAM;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;SAC9C;IACH,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,KAAK,KAAK,CAAA;IAC/D,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;YACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;SACjC;IACH,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,KAAK,KAAK,EAAE;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAG,CAAA;YAC1C,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,GAAG,SAAS,CAAA;gBACxD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK,CAAA;aACrC;YACD,OAAO,IAAI,CAAA;SACZ;aAAM;YACL,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"typed-sparse-set.js","sourceRoot":"","sources":["../src/typed-sparse-set.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IAMzB,YAAY,KAA2B;QACrC,MAAM,YAAY,GAA8B,EAAE,CAAA;QAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChE,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,CAAE,MAAM;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,KAAK,KAAK,CAAA;IAC/D,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;YACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;QAClC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAG,CAAA;YAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAM,CAAC,GAAG,SAAS,CAAA;gBACxD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK,CAAA;YACtC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;CACF"}
@@ -9,6 +9,9 @@ export class SkipListNode {
9
9
  }
10
10
  }
11
11
  export class SkipList {
12
+ get size() {
13
+ return this._size;
14
+ }
12
15
  constructor(compare) {
13
16
  this.compare = compare;
14
17
  this.head = new SkipListNode(null);
@@ -18,9 +21,6 @@ export class SkipList {
18
21
  this.head.next = this.tail;
19
22
  this.tail.previous = this.head;
20
23
  }
21
- get size() {
22
- return this._size;
23
- }
24
24
  *elements() {
25
25
  let currentNode = this.head;
26
26
  while (currentNode.down) {
@@ -1 +1 @@
1
- {"version":3,"file":"skip-list.js","sourceRoot":"","sources":["../../src/utils/skip-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skip-list.js","sourceRoot":"","sources":["../../src/utils/skip-list.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@blackglory/structures",
3
- "version": "0.13.3",
3
+ "version": "0.14.0",
4
4
  "description": "",
5
5
  "files": [
6
- "lib"
6
+ "lib",
7
+ "src"
7
8
  ],
8
9
  "type": "module",
9
10
  "main": "lib/index.js",
@@ -13,7 +14,7 @@
13
14
  "author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
14
15
  "license": "MIT",
15
16
  "engines": {
16
- "node": ">=16"
17
+ "node": ">=18.17.0"
17
18
  },
18
19
  "scripts": {
19
20
  "prepare": "ts-patch install -s",
@@ -25,8 +26,8 @@
25
26
  "clean": "rimraf lib",
26
27
  "build": "tsc --project tsconfig.build.json --outDir lib",
27
28
  "bench": "run-s bench:*",
28
- "bench:bit-set": "ts-node --require tsconfig-paths/register benches/bit-set.ts",
29
- "bench:sparse-map": "ts-node --require tsconfig-paths/register benches/sparse-map.ts",
29
+ "bench:bit-set": "tsx benches/bit-set.ts",
30
+ "bench:sparse-map": "tsx benches/sparse-map.ts",
30
31
  "release": "standard-version"
31
32
  },
32
33
  "husky": {
@@ -36,39 +37,38 @@
36
37
  }
37
38
  },
38
39
  "devDependencies": {
39
- "@blackglory/jest-resolver": "^0.3.0",
40
- "@commitlint/cli": "^17.4.4",
41
- "@commitlint/config-conventional": "^17.4.4",
42
- "@types/jest": "^29.5.0",
40
+ "@blackglory/jest-resolver": "^0.3.1",
41
+ "@commitlint/cli": "^18.6.1",
42
+ "@commitlint/config-conventional": "^18.6.2",
43
+ "@types/jest": "^29.5.12",
43
44
  "@types/node": "16",
44
- "@typescript-eslint/eslint-plugin": "^5.55.0",
45
- "@typescript-eslint/parser": "^5.55.0",
45
+ "@typescript-eslint/eslint-plugin": "^7.0.1",
46
+ "@typescript-eslint/parser": "^7.0.1",
46
47
  "cross-env": "^7.0.3",
47
- "eslint": "^8.36.0",
48
- "extra-benchmark": "^0.2.2",
49
- "extra-generator": "^0.4.0",
50
- "extra-promise": "^6.0.5",
48
+ "eslint": "^8.56.0",
49
+ "extra-benchmark": "^0.2.3",
50
+ "extra-generator": "^0.5.4",
51
+ "extra-promise": "^6.2.0",
51
52
  "husky": "^4.3.8",
52
- "jest": "^29.5.0",
53
- "jest-resolve": "^29.5.0",
53
+ "jest": "^29.7.0",
54
+ "jest-resolve": "^29.7.0",
54
55
  "npm-run-all": "^4.1.5",
55
- "return-style": "^3.0.0",
56
- "rimraf": "^4.4.0",
56
+ "return-style": "^3.0.1",
57
+ "rimraf": "^5.0.5",
57
58
  "standard-version": "^9.5.0",
58
- "ts-jest": "^29.0.5",
59
- "ts-node": "^10.9.1",
60
- "ts-patch": "^2.1.0",
61
- "tsconfig-paths": "^4.1.2",
62
- "tslib": "^2.5.0",
63
- "typescript": "4.8",
59
+ "ts-jest": "^29.1.2",
60
+ "ts-patch": "^3.1.2",
61
+ "tslib": "^2.6.2",
62
+ "tsx": "^4.7.1",
63
+ "typescript": "5.3.3",
64
64
  "typescript-transform-paths": "^3.4.6"
65
65
  },
66
66
  "dependencies": {
67
- "@blackglory/errors": "^3.0.0",
68
- "@blackglory/go": "^1.1.2",
69
- "extra-timers": "^0.2.5",
70
- "extra-utils": "^5.1.0",
71
- "iterable-operator": "^4.0.3",
72
- "justypes": "^4.2.0"
67
+ "@blackglory/errors": "^3.0.3",
68
+ "@blackglory/go": "^1.1.3",
69
+ "extra-timers": "^0.2.6",
70
+ "extra-utils": "^5.6.0",
71
+ "iterable-operator": "^5.0.0",
72
+ "justypes": "^4.2.1"
73
73
  }
74
74
  }
package/src/array.ts ADDED
@@ -0,0 +1,19 @@
1
+ export function sliceArrayLeft<T>(arr: T[], num: number): T[] {
2
+ return arr.slice(0, num)
3
+ }
4
+
5
+ export function sliceArrayRight<T>(arr: T[], num: number): T[] {
6
+ const startIndex = arr.length - num
7
+ return arr.slice(startIndex >= 0 ? startIndex : 0)
8
+ }
9
+
10
+ export function truncateArrayLeft<T>(arr: T[], num: number): void {
11
+ if (arr.length > num) {
12
+ arr.length = num
13
+ }
14
+ }
15
+
16
+ export function truncateArrayRight<T>(arr: T[], num: number): void {
17
+ const startIndex = arr.length - num
18
+ arr.splice(0, startIndex)
19
+ }
package/src/big-map.ts ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * A `Map` that supports unlimited elements.
3
+ *
4
+ * Note that `BigMap` cannot preserve the insertion order of elements.
5
+ */
6
+ export class BigMap<K, V> implements Iterable<[K, V]> {
7
+ _maps: Array<Map<K, V>> = []
8
+
9
+ get [Symbol.toStringTag](): string {
10
+ return this.constructor.name
11
+ }
12
+
13
+ get size(): number {
14
+ return this._maps
15
+ .map(map => map.size)
16
+ .reduce((acc, cur) => acc + cur, 0)
17
+ }
18
+
19
+ * [Symbol.iterator](): IterableIterator<[K, V]> {
20
+ for (const map of this._maps) {
21
+ yield* map[Symbol.iterator]()
22
+ }
23
+ }
24
+
25
+ set(key: K, value: V): void {
26
+ {
27
+ const map = this._maps.find(map => map.has(key))
28
+ if (map) {
29
+ map.set(key, value)
30
+ return
31
+ }
32
+ }
33
+
34
+ for (const map of this._maps) {
35
+ try {
36
+ map.set(key, value)
37
+ return
38
+ } catch (e) {
39
+ if (e instanceof RangeError) continue
40
+ throw e
41
+ }
42
+ }
43
+
44
+ const map = new Map<K, V>()
45
+ map.set(key, value)
46
+ this._maps.push(map)
47
+ }
48
+
49
+ has(key: K): boolean {
50
+ return this._maps.some(set => set.has(key))
51
+ }
52
+
53
+ get(key: K): V | undefined {
54
+ for (const map of this._maps) {
55
+ if (map.has(key)) {
56
+ return map.get(key)!
57
+ }
58
+ }
59
+ }
60
+
61
+ delete(key: K): boolean {
62
+ for (const [index, map] of this._maps.entries()) {
63
+ if (map.has(key)) {
64
+ map.delete(key)
65
+
66
+ if (map.size === 0) {
67
+ this._maps.splice(index, 1)
68
+ }
69
+
70
+ return true
71
+ }
72
+ }
73
+
74
+ return false
75
+ }
76
+
77
+ clear(): void {
78
+ this._maps = []
79
+ }
80
+
81
+ * entries(): IterableIterator<[K, V]> {
82
+ for (const map of this._maps) {
83
+ yield* map.entries()
84
+ }
85
+ }
86
+
87
+ * keys(): IterableIterator<K> {
88
+ for (const map of this._maps) {
89
+ yield* map.keys()
90
+ }
91
+ }
92
+
93
+ * values(): IterableIterator<V> {
94
+ for (const map of this._maps) {
95
+ yield* map.values()
96
+ }
97
+ }
98
+ }
package/src/big-set.ts ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * A `Set` that supports unlimited elements.
3
+ *
4
+ * Note that `BigSet` cannot preserve the insertion order of elements.
5
+ */
6
+ export class BigSet<T> implements Iterable<T> {
7
+ _sets: Array<Set<T>> = []
8
+
9
+ get [Symbol.toStringTag](): string {
10
+ return this.constructor.name
11
+ }
12
+
13
+ get size(): number {
14
+ return this._sets
15
+ .map(set => set.size)
16
+ .reduce((acc, cur) => acc + cur, 0)
17
+ }
18
+
19
+ * [Symbol.iterator](): IterableIterator<T> {
20
+ for (const set of this._sets) {
21
+ yield* set[Symbol.iterator]()
22
+ }
23
+ }
24
+
25
+ add(value: T): void {
26
+ if (this._sets.some(set => set.has(value))) return
27
+
28
+ for (const set of this._sets) {
29
+ try {
30
+ set.add(value)
31
+ return
32
+ } catch (e) {
33
+ if (e instanceof RangeError) continue
34
+ throw e
35
+ }
36
+ }
37
+
38
+ const set = new Set<T>()
39
+ set.add(value)
40
+ this._sets.push(set)
41
+ }
42
+
43
+ has(value: T): boolean {
44
+ return this._sets.some(set => set.has(value))
45
+ }
46
+
47
+ delete(value: T): boolean {
48
+ for (const [index, set] of this._sets.entries()) {
49
+ if (set.has(value)) {
50
+ set.delete(value)
51
+
52
+ if (set.size === 0) {
53
+ this._sets.splice(index, 1)
54
+ }
55
+
56
+ return true
57
+ }
58
+ }
59
+
60
+ return false
61
+ }
62
+
63
+ clear(): void {
64
+ this._sets = []
65
+ }
66
+
67
+ * values(): IterableIterator<T> {
68
+ for (const set of this._sets) {
69
+ yield* set.values()
70
+ }
71
+ }
72
+ }
package/src/bit-set.ts ADDED
@@ -0,0 +1,124 @@
1
+ import { assert } from '@blackglory/errors'
2
+ import { trailingZeros } from '@utils/trailing-zeros.js'
3
+
4
+ export class BitSet {
5
+ private array: number[] = []
6
+ private length = 0
7
+ private _size = 0
8
+
9
+ constructor(private bitsPerElement: number = 8) {
10
+ assert(
11
+ Number.isInteger(bitsPerElement)
12
+ , 'The parameter bitsPerElement must be an integer'
13
+ )
14
+ assert(
15
+ bitsPerElement > 0
16
+ , 'The parameter bitsPerElement must be greater than 0'
17
+ )
18
+ // `31`是该数据结构中能够处理的最大值
19
+ assert(
20
+ bitsPerElement <= 31
21
+ , 'The mask of bitsPerElement must be less than or equal to 31'
22
+ )
23
+ }
24
+
25
+ get [Symbol.toStringTag](): string {
26
+ return this.constructor.name
27
+ }
28
+
29
+ get size(): number {
30
+ return this._size
31
+ }
32
+
33
+ [Symbol.iterator](): IterableIterator<number> {
34
+ return this.values()
35
+ }
36
+
37
+ * values(): IterableIterator<number> {
38
+ if (this.length > 0) {
39
+ // maxArrayLength = Math.ceil(this.length / this.bitsPerElement)
40
+ const maxArrayLength = ~~(this.length / this.bitsPerElement) + 1
41
+
42
+ for (let index = 0; index < maxArrayLength; index++) {
43
+ let element = this.array[index]
44
+ let offset = 0
45
+ let indexOfBit: number
46
+ while ((indexOfBit = trailingZeros(element)) !== 32) {
47
+ yield index * this.bitsPerElement + offset + indexOfBit
48
+ offset += indexOfBit + 1
49
+ element >>= indexOfBit + 1
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ _dumpBinaryStrings(): string[] {
56
+ const result: string[] = []
57
+ for (let i = 0; i < this.array.length; i++) {
58
+ const binary = this.array[i].toString(2)
59
+ if (binary.length < this.bitsPerElement) {
60
+ result.push('0'.repeat(this.bitsPerElement - binary.length) + binary)
61
+ } else {
62
+ result.push(binary)
63
+ }
64
+ }
65
+ return result
66
+ }
67
+
68
+ has(value: number): boolean {
69
+ const [index, mask] = this.getPosition(value)
70
+
71
+ return ((this.array[index] ?? 0) & mask) === mask
72
+ }
73
+
74
+ add(value: number): boolean {
75
+ assert(value >= 0, 'value must be greater than or equal to 0')
76
+ if (value >= this.length) {
77
+ this.length = value + 1
78
+ }
79
+
80
+ const [index, mask] = this.getPosition(value)
81
+
82
+ const element = this.array[index] ?? 0
83
+ this.array[index] = element | mask
84
+
85
+ const added = (element & mask) !== mask
86
+ if (added) {
87
+ this._size++
88
+ }
89
+ return added
90
+ }
91
+
92
+ delete(value: number): boolean {
93
+ const [index, mask] = this.getPosition(value)
94
+
95
+ const element = (this.array[index] ?? 0)
96
+ this.array[index] = element & ~mask
97
+
98
+ const deleted = (element & mask) === mask
99
+ if (deleted) {
100
+ this._size--
101
+ }
102
+
103
+ return deleted
104
+ }
105
+
106
+ clear(): void {
107
+ this._size = 0
108
+ this.array.length = 0
109
+ }
110
+
111
+ private getPosition(value: number): [index: number, mask: number] {
112
+ const remainder = value % this.bitsPerElement
113
+ const quotient = (value - remainder) / this.bitsPerElement
114
+ const index = quotient
115
+ const mask = this.getMask(remainder)
116
+ return [index, mask]
117
+ }
118
+
119
+ // 输入一定是一个小于bitsPerElement的值, 取值范围是[0, bitsPerElement)
120
+ private getMask(value: number): number {
121
+ // return 2 ** value
122
+ return 1 << value
123
+ }
124
+ }
package/src/box.ts ADDED
@@ -0,0 +1,15 @@
1
+ export class Box<T> {
2
+ get [Symbol.toStringTag](): string {
3
+ return this.constructor.name
4
+ }
5
+
6
+ constructor(private value: T) {}
7
+
8
+ set(value: T): void {
9
+ this.value = value
10
+ }
11
+
12
+ get(): T {
13
+ return this.value
14
+ }
15
+ }
package/src/cons.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { isNull } from 'extra-utils'
2
+ import { Cons } from 'justypes'
3
+ export { Cons } from 'justypes'
4
+
5
+ export function convertConsToArray<T>([value, next]: Cons<T>): T[] {
6
+ if (isNull(next)) {
7
+ return [value]
8
+ } else {
9
+ return [value, ...convertConsToArray(next)]
10
+ }
11
+ }
12
+
13
+ export function convertArrayToCons<T>([value, ...next]: T[]): Cons<T> {
14
+ return [value, next.length ? convertArrayToCons(next) : null]
15
+ }