UNPKG

associativearray

Version:
175 lines (174 loc) 5.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var existjs_1 = require("existjs"); var rndmjs_1 = require("rndmjs"); var Pattern = /** @class */ (function () { function Pattern() { this.length = 0; this.names = []; this.values = []; this.id = 0; this.keys = {}; } Pattern.prototype.updateKeys = function () { var keys = {}; for (var i in this.names) { keys[this.names[i]] = i; } this.keys = keys; }; // Add new element with name Pattern.prototype.add = function (name, value) { if (existjs_1.exist(this.keys[name])) { this.change(name, value); return; } this.names.push(name); this.values.push(value); this.length = this.names.length; this.keys[name] = this.length - 1; }; // Get value by name Pattern.prototype.value = function (name) { return this.values[this.keys[name]]; }; // Add new unnamed element Pattern.prototype.push = function (value) { var id = "id" + rndmjs_1.randstr(5) + this.id++; this.add(id, value); return id; }; // Change value by name Pattern.prototype.change = function (name, value) { if (!existjs_1.exist(this.keys[name])) { return; } this.values[this.keys[name]] = value; }; // Remote element by name Pattern.prototype.remove = function (name) { if (!existjs_1.exist(this.keys[name])) { return; } if (this.length === 1) { this.names = []; this.values = []; } else { this.names.splice(this.keys[name], 1); this.values.splice(this.keys[name], 1); } this.length = this.names.length; delete this.keys[name]; }; // Get name by value. Only first occurrence. Pattern.prototype.search = function (value) { var i = this.values.indexOf(value); if (i === -1) { return undefined; } return this.names[i]; }; Pattern.prototype.forEach = function (callback) { for (var i in this.names) { var breakPoint = callback(this.values[i], this.names[i]); if (breakPoint === "break") { break; } } }; // Get string form of all elements Pattern.prototype.toString = function () { var trace = ""; for (var i in this.names) { trace += "[" + this.names[i] + "] " + this.values[i] + "\n"; } ; return trace; }; // Change name of element Pattern.prototype.rename = function (name, newname) { this.add(newname, this.value(name)); this.remove(name); }; // Reverse Pattern Pattern.prototype.reverse = function () { this.values.reverse(); this.names.reverse(); }; // Copy Pattern Pattern.prototype.copy = function (pattern) { this.values = pattern.values.slice(); this.names = pattern.names.slice(); this.length = pattern.length; this.id = Math.max(this.id, pattern.id); this.updateKeys(); }; // Share values Pattern.prototype.share = function (pattern, names) { for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { var name_1 = names_1[_i]; pattern.add(name_1, this.values[this.keys[name_1]]); } pattern.id = Math.max(pattern.id, this.id); }; // Get array Pattern.prototype.array = function () { var complex = []; for (var i in this.names) { complex.push({ name: this.names[i], value: this.values[i] }); } return complex; }; // Import from array Pattern.prototype.fromArray = function (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; this.push(v); } }; // Sort Pattern Pattern.prototype.sort = function (handler) { var array = this.array(); array.sort(handler); for (var i in array) { this.names[i] = array[i].name; this.values[i] = array[i].value; } this.updateKeys(); }; // Shuffle Pattern Pattern.prototype.shuffle = function () { var array = this.array(); for (var i = array.length; i; i--) { var j = Math.floor(Math.random() * i); _a = [array[j], array[i - 1]], array[i - 1] = _a[0], array[j] = _a[1]; } for (var i in array) { this.names[i] = array[i].name; this.values[i] = array[i].value; } this.updateKeys(); var _a; }; // Concat Pattern Pattern.prototype.concat = function () { var patterns = []; for (var _i = 0; _i < arguments.length; _i++) { patterns[_i] = arguments[_i]; } for (var _a = 0, patterns_1 = patterns; _a < patterns_1.length; _a++) { var pattern = patterns_1[_a]; this.names = this.names.concat(pattern.names); this.values = this.values.concat(pattern.values); this.id = Math.max(this.id, pattern.id); } this.length = this.names.length; this.updateKeys(); }; return Pattern; }()); exports.Pattern = Pattern;