molstar
Version:
A comprehensive macromolecular library.
133 lines • 4.48 kB
JavaScript
/**
* 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
;