data-structure-typed 2.5.0 → 2.5.2

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 (246) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +5 -1
  7. package/README.md +124 -29
  8. package/dist/cjs/binary-tree.cjs +26282 -0
  9. package/dist/cjs/graph.cjs +5422 -0
  10. package/dist/cjs/hash.cjs +1310 -0
  11. package/dist/cjs/heap.cjs +1602 -0
  12. package/dist/cjs/index.cjs +31257 -14673
  13. package/dist/cjs/linked-list.cjs +4576 -0
  14. package/dist/cjs/matrix.cjs +1080 -0
  15. package/dist/cjs/priority-queue.cjs +1376 -0
  16. package/dist/cjs/queue.cjs +4264 -0
  17. package/dist/cjs/stack.cjs +907 -0
  18. package/dist/cjs/trie.cjs +1223 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +26319 -0
  20. package/dist/cjs-legacy/graph.cjs +5420 -0
  21. package/dist/cjs-legacy/hash.cjs +1310 -0
  22. package/dist/cjs-legacy/heap.cjs +1599 -0
  23. package/dist/cjs-legacy/index.cjs +31268 -14679
  24. package/dist/cjs-legacy/linked-list.cjs +4582 -0
  25. package/dist/cjs-legacy/matrix.cjs +1083 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1374 -0
  27. package/dist/cjs-legacy/queue.cjs +4262 -0
  28. package/dist/cjs-legacy/stack.cjs +907 -0
  29. package/dist/cjs-legacy/trie.cjs +1222 -0
  30. package/dist/esm/binary-tree.mjs +26267 -0
  31. package/dist/esm/graph.mjs +5409 -0
  32. package/dist/esm/hash.mjs +1307 -0
  33. package/dist/esm/heap.mjs +1596 -0
  34. package/dist/esm/index.mjs +31254 -14674
  35. package/dist/esm/linked-list.mjs +4569 -0
  36. package/dist/esm/matrix.mjs +1076 -0
  37. package/dist/esm/priority-queue.mjs +1372 -0
  38. package/dist/esm/queue.mjs +4260 -0
  39. package/dist/esm/stack.mjs +905 -0
  40. package/dist/esm/trie.mjs +1220 -0
  41. package/dist/esm-legacy/binary-tree.mjs +26304 -0
  42. package/dist/esm-legacy/graph.mjs +5407 -0
  43. package/dist/esm-legacy/hash.mjs +1307 -0
  44. package/dist/esm-legacy/heap.mjs +1593 -0
  45. package/dist/esm-legacy/index.mjs +31265 -14680
  46. package/dist/esm-legacy/linked-list.mjs +4575 -0
  47. package/dist/esm-legacy/matrix.mjs +1079 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1370 -0
  49. package/dist/esm-legacy/queue.mjs +4258 -0
  50. package/dist/esm-legacy/stack.mjs +905 -0
  51. package/dist/esm-legacy/trie.mjs +1219 -0
  52. package/dist/types/common/error.d.ts +9 -0
  53. package/dist/types/common/index.d.ts +1 -1
  54. package/dist/types/data-structures/base/index.d.ts +1 -0
  55. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  56. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  57. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  58. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  59. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  60. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  61. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  62. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  63. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  64. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  65. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  66. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  67. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  68. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  70. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  71. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  72. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  73. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  74. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  75. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  76. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  77. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  78. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  79. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  80. package/dist/types/interfaces/graph.d.ts +1 -1
  81. package/dist/types/types/common.d.ts +2 -2
  82. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  83. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  84. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  85. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  86. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  87. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  88. package/dist/types/types/utils/validate-type.d.ts +4 -4
  89. package/dist/umd/data-structure-typed.js +31196 -14608
  90. package/dist/umd/data-structure-typed.min.js +11 -5
  91. package/docs-site-docusaurus/README.md +41 -0
  92. package/docs-site-docusaurus/docs/api/README.md +52 -0
  93. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6644 -0
  94. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  95. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  96. package/docs-site-docusaurus/docs/api/classes/BST.md +6293 -0
  97. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  98. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  99. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  100. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  101. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  102. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  103. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  104. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  105. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  106. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  107. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  108. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  109. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  110. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  111. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  112. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  113. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  116. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  117. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  118. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  119. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  120. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  121. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  122. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  123. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  124. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  125. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6888 -0
  126. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  127. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  128. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  129. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  130. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  131. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1389 -0
  132. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1591 -0
  133. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1246 -0
  134. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  135. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  136. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  137. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  138. package/docs-site-docusaurus/docs/guide/architecture.md +615 -0
  139. package/docs-site-docusaurus/docs/guide/concepts.md +451 -0
  140. package/docs-site-docusaurus/docs/guide/faq.md +180 -0
  141. package/docs-site-docusaurus/docs/guide/guides.md +597 -0
  142. package/docs-site-docusaurus/docs/guide/installation.md +62 -0
  143. package/docs-site-docusaurus/docs/guide/integrations.md +825 -0
  144. package/docs-site-docusaurus/docs/guide/overview.md +645 -0
  145. package/docs-site-docusaurus/docs/guide/performance.md +835 -0
  146. package/docs-site-docusaurus/docs/guide/quick-start.md +104 -0
  147. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  148. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  149. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  150. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  151. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  152. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  153. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  154. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  155. package/docs-site-docusaurus/package-lock.json +18667 -0
  156. package/docs-site-docusaurus/package.json +50 -0
  157. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  158. package/docs-site-docusaurus/sidebars.ts +23 -0
  159. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  160. package/docs-site-docusaurus/src/css/custom.css +96 -0
  161. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  162. package/docs-site-docusaurus/src/pages/index.tsx +120 -0
  163. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  164. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  165. package/docs-site-docusaurus/static/.nojekyll +0 -0
  166. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  167. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  168. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  169. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  170. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  171. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  172. package/docs-site-docusaurus/static/img/logo.png +0 -0
  173. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  174. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  175. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  176. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  177. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  178. package/docs-site-docusaurus/static/llms.txt +37 -0
  179. package/docs-site-docusaurus/static/robots.txt +4 -0
  180. package/docs-site-docusaurus/typedoc.json +23 -0
  181. package/llms.txt +37 -0
  182. package/package.json +159 -55
  183. package/src/common/error.ts +19 -1
  184. package/src/common/index.ts +1 -1
  185. package/src/data-structures/base/index.ts +1 -0
  186. package/src/data-structures/base/iterable-element-base.ts +3 -2
  187. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  188. package/src/data-structures/base/linear-base.ts +3 -3
  189. package/src/data-structures/binary-tree/avl-tree.ts +287 -0
  190. package/src/data-structures/binary-tree/binary-indexed-tree.ts +327 -5
  191. package/src/data-structures/binary-tree/binary-tree.ts +581 -6
  192. package/src/data-structures/binary-tree/bst.ts +922 -7
  193. package/src/data-structures/binary-tree/red-black-tree.ts +453 -0
  194. package/src/data-structures/binary-tree/segment-tree.ts +139 -2
  195. package/src/data-structures/binary-tree/tree-map.ts +3300 -495
  196. package/src/data-structures/binary-tree/tree-multi-map.ts +3384 -563
  197. package/src/data-structures/binary-tree/tree-multi-set.ts +2757 -493
  198. package/src/data-structures/binary-tree/tree-set.ts +3122 -440
  199. package/src/data-structures/graph/abstract-graph.ts +6 -6
  200. package/src/data-structures/graph/directed-graph.ts +230 -0
  201. package/src/data-structures/graph/undirected-graph.ts +207 -0
  202. package/src/data-structures/hash/hash-map.ts +270 -19
  203. package/src/data-structures/heap/heap.ts +326 -4
  204. package/src/data-structures/heap/max-heap.ts +2 -2
  205. package/src/data-structures/linked-list/doubly-linked-list.ts +394 -3
  206. package/src/data-structures/linked-list/singly-linked-list.ts +348 -3
  207. package/src/data-structures/linked-list/skip-linked-list.ts +421 -7
  208. package/src/data-structures/matrix/matrix.ts +194 -10
  209. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  210. package/src/data-structures/queue/deque.ts +350 -5
  211. package/src/data-structures/queue/queue.ts +276 -0
  212. package/src/data-structures/stack/stack.ts +230 -0
  213. package/src/data-structures/trie/trie.ts +283 -7
  214. package/src/interfaces/graph.ts +1 -1
  215. package/src/types/common.ts +2 -2
  216. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  217. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  218. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  219. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  220. package/src/types/data-structures/heap/heap.ts +1 -0
  221. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  222. package/src/types/utils/validate-type.ts +4 -4
  223. package/vercel.json +6 -0
  224. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  225. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  226. package/dist/leetcode/avl-tree.mjs +0 -2720
  227. package/dist/leetcode/binary-tree.mjs +0 -1594
  228. package/dist/leetcode/bst.mjs +0 -2398
  229. package/dist/leetcode/deque.mjs +0 -683
  230. package/dist/leetcode/directed-graph.mjs +0 -1733
  231. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  232. package/dist/leetcode/hash-map.mjs +0 -493
  233. package/dist/leetcode/heap.mjs +0 -542
  234. package/dist/leetcode/max-heap.mjs +0 -375
  235. package/dist/leetcode/max-priority-queue.mjs +0 -383
  236. package/dist/leetcode/min-heap.mjs +0 -363
  237. package/dist/leetcode/min-priority-queue.mjs +0 -371
  238. package/dist/leetcode/priority-queue.mjs +0 -363
  239. package/dist/leetcode/queue.mjs +0 -943
  240. package/dist/leetcode/red-black-tree.mjs +0 -2765
  241. package/dist/leetcode/singly-linked-list.mjs +0 -754
  242. package/dist/leetcode/stack.mjs +0 -217
  243. package/dist/leetcode/tree-counter.mjs +0 -3039
  244. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  245. package/dist/leetcode/trie.mjs +0 -413
  246. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -1,709 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var LinkedListNode = class {
103
- static {
104
- __name(this, "LinkedListNode");
105
- }
106
- constructor(value) {
107
- this._value = value;
108
- this._next = void 0;
109
- }
110
- _value;
111
- get value() {
112
- return this._value;
113
- }
114
- set value(value) {
115
- this._value = value;
116
- }
117
- _next;
118
- get next() {
119
- return this._next;
120
- }
121
- set next(value) {
122
- this._next = value;
123
- }
124
- };
125
- var LinearBase = class _LinearBase extends IterableElementBase {
126
- static {
127
- __name(this, "LinearBase");
128
- }
129
- constructor(options) {
130
- super(options);
131
- if (options) {
132
- const { maxLen } = options;
133
- if (typeof maxLen === "number" && maxLen > 0 && maxLen % 1 === 0) this._maxLen = maxLen;
134
- }
135
- }
136
- _maxLen = -1;
137
- get maxLen() {
138
- return this._maxLen;
139
- }
140
- indexOf(searchElement, fromIndex = 0) {
141
- if (this.length === 0) return -1;
142
- if (fromIndex < 0) fromIndex = this.length + fromIndex;
143
- if (fromIndex < 0) fromIndex = 0;
144
- for (let i = fromIndex; i < this.length; i++) {
145
- const element = this.at(i);
146
- if (element === searchElement) return i;
147
- }
148
- return -1;
149
- }
150
- lastIndexOf(searchElement, fromIndex = this.length - 1) {
151
- if (this.length === 0) return -1;
152
- if (fromIndex >= this.length) fromIndex = this.length - 1;
153
- if (fromIndex < 0) fromIndex = this.length + fromIndex;
154
- for (let i = fromIndex; i >= 0; i--) {
155
- const element = this.at(i);
156
- if (element === searchElement) return i;
157
- }
158
- return -1;
159
- }
160
- findIndex(predicate, thisArg) {
161
- for (let i = 0; i < this.length; i++) {
162
- const item = this.at(i);
163
- if (item !== void 0 && predicate.call(thisArg, item, i, this)) return i;
164
- }
165
- return -1;
166
- }
167
- concat(...items) {
168
- const newList = this.clone();
169
- for (const item of items) {
170
- if (item instanceof _LinearBase) {
171
- newList.pushMany(item);
172
- } else {
173
- newList.push(item);
174
- }
175
- }
176
- return newList;
177
- }
178
- sort(compareFn) {
179
- const arr = this.toArray();
180
- arr.sort(compareFn);
181
- this.clear();
182
- for (const item of arr) this.push(item);
183
- return this;
184
- }
185
- splice(start, deleteCount = 0, ...items) {
186
- const removedList = this._createInstance();
187
- start = start < 0 ? this.length + start : start;
188
- start = Math.max(0, Math.min(start, this.length));
189
- deleteCount = Math.max(0, Math.min(deleteCount, this.length - start));
190
- for (let i = 0; i < deleteCount; i++) {
191
- const removed = this.deleteAt(start);
192
- if (removed !== void 0) {
193
- removedList.push(removed);
194
- }
195
- }
196
- for (let i = 0; i < items.length; i++) {
197
- this.addAt(start + i, items[i]);
198
- }
199
- return removedList;
200
- }
201
- join(separator = ",") {
202
- return this.toArray().join(separator);
203
- }
204
- toReversedArray() {
205
- const array = [];
206
- for (let i = this.length - 1; i >= 0; i--) {
207
- array.push(this.at(i));
208
- }
209
- return array;
210
- }
211
- reduceRight(callbackfn, initialValue) {
212
- let accumulator = initialValue ?? 0;
213
- for (let i = this.length - 1; i >= 0; i--) {
214
- accumulator = callbackfn(accumulator, this.at(i), i, this);
215
- }
216
- return accumulator;
217
- }
218
- slice(start = 0, end = this.length) {
219
- start = start < 0 ? this.length + start : start;
220
- end = end < 0 ? this.length + end : end;
221
- const newList = this._createInstance();
222
- for (let i = start; i < end; i++) {
223
- newList.push(this.at(i));
224
- }
225
- return newList;
226
- }
227
- fill(value, start = 0, end = this.length) {
228
- start = start < 0 ? this.length + start : start;
229
- end = end < 0 ? this.length + end : end;
230
- if (start < 0) start = 0;
231
- if (end > this.length) end = this.length;
232
- if (start >= end) return this;
233
- for (let i = start; i < end; i++) {
234
- this.setAt(i, value);
235
- }
236
- return this;
237
- }
238
- };
239
- var LinearLinkedBase = class extends LinearBase {
240
- static {
241
- __name(this, "LinearLinkedBase");
242
- }
243
- constructor(options) {
244
- super(options);
245
- if (options) {
246
- const { maxLen } = options;
247
- if (typeof maxLen === "number" && maxLen > 0 && maxLen % 1 === 0) this._maxLen = maxLen;
248
- }
249
- }
250
- indexOf(searchElement, fromIndex = 0) {
251
- const iterator = this._getIterator();
252
- let current = iterator.next();
253
- let index = 0;
254
- while (index < fromIndex) {
255
- current = iterator.next();
256
- index++;
257
- }
258
- while (!current.done) {
259
- if (current.value === searchElement) return index;
260
- current = iterator.next();
261
- index++;
262
- }
263
- return -1;
264
- }
265
- lastIndexOf(searchElement, fromIndex = this.length - 1) {
266
- const iterator = this._getReverseIterator();
267
- let current = iterator.next();
268
- let index = this.length - 1;
269
- while (index > fromIndex) {
270
- current = iterator.next();
271
- index--;
272
- }
273
- while (!current.done) {
274
- if (current.value === searchElement) return index;
275
- current = iterator.next();
276
- index--;
277
- }
278
- return -1;
279
- }
280
- concat(...items) {
281
- const newList = this.clone();
282
- for (const item of items) {
283
- if (item instanceof LinearBase) {
284
- newList.pushMany(item);
285
- } else {
286
- newList.push(item);
287
- }
288
- }
289
- return newList;
290
- }
291
- slice(start = 0, end = this.length) {
292
- start = start < 0 ? this.length + start : start;
293
- end = end < 0 ? this.length + end : end;
294
- const newList = this._createInstance();
295
- const iterator = this._getIterator();
296
- let current = iterator.next();
297
- let c = 0;
298
- while (c < start) {
299
- current = iterator.next();
300
- c++;
301
- }
302
- for (let i = start; i < end; i++) {
303
- newList.push(current.value);
304
- current = iterator.next();
305
- }
306
- return newList;
307
- }
308
- splice(start, deleteCount = 0, ...items) {
309
- const removedList = this._createInstance();
310
- start = start < 0 ? this.length + start : start;
311
- start = Math.max(0, Math.min(start, this.length));
312
- deleteCount = Math.max(0, deleteCount);
313
- let currentIndex = 0;
314
- let currentNode = void 0;
315
- let previousNode = void 0;
316
- const iterator = this._getNodeIterator();
317
- for (const node of iterator) {
318
- if (currentIndex === start) {
319
- currentNode = node;
320
- break;
321
- }
322
- previousNode = node;
323
- currentIndex++;
324
- }
325
- for (let i = 0; i < deleteCount && currentNode; i++) {
326
- removedList.push(currentNode.value);
327
- const nextNode = currentNode.next;
328
- this.delete(currentNode);
329
- currentNode = nextNode;
330
- }
331
- for (let i = 0; i < items.length; i++) {
332
- if (previousNode) {
333
- this.addAfter(previousNode, items[i]);
334
- previousNode = previousNode.next;
335
- } else {
336
- this.addAt(0, items[i]);
337
- previousNode = this._getNodeIterator().next().value;
338
- }
339
- }
340
- return removedList;
341
- }
342
- reduceRight(callbackfn, initialValue) {
343
- let accumulator = initialValue ?? 0;
344
- let index = this.length - 1;
345
- for (const item of this._getReverseIterator()) {
346
- accumulator = callbackfn(accumulator, item, index--, this);
347
- }
348
- return accumulator;
349
- }
350
- };
351
- var DoublyLinkedListNode = class extends LinkedListNode {
352
- static {
353
- __name(this, "DoublyLinkedListNode");
354
- }
355
- constructor(value) {
356
- super(value);
357
- this._value = value;
358
- this._next = void 0;
359
- this._prev = void 0;
360
- }
361
- _next;
362
- get next() {
363
- return this._next;
364
- }
365
- set next(value) {
366
- this._next = value;
367
- }
368
- _prev;
369
- get prev() {
370
- return this._prev;
371
- }
372
- set prev(value) {
373
- this._prev = value;
374
- }
375
- };
376
- var DoublyLinkedList = class extends LinearLinkedBase {
377
- static {
378
- __name(this, "DoublyLinkedList");
379
- }
380
- _equals = Object.is;
381
- constructor(elements = [], options) {
382
- super(options);
383
- this._head = void 0;
384
- this._tail = void 0;
385
- this._length = 0;
386
- if (options?.maxLen && Number.isInteger(options.maxLen) && options.maxLen > 0) {
387
- this._maxLen = options.maxLen;
388
- }
389
- this.pushMany(elements);
390
- }
391
- _head;
392
- get head() {
393
- return this._head;
394
- }
395
- _tail;
396
- get tail() {
397
- return this._tail;
398
- }
399
- _length = 0;
400
- get length() {
401
- return this._length;
402
- }
403
- get first() {
404
- return this.head?.value;
405
- }
406
- get last() {
407
- return this.tail?.value;
408
- }
409
- static fromArray(data) {
410
- return new this(data);
411
- }
412
- isNode(elementNodeOrPredicate) {
413
- return elementNodeOrPredicate instanceof DoublyLinkedListNode;
414
- }
415
- push(elementOrNode) {
416
- const newNode = this._ensureNode(elementOrNode);
417
- if (!this.head) {
418
- this._head = newNode;
419
- this._tail = newNode;
420
- } else {
421
- newNode.prev = this.tail;
422
- this.tail.next = newNode;
423
- this._tail = newNode;
424
- }
425
- this._length++;
426
- if (this._maxLen > 0 && this.length > this._maxLen) this.shift();
427
- return true;
428
- }
429
- pop() {
430
- if (!this.tail) return void 0;
431
- const removed = this.tail;
432
- if (this.head === this.tail) {
433
- this._head = void 0;
434
- this._tail = void 0;
435
- } else {
436
- this._tail = removed.prev;
437
- this.tail.next = void 0;
438
- }
439
- this._length--;
440
- return removed.value;
441
- }
442
- shift() {
443
- if (!this.head) return void 0;
444
- const removed = this.head;
445
- if (this.head === this.tail) {
446
- this._head = void 0;
447
- this._tail = void 0;
448
- } else {
449
- this._head = removed.next;
450
- this.head.prev = void 0;
451
- }
452
- this._length--;
453
- return removed.value;
454
- }
455
- unshift(elementOrNode) {
456
- const newNode = this._ensureNode(elementOrNode);
457
- if (!this.head) {
458
- this._head = newNode;
459
- this._tail = newNode;
460
- } else {
461
- newNode.next = this.head;
462
- this.head.prev = newNode;
463
- this._head = newNode;
464
- }
465
- this._length++;
466
- if (this._maxLen > 0 && this._length > this._maxLen) this.pop();
467
- return true;
468
- }
469
- pushMany(elements) {
470
- const ans = [];
471
- for (const el of elements) {
472
- if (this.toElementFn) ans.push(this.push(this.toElementFn(el)));
473
- else ans.push(this.push(el));
474
- }
475
- return ans;
476
- }
477
- unshiftMany(elements) {
478
- const ans = [];
479
- for (const el of elements) {
480
- if (this.toElementFn) ans.push(this.unshift(this.toElementFn(el)));
481
- else ans.push(this.unshift(el));
482
- }
483
- return ans;
484
- }
485
- at(index) {
486
- if (index < 0 || index >= this._length) return void 0;
487
- let current = this.head;
488
- for (let i = 0; i < index; i++) current = current.next;
489
- return current.value;
490
- }
491
- getNodeAt(index) {
492
- if (index < 0 || index >= this._length) return void 0;
493
- let current = this.head;
494
- for (let i = 0; i < index; i++) current = current.next;
495
- return current;
496
- }
497
- getNode(elementNodeOrPredicate) {
498
- if (elementNodeOrPredicate === void 0) return;
499
- if (this.isNode(elementNodeOrPredicate)) {
500
- const target = elementNodeOrPredicate;
501
- let cur = this.head;
502
- while (cur) {
503
- if (cur === target) return target;
504
- cur = cur.next;
505
- }
506
- const isMatch = __name((node) => this._equals(node.value, target.value), "isMatch");
507
- cur = this.head;
508
- while (cur) {
509
- if (isMatch(cur)) return cur;
510
- cur = cur.next;
511
- }
512
- return void 0;
513
- }
514
- const predicate = this._ensurePredicate(elementNodeOrPredicate);
515
- let current = this.head;
516
- while (current) {
517
- if (predicate(current)) return current;
518
- current = current.next;
519
- }
520
- return void 0;
521
- }
522
- addAt(index, newElementOrNode) {
523
- if (index < 0 || index > this._length) return false;
524
- if (index === 0) return this.unshift(newElementOrNode);
525
- if (index === this._length) return this.push(newElementOrNode);
526
- const newNode = this._ensureNode(newElementOrNode);
527
- const prevNode = this.getNodeAt(index - 1);
528
- const nextNode = prevNode.next;
529
- newNode.prev = prevNode;
530
- newNode.next = nextNode;
531
- prevNode.next = newNode;
532
- nextNode.prev = newNode;
533
- this._length++;
534
- return true;
535
- }
536
- addBefore(existingElementOrNode, newElementOrNode) {
537
- const existingNode = this.isNode(existingElementOrNode) ? existingElementOrNode : this.getNode(existingElementOrNode);
538
- if (!existingNode) return false;
539
- const newNode = this._ensureNode(newElementOrNode);
540
- newNode.prev = existingNode.prev;
541
- if (existingNode.prev) existingNode.prev.next = newNode;
542
- newNode.next = existingNode;
543
- existingNode.prev = newNode;
544
- if (existingNode === this.head) this._head = newNode;
545
- this._length++;
546
- return true;
547
- }
548
- addAfter(existingElementOrNode, newElementOrNode) {
549
- const existingNode = this.isNode(existingElementOrNode) ? existingElementOrNode : this.getNode(existingElementOrNode);
550
- if (!existingNode) return false;
551
- const newNode = this._ensureNode(newElementOrNode);
552
- newNode.next = existingNode.next;
553
- if (existingNode.next) existingNode.next.prev = newNode;
554
- newNode.prev = existingNode;
555
- existingNode.next = newNode;
556
- if (existingNode === this.tail) this._tail = newNode;
557
- this._length++;
558
- return true;
559
- }
560
- setAt(index, value) {
561
- const node = this.getNodeAt(index);
562
- if (!node) return false;
563
- node.value = value;
564
- return true;
565
- }
566
- deleteAt(index) {
567
- if (index < 0 || index >= this._length) return;
568
- if (index === 0) return this.shift();
569
- if (index === this._length - 1) return this.pop();
570
- const removedNode = this.getNodeAt(index);
571
- const prevNode = removedNode.prev;
572
- const nextNode = removedNode.next;
573
- prevNode.next = nextNode;
574
- nextNode.prev = prevNode;
575
- this._length--;
576
- return removedNode.value;
577
- }
578
- delete(elementOrNode) {
579
- const node = this.getNode(elementOrNode);
580
- if (!node) return false;
581
- if (node === this.head) this.shift();
582
- else if (node === this.tail) this.pop();
583
- else {
584
- const prevNode = node.prev;
585
- const nextNode = node.next;
586
- prevNode.next = nextNode;
587
- nextNode.prev = prevNode;
588
- this._length--;
589
- }
590
- return true;
591
- }
592
- isEmpty() {
593
- return this._length === 0;
594
- }
595
- clear() {
596
- this._head = void 0;
597
- this._tail = void 0;
598
- this._length = 0;
599
- }
600
- search(elementNodeOrPredicate) {
601
- const predicate = this._ensurePredicate(elementNodeOrPredicate);
602
- let current = this.head;
603
- while (current) {
604
- if (predicate(current)) return current.value;
605
- current = current.next;
606
- }
607
- return void 0;
608
- }
609
- getBackward(elementNodeOrPredicate) {
610
- const predicate = this._ensurePredicate(elementNodeOrPredicate);
611
- let current = this.tail;
612
- while (current) {
613
- if (predicate(current)) return current.value;
614
- current = current.prev;
615
- }
616
- return void 0;
617
- }
618
- reverse() {
619
- let current = this.head;
620
- [this._head, this._tail] = [this.tail, this.head];
621
- while (current) {
622
- const next = current.next;
623
- [current.prev, current.next] = [current.next, current.prev];
624
- current = next;
625
- }
626
- return this;
627
- }
628
- setEquality(equals) {
629
- this._equals = equals;
630
- return this;
631
- }
632
- clone() {
633
- const out = this._createInstance({ toElementFn: this._toElementFn, maxLen: this._maxLen });
634
- for (const v of this) out.push(v);
635
- return out;
636
- }
637
- filter(callback, thisArg) {
638
- const out = this._createInstance({ toElementFn: this._toElementFn, maxLen: this._maxLen });
639
- let index = 0;
640
- for (const v of this) if (callback.call(thisArg, v, index++, this)) out.push(v);
641
- return out;
642
- }
643
- mapSame(callback, thisArg) {
644
- const out = this._createInstance({ toElementFn: this._toElementFn, maxLen: this._maxLen });
645
- let index = 0;
646
- for (const v of this) {
647
- const mv = thisArg === void 0 ? callback(v, index++, this) : callback.call(thisArg, v, index++, this);
648
- out.push(mv);
649
- }
650
- return out;
651
- }
652
- map(callback, options, thisArg) {
653
- const out = this._createLike([], { ...options ?? {}, maxLen: this._maxLen });
654
- let index = 0;
655
- for (const v of this) out.push(callback.call(thisArg, v, index++, this));
656
- return out;
657
- }
658
- _ensureNode(elementOrNode) {
659
- if (this.isNode(elementOrNode)) return elementOrNode;
660
- return new DoublyLinkedListNode(elementOrNode);
661
- }
662
- _ensurePredicate(elementNodeOrPredicate) {
663
- if (this.isNode(elementNodeOrPredicate)) {
664
- const target = elementNodeOrPredicate;
665
- return (node) => node === target;
666
- }
667
- if (typeof elementNodeOrPredicate === "function") {
668
- return elementNodeOrPredicate;
669
- }
670
- const value = elementNodeOrPredicate;
671
- return (node) => this._equals(node.value, value);
672
- }
673
- _getPrevNode(node) {
674
- return node.prev;
675
- }
676
- _createInstance(options) {
677
- const Ctor = this.constructor;
678
- return new Ctor([], options);
679
- }
680
- _createLike(elements = [], options) {
681
- const Ctor = this.constructor;
682
- return new Ctor(elements, options);
683
- }
684
- *_getIterator() {
685
- let current = this.head;
686
- while (current) {
687
- yield current.value;
688
- current = current.next;
689
- }
690
- }
691
- *_getReverseIterator() {
692
- let current = this.tail;
693
- while (current) {
694
- yield current.value;
695
- current = current.prev;
696
- }
697
- }
698
- *_getNodeIterator() {
699
- let current = this.head;
700
- while (current) {
701
- yield current;
702
- current = current.next;
703
- }
704
- }
705
- };
706
- export {
707
- DoublyLinkedList,
708
- DoublyLinkedListNode
709
- };