@blackglory/structures 0.14.15 → 0.15.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 (205) hide show
  1. package/README.md +661 -92
  2. package/lib/async-generator-emitter.js +2 -5
  3. package/lib/async-generator-emitter.js.map +1 -1
  4. package/lib/big-map.js +1 -3
  5. package/lib/big-map.js.map +1 -1
  6. package/lib/big-set.js +1 -3
  7. package/lib/big-set.js.map +1 -1
  8. package/lib/{bit-set.d.ts → bit-set/bit-set.d.ts} +5 -2
  9. package/lib/{bit-set.js → bit-set/bit-set.js} +43 -34
  10. package/lib/bit-set/bit-set.js.map +1 -0
  11. package/lib/{typed-bit-set.d.ts → bit-set/dynamic-typed-bit-set.d.ts} +6 -4
  12. package/lib/bit-set/dynamic-typed-bit-set.js +95 -0
  13. package/lib/bit-set/dynamic-typed-bit-set.js.map +1 -0
  14. package/lib/bit-set/index.d.ts +4 -0
  15. package/lib/bit-set/index.js +5 -0
  16. package/lib/bit-set/index.js.map +1 -0
  17. package/lib/bit-set/resizable-typed-bit-set.d.ts +22 -0
  18. package/lib/{typed-bit-set.js → bit-set/resizable-typed-bit-set.js} +37 -39
  19. package/lib/bit-set/resizable-typed-bit-set.js.map +1 -0
  20. package/lib/bit-set/typed-bit-set.d.ts +22 -0
  21. package/lib/bit-set/typed-bit-set.js +99 -0
  22. package/lib/bit-set/typed-bit-set.js.map +1 -0
  23. package/lib/box.js +1 -0
  24. package/lib/box.js.map +1 -1
  25. package/lib/disjoint-set.js +2 -4
  26. package/lib/disjoint-set.js.map +1 -1
  27. package/lib/dynamic-typed-array.d.ts +12 -9
  28. package/lib/dynamic-typed-array.js +51 -66
  29. package/lib/dynamic-typed-array.js.map +1 -1
  30. package/lib/emitter.js +3 -7
  31. package/lib/emitter.js.map +1 -1
  32. package/lib/expirable-map.js +9 -15
  33. package/lib/expirable-map.js.map +1 -1
  34. package/lib/generator-emitter.js +2 -5
  35. package/lib/generator-emitter.js.map +1 -1
  36. package/lib/hash-map.js +2 -1
  37. package/lib/hash-map.js.map +1 -1
  38. package/lib/hash-set.js +2 -1
  39. package/lib/hash-set.js.map +1 -1
  40. package/lib/index.d.ts +5 -7
  41. package/lib/index.js +5 -7
  42. package/lib/index.js.map +1 -1
  43. package/lib/lru-map.js +2 -1
  44. package/lib/lru-map.js.map +1 -1
  45. package/lib/queue.js +1 -3
  46. package/lib/queue.js.map +1 -1
  47. package/lib/radix-tree.js +3 -4
  48. package/lib/radix-tree.js.map +1 -1
  49. package/lib/resizable-typed-array.d.ts +32 -0
  50. package/lib/resizable-typed-array.js +127 -0
  51. package/lib/resizable-typed-array.js.map +1 -0
  52. package/lib/sorted-set.js +2 -1
  53. package/lib/sorted-set.js.map +1 -1
  54. package/lib/sparse-map/clean-sparse-map.d.ts +18 -0
  55. package/lib/sparse-map/clean-sparse-map.js +74 -0
  56. package/lib/sparse-map/clean-sparse-map.js.map +1 -0
  57. package/lib/sparse-map/dynamic-typed-clean-sparse-map-lite.d.ts +21 -0
  58. package/lib/sparse-map/dynamic-typed-clean-sparse-map-lite.js +87 -0
  59. package/lib/sparse-map/dynamic-typed-clean-sparse-map-lite.js.map +1 -0
  60. package/lib/sparse-map/dynamic-typed-sparse-map-lite.d.ts +21 -0
  61. package/lib/sparse-map/dynamic-typed-sparse-map-lite.js +94 -0
  62. package/lib/sparse-map/dynamic-typed-sparse-map-lite.js.map +1 -0
  63. package/lib/sparse-map/index.d.ts +10 -0
  64. package/lib/sparse-map/index.js +11 -0
  65. package/lib/sparse-map/index.js.map +1 -0
  66. package/lib/sparse-map/resizable-typed-clean-sparse-map-lite.d.ts +21 -0
  67. package/lib/sparse-map/resizable-typed-clean-sparse-map-lite.js +85 -0
  68. package/lib/sparse-map/resizable-typed-clean-sparse-map-lite.js.map +1 -0
  69. package/lib/sparse-map/resizable-typed-sparse-map-lite.d.ts +21 -0
  70. package/lib/sparse-map/resizable-typed-sparse-map-lite.js +92 -0
  71. package/lib/sparse-map/resizable-typed-sparse-map-lite.js.map +1 -0
  72. package/lib/{sparse-map.d.ts → sparse-map/sparse-map.d.ts} +6 -5
  73. package/lib/sparse-map/sparse-map.js +86 -0
  74. package/lib/sparse-map/sparse-map.js.map +1 -0
  75. package/lib/sparse-map/typed-clean-sparse-map-lite.d.ts +21 -0
  76. package/lib/sparse-map/typed-clean-sparse-map-lite.js +92 -0
  77. package/lib/sparse-map/typed-clean-sparse-map-lite.js.map +1 -0
  78. package/lib/sparse-map/typed-clean-sparse-map.d.ts +22 -0
  79. package/lib/sparse-map/typed-clean-sparse-map.js +117 -0
  80. package/lib/sparse-map/typed-clean-sparse-map.js.map +1 -0
  81. package/lib/sparse-map/typed-sparse-map-lite.d.ts +21 -0
  82. package/lib/sparse-map/typed-sparse-map-lite.js +109 -0
  83. package/lib/sparse-map/typed-sparse-map-lite.js.map +1 -0
  84. package/lib/sparse-map/typed-sparse-map.d.ts +21 -0
  85. package/lib/sparse-map/typed-sparse-map.js +130 -0
  86. package/lib/sparse-map/typed-sparse-map.js.map +1 -0
  87. package/lib/sparse-set/clean-sparse-set.d.ts +13 -0
  88. package/lib/sparse-set/clean-sparse-set.js +57 -0
  89. package/lib/sparse-set/clean-sparse-set.js.map +1 -0
  90. package/lib/{typed-sparse-set.d.ts → sparse-set/dynamic-typed-clean-sparse-set-lite.d.ts} +6 -6
  91. package/lib/sparse-set/dynamic-typed-clean-sparse-set-lite.js +51 -0
  92. package/lib/sparse-set/dynamic-typed-clean-sparse-set-lite.js.map +1 -0
  93. package/lib/sparse-set/dynamic-typed-clean-sparse-set.d.ts +16 -0
  94. package/lib/sparse-set/dynamic-typed-clean-sparse-set.js +82 -0
  95. package/lib/sparse-set/dynamic-typed-clean-sparse-set.js.map +1 -0
  96. package/lib/sparse-set/dynamic-typed-sparse-set-lite.d.ts +15 -0
  97. package/lib/sparse-set/dynamic-typed-sparse-set-lite.js +52 -0
  98. package/lib/sparse-set/dynamic-typed-sparse-set-lite.js.map +1 -0
  99. package/lib/sparse-set/dynamic-typed-sparse-set.d.ts +15 -0
  100. package/lib/sparse-set/dynamic-typed-sparse-set.js +75 -0
  101. package/lib/sparse-set/dynamic-typed-sparse-set.js.map +1 -0
  102. package/lib/sparse-set/index.d.ts +14 -0
  103. package/lib/sparse-set/index.js +15 -0
  104. package/lib/sparse-set/index.js.map +1 -0
  105. package/lib/sparse-set/resizable-typed-clean-sparse-set-lite.d.ts +15 -0
  106. package/lib/sparse-set/resizable-typed-clean-sparse-set-lite.js +51 -0
  107. package/lib/sparse-set/resizable-typed-clean-sparse-set-lite.js.map +1 -0
  108. package/lib/sparse-set/resizable-typed-clean-sparse-set.d.ts +16 -0
  109. package/lib/sparse-set/resizable-typed-clean-sparse-set.js +83 -0
  110. package/lib/sparse-set/resizable-typed-clean-sparse-set.js.map +1 -0
  111. package/lib/sparse-set/resizable-typed-sparse-set-lite.d.ts +15 -0
  112. package/lib/sparse-set/resizable-typed-sparse-set-lite.js +52 -0
  113. package/lib/sparse-set/resizable-typed-sparse-set-lite.js.map +1 -0
  114. package/lib/sparse-set/resizable-typed-sparse-set.d.ts +15 -0
  115. package/lib/sparse-set/resizable-typed-sparse-set.js +76 -0
  116. package/lib/sparse-set/resizable-typed-sparse-set.js.map +1 -0
  117. package/lib/{sparse-set.d.ts → sparse-set/sparse-set.d.ts} +3 -4
  118. package/lib/sparse-set/sparse-set.js +60 -0
  119. package/lib/sparse-set/sparse-set.js.map +1 -0
  120. package/lib/sparse-set/typed-clean-sparse-set-lite.d.ts +15 -0
  121. package/lib/sparse-set/typed-clean-sparse-set-lite.js +55 -0
  122. package/lib/sparse-set/typed-clean-sparse-set-lite.js.map +1 -0
  123. package/lib/sparse-set/typed-clean-sparse-set.d.ts +16 -0
  124. package/lib/sparse-set/typed-clean-sparse-set.js +80 -0
  125. package/lib/sparse-set/typed-clean-sparse-set.js.map +1 -0
  126. package/lib/sparse-set/typed-sparse-set-lite.d.ts +15 -0
  127. package/lib/sparse-set/typed-sparse-set-lite.js +60 -0
  128. package/lib/sparse-set/typed-sparse-set-lite.js.map +1 -0
  129. package/lib/sparse-set/typed-sparse-set.d.ts +15 -0
  130. package/lib/sparse-set/typed-sparse-set.js +81 -0
  131. package/lib/sparse-set/typed-sparse-set.js.map +1 -0
  132. package/lib/string-radix-tree.js +3 -4
  133. package/lib/string-radix-tree.js.map +1 -1
  134. package/lib/string-trie-map.js +3 -4
  135. package/lib/string-trie-map.js.map +1 -1
  136. package/lib/tlru-map.js +6 -6
  137. package/lib/tlru-map.js.map +1 -1
  138. package/lib/trie-map.js +3 -4
  139. package/lib/trie-map.js.map +1 -1
  140. package/lib/unique-queue.js +1 -3
  141. package/lib/unique-queue.js.map +1 -1
  142. package/lib/utils/compute-new-capacity.d.ts +1 -0
  143. package/lib/utils/compute-new-capacity.js +36 -0
  144. package/lib/utils/compute-new-capacity.js.map +1 -0
  145. package/lib/utils/get-max-value-of-unsigned-typed-array.d.ts +3 -0
  146. package/lib/utils/get-max-value-of-unsigned-typed-array.js +13 -0
  147. package/lib/utils/get-max-value-of-unsigned-typed-array.js.map +1 -0
  148. package/lib/utils/skip-list.js +11 -9
  149. package/lib/utils/skip-list.js.map +1 -1
  150. package/lib/utils/trailing-zeros.js +1 -1
  151. package/lib/utils/trailing-zeros.js.map +1 -1
  152. package/package.json +28 -31
  153. package/src/{bit-set.ts → bit-set/bit-set.ts} +47 -31
  154. package/src/bit-set/dynamic-typed-bit-set.ts +131 -0
  155. package/src/bit-set/index.ts +4 -0
  156. package/src/{typed-bit-set.ts → bit-set/resizable-typed-bit-set.ts} +38 -36
  157. package/src/bit-set/typed-bit-set.ts +134 -0
  158. package/src/dynamic-typed-array.ts +67 -82
  159. package/src/index.ts +5 -7
  160. package/src/resizable-typed-array.ts +214 -0
  161. package/src/sparse-map/clean-sparse-map.ts +84 -0
  162. package/src/sparse-map/dynamic-typed-clean-sparse-map-lite.ts +109 -0
  163. package/src/sparse-map/dynamic-typed-sparse-map-lite.ts +124 -0
  164. package/src/sparse-map/index.ts +11 -0
  165. package/src/sparse-map/resizable-typed-clean-sparse-map-lite.ts +107 -0
  166. package/src/sparse-map/resizable-typed-sparse-map-lite.ts +122 -0
  167. package/src/sparse-map/sparse-map.ts +104 -0
  168. package/src/sparse-map/typed-clean-sparse-map-lite.ts +116 -0
  169. package/src/sparse-map/typed-clean-sparse-map.ts +149 -0
  170. package/src/sparse-map/typed-sparse-map-lite.ts +141 -0
  171. package/src/sparse-map/typed-sparse-map.ts +169 -0
  172. package/src/sparse-set/clean-sparse-set.ts +76 -0
  173. package/src/sparse-set/dynamic-typed-clean-sparse-set-lite.ts +64 -0
  174. package/src/sparse-set/dynamic-typed-clean-sparse-set.ts +101 -0
  175. package/src/sparse-set/dynamic-typed-sparse-set-lite.ts +67 -0
  176. package/src/sparse-set/dynamic-typed-sparse-set.ts +93 -0
  177. package/src/sparse-set/index.ts +15 -0
  178. package/src/sparse-set/resizable-typed-clean-sparse-set-lite.ts +64 -0
  179. package/src/sparse-set/resizable-typed-clean-sparse-set.ts +108 -0
  180. package/src/sparse-set/resizable-typed-sparse-set-lite.ts +67 -0
  181. package/src/sparse-set/resizable-typed-sparse-set.ts +97 -0
  182. package/src/sparse-set/sparse-set.ts +79 -0
  183. package/src/sparse-set/typed-clean-sparse-set-lite.ts +67 -0
  184. package/src/sparse-set/typed-clean-sparse-set.ts +100 -0
  185. package/src/sparse-set/typed-sparse-set-lite.ts +74 -0
  186. package/src/sparse-set/typed-sparse-set.ts +102 -0
  187. package/src/utils/compute-new-capacity.ts +39 -0
  188. package/src/utils/get-max-value-of-unsigned-typed-array.ts +19 -0
  189. package/src/utils/skip-list.ts +1 -1
  190. package/src/utils/trailing-zeros.ts +2 -3
  191. package/lib/bit-set.js.map +0 -1
  192. package/lib/sparse-map.js +0 -76
  193. package/lib/sparse-map.js.map +0 -1
  194. package/lib/sparse-set.js +0 -63
  195. package/lib/sparse-set.js.map +0 -1
  196. package/lib/typed-bit-set.js.map +0 -1
  197. package/lib/typed-sparse-map.d.ts +0 -20
  198. package/lib/typed-sparse-map.js +0 -83
  199. package/lib/typed-sparse-map.js.map +0 -1
  200. package/lib/typed-sparse-set.js +0 -59
  201. package/lib/typed-sparse-set.js.map +0 -1
  202. package/src/sparse-map.ts +0 -82
  203. package/src/sparse-set.ts +0 -74
  204. package/src/typed-sparse-map.ts +0 -97
  205. package/src/typed-sparse-set.ts +0 -73
@@ -0,0 +1,100 @@
1
+ import { assert } from '@blackglory/errors'
2
+ import { go } from '@blackglory/go'
3
+ import { getMaxValueOfUnsignedTypedArray, getMaxValueOfUnsignedTypedArrayConstructor } from '@utils/get-max-value-of-unsigned-typed-array.js'
4
+ import { UnsignedTypedArray } from 'justypes'
5
+
6
+ export class TypedCleanSparseSet implements Iterable<number> {
7
+ private dense: UnsignedTypedArray
8
+ private sparse: UnsignedTypedArray
9
+ private readonly NULL: number
10
+ #length = 0
11
+
12
+ get [Symbol.toStringTag](): string {
13
+ return this.constructor.name
14
+ }
15
+
16
+ get size(): number {
17
+ return this.#length
18
+ }
19
+
20
+ constructor(array: UnsignedTypedArray<ArrayBuffer>) {
21
+ assert(!array.buffer.resizable, 'The array buffer must not be resizable')
22
+
23
+ this.dense = array
24
+
25
+ const NULL = Math.min(
26
+ array.length
27
+ , getMaxValueOfUnsignedTypedArray(array) + 1
28
+ )
29
+ this.NULL = NULL
30
+
31
+ const sparseConstructor = go(() => {
32
+ if (
33
+ NULL <=
34
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint8Array)
35
+ ) {
36
+ return Uint8Array
37
+ } else if (
38
+ NULL <=
39
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint16Array)
40
+ ) {
41
+ return Uint16Array
42
+ } else if (
43
+ NULL <=
44
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint32Array)
45
+ ) {
46
+ return Uint32Array
47
+ } else {
48
+ throw new Error('The array is too large')
49
+ }
50
+ })
51
+ const sparse = new sparseConstructor(getMaxValueOfUnsignedTypedArray(array) + 1)
52
+ sparse.fill(NULL)
53
+ this.sparse = sparse
54
+ }
55
+
56
+ [Symbol.iterator](): IterableIterator<number> {
57
+ return this.values()
58
+ }
59
+
60
+ * values(): IterableIterator<number> {
61
+ for (let i = 0; i < this.#length; i++) {
62
+ yield this.dense[i]
63
+ }
64
+ }
65
+
66
+ has(value: number): boolean {
67
+ return this.sparse[value] !== this.NULL
68
+ }
69
+
70
+ add(value: number): void {
71
+ if (!this.has(value)) {
72
+ const index = this.#length++
73
+ this.dense[index] = value
74
+ this.sparse[value] = index
75
+ }
76
+ }
77
+
78
+ delete(value: number): boolean {
79
+ const index = this.sparse[value]
80
+ if (index !== this.NULL) {
81
+ this.sparse[value] = this.NULL
82
+
83
+ const lastIndex = --this.#length
84
+ const lastValue = this.dense[lastIndex]
85
+ if (value !== lastValue) {
86
+ this.dense[index] = lastValue
87
+ this.sparse[lastValue] = index
88
+ }
89
+
90
+ return true
91
+ } else {
92
+ return false
93
+ }
94
+ }
95
+
96
+ clear(): void {
97
+ this.#length = 0
98
+ this.sparse.fill(this.NULL)
99
+ }
100
+ }
@@ -0,0 +1,74 @@
1
+ import { assert } from '@blackglory/errors'
2
+ import { UnsignedTypedArray } from 'justypes'
3
+
4
+ export class TypedSparseSetLite implements Iterable<number> {
5
+ private dense: UnsignedTypedArray
6
+ private sparse: Array<number | undefined> = []
7
+ #length = 0
8
+
9
+ get [Symbol.toStringTag](): string {
10
+ return this.constructor.name
11
+ }
12
+
13
+ get size(): number {
14
+ return this.#length
15
+ }
16
+
17
+ constructor(array: UnsignedTypedArray<ArrayBuffer>) {
18
+ assert(!array.buffer.resizable, 'The array buffer must not be resizable')
19
+
20
+ this.dense = array
21
+ }
22
+
23
+ [Symbol.iterator](): IterableIterator<number> {
24
+ return this.values()
25
+ }
26
+
27
+ * values(): IterableIterator<number> {
28
+ for (let i = 0; i < this.#length; i++) {
29
+ yield this.dense[i]
30
+ }
31
+ }
32
+
33
+ has(value: number): boolean {
34
+ const index = this.sparse[value]
35
+ return index !== undefined
36
+ && index < this.#length
37
+ && index < this.dense.length // 用于改善JIT优化.
38
+ && this.dense[index] === value
39
+ }
40
+
41
+ add(value: number): void {
42
+ if (!this.has(value)) {
43
+ const index = this.#length++
44
+ this.dense[index] = value
45
+ this.sparse[value] = index
46
+ }
47
+ }
48
+
49
+ delete(value: number): boolean {
50
+ const index = this.sparse[value]
51
+ if (
52
+ index !== undefined &&
53
+ index < this.#length &&
54
+ index < this.dense.length && // 用于改善JIT优化.
55
+ this.dense[index] === value
56
+ ) {
57
+ const lastIndex = --this.#length
58
+ const lastValue = this.dense[lastIndex]
59
+ if (value !== lastValue) {
60
+ this.dense[index] = lastValue
61
+ this.sparse[lastValue] = index
62
+ }
63
+
64
+ return true
65
+ } else {
66
+ return false
67
+ }
68
+ }
69
+
70
+ clear(): void {
71
+ this.#length = 0
72
+ // 无需清空dense和sparse数组.
73
+ }
74
+ }
@@ -0,0 +1,102 @@
1
+ import { assert } from '@blackglory/errors'
2
+ import { go } from '@blackglory/go'
3
+ import { getMaxValueOfUnsignedTypedArray, getMaxValueOfUnsignedTypedArrayConstructor } from '@utils/get-max-value-of-unsigned-typed-array.js'
4
+ import { UnsignedTypedArray } from 'justypes'
5
+
6
+ export class TypedSparseSet implements Iterable<number> {
7
+ private dense: UnsignedTypedArray
8
+ private sparse: UnsignedTypedArray
9
+ #length = 0
10
+
11
+ get [Symbol.toStringTag](): string {
12
+ return this.constructor.name
13
+ }
14
+
15
+ get size(): number {
16
+ return this.#length
17
+ }
18
+
19
+ constructor(array: UnsignedTypedArray<ArrayBuffer>) {
20
+ assert(!array.buffer.resizable, 'The array buffer must not be resizable')
21
+
22
+ this.dense = array
23
+
24
+ const sparseConstructor = go(() => {
25
+ const maxIndex = Math.min(
26
+ array.length - 1
27
+ , getMaxValueOfUnsignedTypedArray(array) + 1
28
+ )
29
+ if (
30
+ maxIndex <=
31
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint8Array)
32
+ ) {
33
+ return Uint8Array
34
+ } else if (
35
+ maxIndex <=
36
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint16Array)
37
+ ) {
38
+ return Uint16Array
39
+ } else if (
40
+ maxIndex <=
41
+ getMaxValueOfUnsignedTypedArrayConstructor(Uint32Array)
42
+ ) {
43
+ return Uint32Array
44
+ } else {
45
+ throw new Error('The array is too large')
46
+ }
47
+ })
48
+ this.sparse = new sparseConstructor(getMaxValueOfUnsignedTypedArray(array) + 1)
49
+ }
50
+
51
+ [Symbol.iterator](): IterableIterator<number> {
52
+ return this.values()
53
+ }
54
+
55
+ * values(): IterableIterator<number> {
56
+ for (let i = 0; i < this.#length; i++) {
57
+ yield this.dense[i]
58
+ }
59
+ }
60
+
61
+ has(value: number): boolean {
62
+ const index = this.sparse[value]
63
+ return index !== undefined
64
+ && index < this.#length
65
+ && index < this.dense.length // 用于改善JIT优化.
66
+ && this.dense[index] === value
67
+ }
68
+
69
+ add(value: number): void {
70
+ if (!this.has(value)) {
71
+ const index = this.#length++
72
+ this.dense[index] = value
73
+ this.sparse[value] = index
74
+ }
75
+ }
76
+
77
+ delete(value: number): boolean {
78
+ const index = this.sparse[value]
79
+ if (
80
+ index !== undefined &&
81
+ index < this.#length &&
82
+ index < this.dense.length && // 用于改善JIT优化.
83
+ this.dense[index] === value
84
+ ) {
85
+ const lastIndex = --this.#length
86
+ const lastValue = this.dense[lastIndex]
87
+ if (value !== lastValue) {
88
+ this.dense[index] = lastValue
89
+ this.sparse[lastValue] = index
90
+ }
91
+
92
+ return true
93
+ } else {
94
+ return false
95
+ }
96
+ }
97
+
98
+ clear(): void {
99
+ this.#length = 0
100
+ // 无需清空dense和sparse数组.
101
+ }
102
+ }
@@ -0,0 +1,39 @@
1
+ export function computeNewCapacity(
2
+ oldCapacity: number
3
+ , targetLength: number
4
+ , growthFactor: number
5
+ ): number {
6
+ if (growthFactor === 1) {
7
+ return targetLength
8
+ } else {
9
+ if (oldCapacity === targetLength) {
10
+ return targetLength
11
+ } else if (oldCapacity < targetLength) {
12
+ // 增加容量以适配targetLength
13
+ let newCapacity = Math.max(oldCapacity, 1)
14
+ while (newCapacity < targetLength) {
15
+ newCapacity *= growthFactor
16
+ }
17
+ return Math.floor(newCapacity)
18
+ } else {
19
+ // 尝试减少容量以适配targetLength
20
+
21
+ // `targetLength = 0`是特殊情况,
22
+ // 此时无论怎么将oldCapacity除以growthFactory几次, 都不可能得到比targetLength小的结果.
23
+ if (targetLength === 0) {
24
+ return 0
25
+ } else {
26
+ let newCapacity = oldCapacity
27
+ while (true) {
28
+ const temp = newCapacity / growthFactor
29
+ if (temp < targetLength) {
30
+ break
31
+ } else {
32
+ newCapacity = temp
33
+ }
34
+ }
35
+ return Math.floor(newCapacity)
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,19 @@
1
+ import { UnsignedTypedArray, UnsignedTypedArrayConstructor } from 'justypes'
2
+
3
+ export function getMaxValueOfUnsignedTypedArrayConstructor(
4
+ constructor: UnsignedTypedArrayConstructor
5
+ ): number {
6
+ switch (constructor) {
7
+ case Uint8Array:
8
+ case Uint8ClampedArray: return 255
9
+ case Uint16Array: return 65535
10
+ case Uint32Array: return 4294967295
11
+ default: throw new Error('Unknown unsigned typed array')
12
+ }
13
+ }
14
+
15
+ export function getMaxValueOfUnsignedTypedArray(array: UnsignedTypedArray): number {
16
+ return getMaxValueOfUnsignedTypedArrayConstructor(
17
+ array.constructor as UnsignedTypedArrayConstructor
18
+ )
19
+ }
@@ -52,7 +52,7 @@ export class SkipList<T> {
52
52
  result[result.length - 1].push(currentNode.value)
53
53
  currentNode = currentNode.next
54
54
  } while (currentNode)
55
- } while (head = head.down)
55
+ } while ((head = head.down, head))
56
56
 
57
57
  return result
58
58
  }
@@ -7,9 +7,8 @@ const mod37BitPositions: number[] = [
7
7
  ]
8
8
 
9
9
  /**
10
- * 该函数在找不到结果时返回32, 与Rust内置函数的表现一致.
11
- * https://doc.rust-lang.org/std/primitive.u32.html#method.trailing_zeros
10
+ * 返回value视作32位无符号整数时尾随零的数量.
12
11
  */
13
12
  export function trailingZeros(value: number): number {
14
- return mod37BitPositions[(-value & value) % 37]
13
+ return mod37BitPositions[((-value & value) >>> 0) % 37]
15
14
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"bit-set.js","sourceRoot":"","sources":["../src/bit-set.ts"],"names":[],"mappings":"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"}
package/lib/sparse-map.js DELETED
@@ -1,76 +0,0 @@
1
- export class SparseMap {
2
- constructor() {
3
- this.keyToIndex = [];
4
- this.indexToKey = [];
5
- this.indexToValue = [];
6
- }
7
- get [Symbol.toStringTag]() {
8
- return this.constructor.name;
9
- }
10
- get size() {
11
- return this.indexToKey.length;
12
- }
13
- get internalArray() {
14
- return this.indexToValue;
15
- }
16
- *entries() {
17
- for (let i = 0; i < this.indexToKey.length; i++) {
18
- yield [this.indexToKey[i], this.indexToValue[i]];
19
- }
20
- }
21
- keys() {
22
- return this.indexToKey.values();
23
- }
24
- values() {
25
- return this.indexToValue.values();
26
- }
27
- getInternalIndexOfKey(key) {
28
- return this.keyToIndex[key];
29
- }
30
- has(key) {
31
- return this.keyToIndex[key] !== undefined;
32
- }
33
- get(key) {
34
- if (this.has(key)) {
35
- const index = this.keyToIndex[key];
36
- return this.indexToValue[index];
37
- }
38
- else {
39
- return undefined;
40
- }
41
- }
42
- set(key, value) {
43
- if (this.has(key)) {
44
- const index = this.keyToIndex[key];
45
- this.indexToValue[index] = value;
46
- }
47
- else {
48
- const index = this.indexToKey.length;
49
- this.indexToKey.push(key);
50
- this.indexToValue.push(value);
51
- this.keyToIndex[key] = index;
52
- }
53
- }
54
- delete(key) {
55
- if (this.has(key)) {
56
- const lastKey = this.indexToKey.pop();
57
- const lastValue = this.indexToValue.pop();
58
- if (key === lastKey) {
59
- this.keyToIndex[key] = undefined;
60
- }
61
- else {
62
- const index = this.keyToIndex[key];
63
- this.indexToKey[index] = lastKey;
64
- this.indexToValue[index] = lastValue;
65
- this.keyToIndex[lastKey] = index;
66
- this.keyToIndex[key] = undefined;
67
- }
68
- }
69
- }
70
- clear() {
71
- this.keyToIndex.length = 0;
72
- this.indexToKey.length = 0;
73
- this.indexToValue.length = 0;
74
- }
75
- }
76
- //# sourceMappingURL=sparse-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sparse-map.js","sourceRoot":"","sources":["../src/sparse-map.ts"],"names":[],"mappings":"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"}
package/lib/sparse-set.js DELETED
@@ -1,63 +0,0 @@
1
- export class SparseSet {
2
- get [Symbol.toStringTag]() {
3
- return this.constructor.name;
4
- }
5
- [Symbol.iterator]() {
6
- return this.indexToValue[Symbol.iterator]();
7
- }
8
- get size() {
9
- return this.indexToValue.length;
10
- }
11
- constructor(array = []) {
12
- this.indexToValue = [];
13
- const valueToIndex = [];
14
- if (array.length > 0) {
15
- for (const [index, value] of array.entries()) {
16
- valueToIndex[value] = index;
17
- }
18
- }
19
- this.valueToIndex = valueToIndex;
20
- }
21
- values() {
22
- return this.indexToValue[Symbol.iterator]();
23
- }
24
- has(value) {
25
- return this.valueToIndex[value] !== undefined;
26
- }
27
- add(value) {
28
- if (!this.has(value)) {
29
- const index = this.indexToValue.length;
30
- this.indexToValue.push(value);
31
- this.valueToIndex[value] = index;
32
- }
33
- }
34
- delete(value) {
35
- if (this.has(value)) {
36
- const lastValue = this.indexToValue.pop();
37
- if (value === lastValue) {
38
- this.valueToIndex[value] = undefined;
39
- }
40
- else {
41
- const index = this.valueToIndex[value];
42
- this.indexToValue[index] = lastValue;
43
- this.valueToIndex[lastValue] = index;
44
- this.valueToIndex[value] = undefined;
45
- }
46
- return true;
47
- }
48
- else {
49
- return false;
50
- }
51
- }
52
- clear() {
53
- this.indexToValue.length = 0;
54
- this.valueToIndex.length = 0;
55
- }
56
- clone() {
57
- const clone = new SparseSet();
58
- clone.indexToValue = [...this.indexToValue];
59
- clone.valueToIndex = [...this.valueToIndex];
60
- return clone;
61
- }
62
- }
63
- //# sourceMappingURL=sparse-set.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sparse-set.js","sourceRoot":"","sources":["../src/sparse-set.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IAIpB,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,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,YAAY,QAAkB,EAAE;QAfxB,iBAAY,GAAa,EAAE,CAAA;QAgBjC,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,OAAO,EAAE,EAAE,CAAC;gBAC7C,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7C,CAAC;IAED,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,CAAA;IAC/C,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,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAG,CAAA;YAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAE,CAAA;gBACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;gBACpC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK,CAAA;gBACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,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,MAAM,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;QAE7B,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3C,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAE3C,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typed-bit-set.js","sourceRoot":"","sources":["../src/typed-bit-set.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { TypedArrayConstructor, TypedArrayOfConstructor } from 'justypes';
2
- import { DynamicTypedArray } from './dynamic-typed-array.js';
3
- export declare class TypedSparseMap<T extends TypedArrayConstructor> {
4
- private keyToIndex;
5
- private indexToKey;
6
- private indexToValue;
7
- get [Symbol.toStringTag](): string;
8
- get size(): number;
9
- get internalTypedArray(): TypedArrayOfConstructor<T>;
10
- constructor(array: DynamicTypedArray<T>);
11
- entries(): IterableIterator<[key: number, value: number]>;
12
- keys(): IterableIterator<number>;
13
- values(): IterableIterator<number>;
14
- getInternalIndexOfKey(key: number): number | undefined;
15
- has(key: number): boolean;
16
- get(key: number): number | undefined;
17
- set(key: number, value: number): void;
18
- delete(key: number): void;
19
- clear(): void;
20
- }
@@ -1,83 +0,0 @@
1
- import { assert } from '@blackglory/errors';
2
- export class TypedSparseMap {
3
- get [Symbol.toStringTag]() {
4
- return this.constructor.name;
5
- }
6
- get size() {
7
- return this.indexToKey.length;
8
- }
9
- get internalTypedArray() {
10
- return this.indexToValue.internalTypedArray;
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
- *entries() {
19
- for (let i = 0; i < this.indexToKey.length; i++) {
20
- yield [
21
- this.indexToKey[i],
22
- this.indexToValue.internalTypedArray[i]
23
- ];
24
- }
25
- }
26
- keys() {
27
- return this.indexToKey.values();
28
- }
29
- *values() {
30
- for (let i = 0; i < this.indexToKey.length; i++) {
31
- yield this.indexToValue.internalTypedArray[i];
32
- }
33
- }
34
- getInternalIndexOfKey(key) {
35
- return this.keyToIndex[key];
36
- }
37
- has(key) {
38
- return this.keyToIndex[key] !== undefined;
39
- }
40
- get(key) {
41
- if (this.has(key)) {
42
- const index = this.keyToIndex[key];
43
- return this.indexToValue.internalTypedArray[index];
44
- }
45
- else {
46
- return undefined;
47
- }
48
- }
49
- set(key, value) {
50
- if (this.has(key)) {
51
- const index = this.keyToIndex[key];
52
- this.indexToValue.internalTypedArray[index] = value;
53
- }
54
- else {
55
- const index = this.indexToKey.length;
56
- this.indexToKey.push(key);
57
- this.indexToValue.push(value);
58
- this.keyToIndex[key] = index;
59
- }
60
- }
61
- delete(key) {
62
- if (this.has(key)) {
63
- const lastKey = this.indexToKey.pop();
64
- const lastValue = this.indexToValue.pop();
65
- if (key === lastKey) {
66
- this.keyToIndex[key] = undefined;
67
- }
68
- else {
69
- const index = this.keyToIndex[key];
70
- this.indexToKey[index] = lastKey;
71
- this.indexToValue.internalTypedArray[index] = lastValue;
72
- this.keyToIndex[lastKey] = index;
73
- this.keyToIndex[key] = undefined;
74
- }
75
- }
76
- }
77
- clear() {
78
- this.keyToIndex.length = 0;
79
- this.indexToKey.length = 0;
80
- this.indexToValue.clear();
81
- }
82
- }
83
- //# sourceMappingURL=typed-sparse-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typed-sparse-map.js","sourceRoot":"","sources":["../src/typed-sparse-map.ts"],"names":[],"mappings":"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"}