UNPKG

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