UNPKG

molstar

Version:

A comprehensive macromolecular library.

133 lines 4.48 kB
"use strict"; /** * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.SetUtils = void 0; var array_1 = require("../mol-data/util/array"); // TODO use set@@iterator when targeting es6 var SetUtils; (function (SetUtils) { function toArray(set) { return (0, array_1.iterableToArray)(set.values()); } SetUtils.toArray = toArray; /** Test if set a contains all elements of set b. */ function isSuperset(setA, setB) { var flag = true; setB.forEach(function (elem) { if (!setA.has(elem)) flag = false; }); return flag; } SetUtils.isSuperset = isSuperset; /** Add all elements from `sets` to `out` */ function add(out) { var sets = []; for (var _i = 1; _i < arguments.length; _i++) { sets[_i - 1] = arguments[_i]; } for (var i = 0; i < sets.length; i++) { sets[i].forEach(function (elem) { return out.add(elem); }); } return out; } SetUtils.add = add; /** Create set containing elements of both set a and set b. */ function union(setA, setB) { var union = new Set(setA); setB.forEach(function (elem) { return union.add(elem); }); return union; } SetUtils.union = union; function unionMany() { var sets = []; for (var _i = 0; _i < arguments.length; _i++) { sets[_i] = arguments[_i]; } if (sets.length === 0) return new Set(); if (sets.length === 1) new Set(sets[0]); var union = new Set(sets[0]); for (var i = 1, il = sets.length; i < il; i++) { sets[i].forEach(function (elem) { return union.add(elem); }); } return union; } SetUtils.unionMany = unionMany; function unionManyArrays(arrays) { if (arrays.length === 0) return new Set(); var union = new Set(arrays[0]); for (var i = 1; i < arrays.length; i++) { for (var _i = 0, _a = arrays[i]; _i < _a.length; _i++) { var elem = _a[_i]; union.add(elem); } } return union; } SetUtils.unionManyArrays = unionManyArrays; /** Create set containing elements of set a that are also in set b. */ function intersection(setA, setB) { var intersection = new Set(); setB.forEach(function (elem) { if (setA.has(elem)) intersection.add(elem); }); return intersection; } SetUtils.intersection = intersection; function areIntersecting(setA, setB) { var flag = false; setB.forEach(function (elem) { if (setA.has(elem)) flag = true; }); return flag; } SetUtils.areIntersecting = areIntersecting; function intersectionSize(setA, setB) { var count = 0; setB.forEach(function (elem) { if (setA.has(elem)) count += 1; }); return count; } SetUtils.intersectionSize = intersectionSize; /** Create set containing elements of set a that are not in set b. */ function difference(setA, setB) { var difference = new Set(setA); setB.forEach(function (elem) { return difference.delete(elem); }); return difference; } SetUtils.difference = difference; /** Number of elements that are in set a but not in set b. */ function differenceSize(setA, setB) { var count = setA.size; setA.forEach(function (elem) { if (setB.has(elem)) count -= 1; }); return count; } SetUtils.differenceSize = differenceSize; /** Test if set a and b contain the same elements. */ function areEqual(setA, setB) { if (setA.size !== setB.size) return false; var flag = true; setB.forEach(function (elem) { if (!setA.has(elem)) flag = false; }); return flag; } SetUtils.areEqual = areEqual; })(SetUtils = exports.SetUtils || (exports.SetUtils = {})); //# sourceMappingURL=set.js.map