UNPKG

@gabrielrufino/cube

Version:

Data structures made in Typescript

132 lines (131 loc) 4.06 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var Set = /** @class */ (function () { function Set() { var inputs = []; for (var _i = 0; _i < arguments.length; _i++) { inputs[_i] = arguments[_i]; } this._data = new Map(); for (var _a = 0, inputs_1 = inputs; _a < inputs_1.length; _a++) { var input = inputs_1[_a]; this.add(input); } } Object.defineProperty(Set.prototype, "data", { get: function () { return Array.from(this._data.values()); }, enumerable: false, configurable: true }); Object.defineProperty(Set.prototype, "size", { get: function () { return this._data.size; }, enumerable: false, configurable: true }); Set.prototype.has = function (element) { return this._data.has(element); }; Set.prototype.add = function (element) { if (!this.has(element)) { this._data.set(element, element); return element; } return null; }; Set.prototype.delete = function (element) { if (this.has(element)) { this._data.delete(element); return element; } return null; }; Set.prototype.clear = function () { var elements = __spreadArray([], this.data, true); this._data.clear(); return elements; }; Set.prototype.union = function (set) { return Set.union(this, set); }; Set.prototype.intersection = function (set) { return Set.intersection(this, set); }; Set.prototype.difference = function (set) { return Set.difference(this, set); }; Set.prototype.isSubsetOf = function (set) { return Set.isSubset(this, set); }; Set.prototype.contains = function (set) { return Set.isSubset(set, this); }; Set.union = function (set1, set2) { var union = new Set(); for (var _i = 0, _a = __spreadArray(__spreadArray([], set1.data, true), set2.data, true); _i < _a.length; _i++) { var element = _a[_i]; union.add(element); } return union; }; Set.intersection = function (set1, set2) { var biggestSet; var smallestSet; if (set1.size >= set2.size) { biggestSet = set1; smallestSet = set2; } else { biggestSet = set2; smallestSet = set1; } var intersection = new Set(); for (var _i = 0, _a = smallestSet.data; _i < _a.length; _i++) { var element = _a[_i]; if (biggestSet.has(element)) { intersection.add(element); } } return intersection; }; Set.difference = function (set1, set2) { var difference = new Set(); for (var _i = 0, _a = set1.data; _i < _a.length; _i++) { var element = _a[_i]; if (!set2.has(element)) { difference.add(element); } } return difference; }; Set.isSubset = function (set1, set2) { if (set1.size > set2.size) { return false; } return set1 .data .every(function (element) { return set2.has(element); }); }; Set.prototype[Symbol.toPrimitive] = function (type) { var primitives = { number: this.size, string: "{ ".concat(this.data.join(', '), " }"), default: true, }; return primitives[type]; }; return Set; }()); exports.default = Set;