UNPKG

2.04 kBJavaScriptView Raw
1var SymbolTree = /** @class */ (function () {
2 function SymbolTree(mapper) {
3 this.mapper = mapper;
4 this.tree = [undefined, {}];
5 }
6 SymbolTree.prototype.set = function (path, element, max) {
7 var curr = this.tree;
8 var _max = max !== undefined ? max : path.length;
9 for (var i = 0; i < _max; i++) {
10 var n = this.mapper(path[i]);
11 var child = curr[1][n];
12 if (!child) {
13 child = [undefined, {}];
14 curr[1][n] = child;
15 }
16 curr = child;
17 }
18 curr[0] = element;
19 };
20 SymbolTree.prototype.getDefault = function (path, mkDefaultElement, max) {
21 return this.get(path, mkDefaultElement, max);
22 };
23 /**
24 * Returns the payload of the path
25 * If a default element creator is given, it will insert it at the path
26 */
27 SymbolTree.prototype.get = function (path, mkDefaultElement, max) {
28 var curr = this.tree;
29 var _max = max !== undefined ? max : path.length;
30 for (var i = 0; i < _max; i++) {
31 var n = this.mapper(path[i]);
32 var child = curr[1][n];
33 if (!child) {
34 if (mkDefaultElement) {
35 child = [undefined, {}];
36 curr[1][n] = child;
37 }
38 else {
39 return undefined;
40 }
41 }
42 curr = child;
43 }
44 if (mkDefaultElement && !curr[0]) {
45 curr[0] = mkDefaultElement();
46 }
47 return curr[0];
48 };
49 SymbolTree.prototype.delete = function (path) {
50 var curr = this.tree;
51 for (var i = 0; i < path.length - 1; i++) {
52 var child = curr[1][this.mapper(path[i])];
53 if (!child) {
54 return;
55 }
56 curr = child;
57 }
58 delete curr[1][this.mapper(path[path.length - 1])];
59 };
60 return SymbolTree;
61}());
62export default SymbolTree;
63//# sourceMappingURL=SymbolTree.js.map
\No newline at end of file