UNPKG

enumset32

Version:

High-performance, typesafe, small ordered set implemented in TypeScript

217 lines 7.29 kB
"use strict"; /*! * Copyright (c) 2019 Justin Johansson */ Object.defineProperty(exports, "__esModule", { value: true }); var _UniversalEnumset32 = (function () { function _UniversalEnumset32(enumObject) { var e = Object.create(null); var m = Object.create(null); var u = 0 | 0; var names = Object.getOwnPropertyNames(enumObject); for (var i = 0; i < names.length; ++i) { var n = names[i]; var v = enumObject[n]; if (typeof v === 'number') { e[(e[n] = v)] = n; var mv = 1 << v; m[n] = mv; u |= mv; } } this.Enum = Object.freeze(e); this.Member = Object.freeze(m); this._univ = u; } _UniversalEnumset32.create = function (enumObject) { return Object.freeze(new _UniversalEnumset32(enumObject)); }; Object.defineProperty(_UniversalEnumset32.prototype, "Empty", { get: function () { return (0 | 0); }, enumerable: true, configurable: true }); _UniversalEnumset32.prototype.set = function () { var res = 0; var i; for (i = 0; i < arguments.length; ++i) { res |= 1 << arguments[i]; } return res & this._univ; }; _UniversalEnumset32.prototype.add = function (set, member) { var s = set & this._univ; var m = +member; return (s | (1 << m)) & this._univ; }; _UniversalEnumset32.prototype.addAll = function (set1, set2) { var sets = []; for (var _i = 2; _i < arguments.length; _i++) { sets[_i - 2] = arguments[_i]; } var s1 = set1 & this._univ; var s2 = set2 & this._univ; var res = s1 | s2; for (var i = 0; i < sets.length; ++i) { res |= sets[i]; } return res & this._univ; }; _UniversalEnumset32.prototype.complement = function (set) { var s = set & this._univ; return ~s & this._univ; }; _UniversalEnumset32.prototype.retain = function (set, member) { var s = set & this._univ; var m = +member; return s & (1 << m) & this._univ; }; _UniversalEnumset32.prototype.retainAll = function (set1, set2) { var sets = []; for (var _i = 2; _i < arguments.length; _i++) { sets[_i - 2] = arguments[_i]; } var s1 = set1 & this._univ; var s2 = set2 & this._univ; var res = s1 & s2; for (var i = 0; i < sets.length; ++i) { res &= sets[i]; } return res & this._univ; }; _UniversalEnumset32.prototype.remove = function (set, member) { var s = set & this._univ; var m = +member; return s & ~(1 << m) & this._univ; }; _UniversalEnumset32.prototype.removeAll = function (set1, set2) { var sets = []; for (var _i = 2; _i < arguments.length; _i++) { sets[_i - 2] = arguments[_i]; } var s1 = set1 & this._univ; var s2 = set2 & this._univ; var res = s1 & ~s2; for (var i = 0; i < sets.length; ++i) { res &= ~sets[i]; } return res & this._univ; }; _UniversalEnumset32.prototype.toggle = function (set, member) { var s = set & this._univ; var m = +member; return (s ^ (1 << m)) & this._univ; }; _UniversalEnumset32.prototype.toggleAll = function (set1, set2) { var sets = []; for (var _i = 2; _i < arguments.length; _i++) { sets[_i - 2] = arguments[_i]; } var s1 = set1 & this._univ; var s2 = set2 & this._univ; var res = s1 ^ s2; for (var i = 0; i < sets.length; ++i) { res ^= sets[i]; } return res & this._univ; }; _UniversalEnumset32.prototype.empty = function (set) { var s = set & this._univ; return s === 0; }; _UniversalEnumset32.prototype.excludes = function (set, member) { var s = set & this._univ; var m = +member; return this.excludesEvery(s, (1 << m)); }; _UniversalEnumset32.prototype.excludesEvery = function (set1, set2) { var s1 = set1 & this._univ; var s2 = set2 & this._univ; return (s1 & s2) === 0; }; _UniversalEnumset32.prototype.excludesSome = function (set1, set2) { var s1 = set1 & this._univ; var s2 = set2 & this._univ; return (s1 & s2) !== s2; }; _UniversalEnumset32.prototype.includes = function (set, member) { var s = set & this._univ; var m = +member; return this.includesEvery(s, (1 << m)); }; _UniversalEnumset32.prototype.includesEvery = function (set1, set2) { var s1 = set1 & this._univ; var s2 = set2 & this._univ; return (s1 & s2) === s2; }; _UniversalEnumset32.prototype.includesSome = function (set1, set2) { var s1 = set1 & this._univ; var s2 = set2 & this._univ; return (s1 & s2) !== 0; }; _UniversalEnumset32.prototype.count = function (set) { var s = set & this._univ; if (s >= 0) { var card = s - ((s >> 1) & 3681400539) - ((s >> 2) & 1227133513); return ((card + (card >> 3)) & 3340530119) % 63; } return this.count((set & 2147483647)) + 1; }; _UniversalEnumset32.prototype.enumEntries = function (set) { var s = set & this._univ; var entries = []; for (var i = 0; i < 32; ++i) { if (s & (1 << i)) { entries.push([this.Enum[i], i]); } } return entries; }; _UniversalEnumset32.prototype.enumKeys = function (set) { var s = set & this._univ; var keys = []; for (var i = 0; i < 32; ++i) { if (s & (1 << i)) { keys.push(this.Enum[i]); } } return keys; }; _UniversalEnumset32.prototype.enumValues = function (set) { var s = set & this._univ; var values = []; for (var i = 0; i < 32; ++i) { if (s & (1 << i)) { values.push(i); } } return values; }; _UniversalEnumset32.prototype.equal = function (set1, set2) { var s1 = set1 & this._univ; var s2 = set2 & this._univ; return s1 === s2; }; _UniversalEnumset32.prototype.isEnumKey = function (key) { return typeof key === 'string' && typeof this.Enum[key] === 'number'; }; _UniversalEnumset32.prototype.isEnumValue = function (value) { return typeof value === 'number' && typeof this.Enum[value] === 'string'; }; _UniversalEnumset32.prototype.toDigitString = function (set, radix) { var s = set & this._univ; return (s >>> 0).toString(radix); }; _UniversalEnumset32.prototype.valueOf = function () { return (this._univ | 0); }; return _UniversalEnumset32; }()); exports._UniversalEnumset32 = _UniversalEnumset32; function UniversalEnumset32(enumObject) { return _UniversalEnumset32.create(enumObject); } exports.UniversalEnumset32 = UniversalEnumset32; //# sourceMappingURL=index.js.map