@gabrielrufino/cube
Version:
Data structures made in Typescript
132 lines (131 loc) • 4.06 kB
JavaScript
;
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;