data-structure-typed 1.33.6 → 1.33.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +1 -0
- package/CHANGELOG.md +1 -1
- package/README.md +42 -38
- package/coverage/coverage-final.json +64 -63
- package/coverage/coverage-summary.json +8 -7
- package/dist/data-structures/binary-tree/segment-tree.js +24 -6
- package/dist/data-structures/binary-tree/segment-tree.js.map +1 -1
- package/dist/data-structures/hash/hash-map.js +306 -0
- package/dist/data-structures/hash/hash-map.js.map +1 -0
- package/dist/data-structures/hash/hash-table.js +128 -38
- package/dist/data-structures/hash/hash-table.js.map +1 -1
- package/dist/data-structures/hash/index.js +1 -0
- package/dist/data-structures/hash/index.js.map +1 -1
- package/dist/data-structures/linked-list/skip-linked-list.js +122 -5
- package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/types/data-structures/hash.js +3 -0
- package/dist/types/data-structures/hash.js.map +1 -0
- package/dist/types/data-structures/index.js +1 -0
- package/dist/types/data-structures/index.js.map +1 -1
- package/docs/index.html +35 -37
- package/docs/modules.html +10 -4
- package/lib/data-structures/binary-tree/segment-tree.d.ts +4 -4
- package/lib/data-structures/binary-tree/segment-tree.js +30 -14
- package/lib/data-structures/hash/hash-map.d.ts +56 -0
- package/lib/data-structures/hash/hash-map.js +167 -0
- package/lib/data-structures/hash/hash-table.d.ts +67 -23
- package/lib/data-structures/hash/hash-table.js +154 -52
- package/lib/data-structures/hash/index.d.ts +1 -0
- package/lib/data-structures/hash/index.js +1 -0
- package/lib/data-structures/linked-list/skip-linked-list.d.ts +60 -1
- package/lib/data-structures/linked-list/skip-linked-list.js +136 -1
- package/lib/types/data-structures/hash.d.ts +1 -0
- package/lib/types/data-structures/hash.js +1 -0
- package/lib/types/data-structures/index.d.ts +1 -0
- package/lib/types/data-structures/index.js +1 -0
- package/package.json +22 -22
- package/src/data-structures/binary-tree/segment-tree.ts +32 -14
- package/src/data-structures/hash/hash-map.ts +203 -0
- package/src/data-structures/hash/hash-table.ts +176 -56
- package/src/data-structures/hash/index.ts +1 -0
- package/src/data-structures/linked-list/skip-linked-list.ts +166 -1
- package/src/types/data-structures/hash.ts +1 -0
- package/src/types/data-structures/index.ts +1 -0
- package/test/integration/index.html +26 -18
- package/test/unit/data-structures/binary-tree/segment-tree.test.ts +50 -0
- package/test/unit/data-structures/hash/hash-map.test.ts +104 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +97 -10
- package/test/unit/data-structures/linked-list/skip-list.test.ts +55 -0
- package/umd/bundle.min.js +1 -1
- package/umd/bundle.min.js.map +1 -1
- package/tsconfig.prod.json +0 -25
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HashTable = exports.
|
|
4
|
-
var
|
|
5
|
-
function
|
|
14
|
+
exports.HashTable = exports.HashTableNode = void 0;
|
|
15
|
+
var HashTableNode = (function () {
|
|
16
|
+
function HashTableNode(key, val) {
|
|
6
17
|
this.key = key;
|
|
7
18
|
this.val = val;
|
|
8
19
|
this.next = null;
|
|
9
20
|
}
|
|
10
|
-
return
|
|
21
|
+
return HashTableNode;
|
|
11
22
|
}());
|
|
12
|
-
exports.
|
|
23
|
+
exports.HashTableNode = HashTableNode;
|
|
13
24
|
var HashTable = (function () {
|
|
14
|
-
function HashTable(capacity) {
|
|
15
|
-
if (capacity === void 0) { capacity =
|
|
16
|
-
this.
|
|
25
|
+
function HashTable(capacity, hashFn) {
|
|
26
|
+
if (capacity === void 0) { capacity = HashTable.DEFAULT_CAPACITY; }
|
|
27
|
+
this._hashFn = hashFn || this._defaultHashFn;
|
|
28
|
+
this._capacity = Math.max(capacity, HashTable.DEFAULT_CAPACITY);
|
|
17
29
|
this._size = 0;
|
|
18
|
-
this._buckets = new Array(this.
|
|
30
|
+
this._buckets = new Array(this._capacity).fill(null);
|
|
19
31
|
}
|
|
20
|
-
Object.defineProperty(HashTable.prototype, "
|
|
32
|
+
Object.defineProperty(HashTable.prototype, "hashFn", {
|
|
21
33
|
get: function () {
|
|
22
|
-
return this.
|
|
34
|
+
return this._hashFn;
|
|
23
35
|
},
|
|
24
36
|
set: function (value) {
|
|
25
|
-
this.
|
|
37
|
+
this._hashFn = value;
|
|
26
38
|
},
|
|
27
39
|
enumerable: false,
|
|
28
40
|
configurable: true
|
|
29
41
|
});
|
|
30
|
-
Object.defineProperty(HashTable.prototype, "
|
|
42
|
+
Object.defineProperty(HashTable.prototype, "buckets", {
|
|
31
43
|
get: function () {
|
|
32
|
-
return this.
|
|
44
|
+
return this._buckets;
|
|
33
45
|
},
|
|
34
46
|
set: function (value) {
|
|
35
|
-
this.
|
|
47
|
+
this._buckets = value;
|
|
36
48
|
},
|
|
37
49
|
enumerable: false,
|
|
38
50
|
configurable: true
|
|
@@ -47,41 +59,74 @@ var HashTable = (function () {
|
|
|
47
59
|
enumerable: false,
|
|
48
60
|
configurable: true
|
|
49
61
|
});
|
|
50
|
-
HashTable.prototype.
|
|
62
|
+
HashTable.prototype._defaultHashFn = function (key) {
|
|
63
|
+
var hashValue = typeof key === 'string' ? this._murmurStringHashFn(key) : this._objectHash(key);
|
|
64
|
+
return hashValue % this._capacity;
|
|
65
|
+
};
|
|
66
|
+
HashTable.prototype._multiplicativeStringHashFn = function (key) {
|
|
51
67
|
var keyString = String(key);
|
|
52
68
|
var hash = 0;
|
|
53
69
|
for (var i = 0; i < keyString.length; i++) {
|
|
54
|
-
|
|
70
|
+
var charCode = keyString.charCodeAt(i);
|
|
71
|
+
var A = 0.618033988749895;
|
|
72
|
+
var M = 1 << 30;
|
|
73
|
+
hash = (hash * A + charCode) % M;
|
|
74
|
+
}
|
|
75
|
+
return Math.abs(hash);
|
|
76
|
+
};
|
|
77
|
+
HashTable.prototype._murmurStringHashFn = function (key) {
|
|
78
|
+
var keyString = String(key);
|
|
79
|
+
var seed = 0;
|
|
80
|
+
var hash = seed;
|
|
81
|
+
for (var i = 0; i < keyString.length; i++) {
|
|
82
|
+
var char = keyString.charCodeAt(i);
|
|
83
|
+
hash = (hash ^ char) * 0x5bd1e995;
|
|
84
|
+
hash = (hash ^ (hash >>> 15)) * 0x27d4eb2d;
|
|
85
|
+
hash = hash ^ (hash >>> 15);
|
|
86
|
+
}
|
|
87
|
+
return Math.abs(hash);
|
|
88
|
+
};
|
|
89
|
+
HashTable.prototype._hash = function (key) {
|
|
90
|
+
return this.hashFn(key);
|
|
91
|
+
};
|
|
92
|
+
HashTable.prototype._stringHash = function (key) {
|
|
93
|
+
var hash = 0;
|
|
94
|
+
for (var i = 0; i < key.length; i++) {
|
|
95
|
+
hash = (hash * 31 + key.charCodeAt(i)) & 0xffffffff;
|
|
55
96
|
}
|
|
56
|
-
return hash
|
|
97
|
+
return hash;
|
|
57
98
|
};
|
|
58
|
-
HashTable.prototype.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
99
|
+
HashTable.prototype._objectHash = function (key) {
|
|
100
|
+
return this._stringHash(JSON.stringify(key));
|
|
101
|
+
};
|
|
102
|
+
HashTable.prototype.set = function (key, val) {
|
|
103
|
+
var index = this._hash(key);
|
|
104
|
+
var newNode = new HashTableNode(key, val);
|
|
105
|
+
if (!this._buckets[index]) {
|
|
106
|
+
this._buckets[index] = newNode;
|
|
63
107
|
}
|
|
64
108
|
else {
|
|
65
|
-
var currentNode = this.
|
|
66
|
-
while (currentNode
|
|
109
|
+
var currentNode = this._buckets[index];
|
|
110
|
+
while (currentNode) {
|
|
67
111
|
if (currentNode.key === key) {
|
|
68
112
|
currentNode.val = val;
|
|
69
113
|
return;
|
|
70
114
|
}
|
|
115
|
+
if (!currentNode.next) {
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
71
118
|
currentNode = currentNode.next;
|
|
72
119
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
120
|
+
currentNode.next = newNode;
|
|
121
|
+
}
|
|
122
|
+
this._size++;
|
|
123
|
+
if (this._size / this._capacity >= HashTable.LOAD_FACTOR) {
|
|
124
|
+
this._expand();
|
|
79
125
|
}
|
|
80
|
-
this.size++;
|
|
81
126
|
};
|
|
82
127
|
HashTable.prototype.get = function (key) {
|
|
83
|
-
var index = this.
|
|
84
|
-
var currentNode = this.
|
|
128
|
+
var index = this._hash(key);
|
|
129
|
+
var currentNode = this._buckets[index];
|
|
85
130
|
while (currentNode) {
|
|
86
131
|
if (currentNode.key === key) {
|
|
87
132
|
return currentNode.val;
|
|
@@ -91,8 +136,8 @@ var HashTable = (function () {
|
|
|
91
136
|
return undefined;
|
|
92
137
|
};
|
|
93
138
|
HashTable.prototype.remove = function (key) {
|
|
94
|
-
var index = this.
|
|
95
|
-
var currentNode = this.
|
|
139
|
+
var index = this._hash(key);
|
|
140
|
+
var currentNode = this._buckets[index];
|
|
96
141
|
var prevNode = null;
|
|
97
142
|
while (currentNode) {
|
|
98
143
|
if (currentNode.key === key) {
|
|
@@ -100,15 +145,60 @@ var HashTable = (function () {
|
|
|
100
145
|
prevNode.next = currentNode.next;
|
|
101
146
|
}
|
|
102
147
|
else {
|
|
103
|
-
this.
|
|
148
|
+
this._buckets[index] = currentNode.next;
|
|
104
149
|
}
|
|
105
|
-
this.
|
|
150
|
+
this._size--;
|
|
151
|
+
currentNode.next = null;
|
|
106
152
|
return;
|
|
107
153
|
}
|
|
108
154
|
prevNode = currentNode;
|
|
109
155
|
currentNode = currentNode.next;
|
|
110
156
|
}
|
|
111
157
|
};
|
|
158
|
+
HashTable.prototype._expand = function () {
|
|
159
|
+
var e_1, _a;
|
|
160
|
+
var newCapacity = this._capacity * 2;
|
|
161
|
+
var newBuckets = new Array(newCapacity).fill(null);
|
|
162
|
+
try {
|
|
163
|
+
for (var _b = __values(this._buckets), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
164
|
+
var bucket = _c.value;
|
|
165
|
+
var currentNode = bucket;
|
|
166
|
+
while (currentNode) {
|
|
167
|
+
var newIndex = this._hash(currentNode.key);
|
|
168
|
+
var newNode = new HashTableNode(currentNode.key, currentNode.val);
|
|
169
|
+
if (!newBuckets[newIndex]) {
|
|
170
|
+
newBuckets[newIndex] = newNode;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
var currentNewNode = newBuckets[newIndex];
|
|
174
|
+
while (currentNewNode.next) {
|
|
175
|
+
currentNewNode = currentNewNode.next;
|
|
176
|
+
}
|
|
177
|
+
currentNewNode.next = newNode;
|
|
178
|
+
}
|
|
179
|
+
currentNode = currentNode.next;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
184
|
+
finally {
|
|
185
|
+
try {
|
|
186
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
187
|
+
}
|
|
188
|
+
finally { if (e_1) throw e_1.error; }
|
|
189
|
+
}
|
|
190
|
+
this._buckets = newBuckets;
|
|
191
|
+
this._capacity = newCapacity;
|
|
192
|
+
};
|
|
193
|
+
Object.defineProperty(HashTable.prototype, "size", {
|
|
194
|
+
get: function () {
|
|
195
|
+
return this._size;
|
|
196
|
+
},
|
|
197
|
+
enumerable: false,
|
|
198
|
+
configurable: true
|
|
199
|
+
});
|
|
200
|
+
HashTable.DEFAULT_CAPACITY = 16;
|
|
201
|
+
HashTable.LOAD_FACTOR = 0.75;
|
|
112
202
|
return HashTable;
|
|
113
203
|
}());
|
|
114
204
|
exports.HashTable = HashTable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-table.js","sourceRoot":"","sources":["../../../src/data-structures/hash/hash-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash-table.js","sourceRoot":"","sources":["../../../src/data-structures/hash/hash-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,4 +20,5 @@ __exportStar(require("./coordinate-set"), exports);
|
|
|
20
20
|
__exportStar(require("./pair"), exports);
|
|
21
21
|
__exportStar(require("./tree-map"), exports);
|
|
22
22
|
__exportStar(require("./tree-set"), exports);
|
|
23
|
+
__exportStar(require("./hash-map"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-structures/hash/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,6CAA2B;AAC3B,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-structures/hash/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B"}
|
|
@@ -1,10 +1,127 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var
|
|
5
|
-
function
|
|
3
|
+
exports.SkipList = exports.SkipListNode = void 0;
|
|
4
|
+
var SkipListNode = (function () {
|
|
5
|
+
function SkipListNode(key, value, level) {
|
|
6
|
+
this.key = key;
|
|
7
|
+
this.value = value;
|
|
8
|
+
this.forward = new Array(level);
|
|
6
9
|
}
|
|
7
|
-
return
|
|
10
|
+
return SkipListNode;
|
|
8
11
|
}());
|
|
9
|
-
exports.
|
|
12
|
+
exports.SkipListNode = SkipListNode;
|
|
13
|
+
var SkipList = (function () {
|
|
14
|
+
function SkipList(maxLevel, probability) {
|
|
15
|
+
if (maxLevel === void 0) { maxLevel = 16; }
|
|
16
|
+
if (probability === void 0) { probability = 0.5; }
|
|
17
|
+
this._head = new SkipListNode(null, null, maxLevel);
|
|
18
|
+
this._level = 0;
|
|
19
|
+
this._maxLevel = maxLevel;
|
|
20
|
+
this._probability = probability;
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(SkipList.prototype, "probability", {
|
|
23
|
+
get: function () {
|
|
24
|
+
return this._probability;
|
|
25
|
+
},
|
|
26
|
+
set: function (value) {
|
|
27
|
+
this._probability = value;
|
|
28
|
+
},
|
|
29
|
+
enumerable: false,
|
|
30
|
+
configurable: true
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(SkipList.prototype, "maxLevel", {
|
|
33
|
+
get: function () {
|
|
34
|
+
return this._maxLevel;
|
|
35
|
+
},
|
|
36
|
+
set: function (value) {
|
|
37
|
+
this._maxLevel = value;
|
|
38
|
+
},
|
|
39
|
+
enumerable: false,
|
|
40
|
+
configurable: true
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(SkipList.prototype, "level", {
|
|
43
|
+
get: function () {
|
|
44
|
+
return this._level;
|
|
45
|
+
},
|
|
46
|
+
set: function (value) {
|
|
47
|
+
this._level = value;
|
|
48
|
+
},
|
|
49
|
+
enumerable: false,
|
|
50
|
+
configurable: true
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(SkipList.prototype, "head", {
|
|
53
|
+
get: function () {
|
|
54
|
+
return this._head;
|
|
55
|
+
},
|
|
56
|
+
set: function (value) {
|
|
57
|
+
this._head = value;
|
|
58
|
+
},
|
|
59
|
+
enumerable: false,
|
|
60
|
+
configurable: true
|
|
61
|
+
});
|
|
62
|
+
SkipList.prototype.randomLevel = function () {
|
|
63
|
+
var level = 1;
|
|
64
|
+
while (Math.random() < this.probability && level < this.maxLevel) {
|
|
65
|
+
level++;
|
|
66
|
+
}
|
|
67
|
+
return level;
|
|
68
|
+
};
|
|
69
|
+
SkipList.prototype.add = function (key, value) {
|
|
70
|
+
var newNode = new SkipListNode(key, value, this.randomLevel());
|
|
71
|
+
var update = new Array(this.maxLevel).fill(this.head);
|
|
72
|
+
var current = this.head;
|
|
73
|
+
for (var i = this.level - 1; i >= 0; i--) {
|
|
74
|
+
while (current.forward[i] && current.forward[i].key < key) {
|
|
75
|
+
current = current.forward[i];
|
|
76
|
+
}
|
|
77
|
+
update[i] = current;
|
|
78
|
+
}
|
|
79
|
+
for (var i = 0; i < newNode.forward.length; i++) {
|
|
80
|
+
newNode.forward[i] = update[i].forward[i];
|
|
81
|
+
update[i].forward[i] = newNode;
|
|
82
|
+
}
|
|
83
|
+
if (newNode.forward[0] !== null) {
|
|
84
|
+
this.level = Math.max(this.level, newNode.forward.length);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
SkipList.prototype.get = function (key) {
|
|
88
|
+
var current = this.head;
|
|
89
|
+
for (var i = this.level - 1; i >= 0; i--) {
|
|
90
|
+
while (current.forward[i] && current.forward[i].key < key) {
|
|
91
|
+
current = current.forward[i];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
current = current.forward[0];
|
|
95
|
+
if (current && current.key === key) {
|
|
96
|
+
return current.value;
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
};
|
|
100
|
+
SkipList.prototype.remove = function (key) {
|
|
101
|
+
var update = new Array(this.maxLevel).fill(this.head);
|
|
102
|
+
var current = this.head;
|
|
103
|
+
for (var i = this.level - 1; i >= 0; i--) {
|
|
104
|
+
while (current.forward[i] && current.forward[i].key < key) {
|
|
105
|
+
current = current.forward[i];
|
|
106
|
+
}
|
|
107
|
+
update[i] = current;
|
|
108
|
+
}
|
|
109
|
+
current = current.forward[0];
|
|
110
|
+
if (current && current.key === key) {
|
|
111
|
+
for (var i = 0; i < this.level; i++) {
|
|
112
|
+
if (update[i].forward[i] !== current) {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
update[i].forward[i] = current.forward[i];
|
|
116
|
+
}
|
|
117
|
+
while (this.level > 0 && this.head.forward[this.level - 1] === null) {
|
|
118
|
+
this.level--;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
};
|
|
124
|
+
return SkipList;
|
|
125
|
+
}());
|
|
126
|
+
exports.SkipList = SkipList;
|
|
10
127
|
//# sourceMappingURL=skip-linked-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-linked-list.js","sourceRoot":"","sources":["../../../src/data-structures/linked-list/skip-linked-list.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"skip-linked-list.js","sourceRoot":"","sources":["../../../src/data-structures/linked-list/skip-linked-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/types/data-structures/hash.ts"],"names":[],"mappings":""}
|
|
@@ -29,4 +29,5 @@ __exportStar(require("./heap"), exports);
|
|
|
29
29
|
__exportStar(require("./singly-linked-list"), exports);
|
|
30
30
|
__exportStar(require("./doubly-linked-list"), exports);
|
|
31
31
|
__exportStar(require("./navigator"), exports);
|
|
32
|
+
__exportStar(require("./hash"), exports);
|
|
32
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,kDAAgC;AAChC,mDAAiC;AACjC,8CAA4B;AAC5B,yDAAuC;AACvC,4CAA0B;AAC1B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,uDAAqC;AACrC,uDAAqC;AACrC,8CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,kDAAgC;AAChC,mDAAiC;AACjC,8CAA4B;AAC5B,yDAAuC;AACvC,4CAA0B;AAC1B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,uDAAqC;AACrC,uDAAqC;AACrC,8CAA4B;AAC5B,yCAAuB"}
|