molstar
Version:
A comprehensive macromolecular library.
48 lines • 1.74 kB
JavaScript
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
var EquivalenceClassesImpl = /** @class */ (function () {
function EquivalenceClassesImpl(getHash, areEqual) {
this.getHash = getHash;
this.areEqual = areEqual;
this.id = 0;
this.byHash = new Map();
this.groups = [];
}
EquivalenceClassesImpl.prototype.createGroup = function (key, value) {
var id = this.id++;
var keys = [key];
this.groups[id] = keys;
return { id: id, keys: keys, value: value };
};
// Return the group representative.
EquivalenceClassesImpl.prototype.add = function (key, a) {
var hash = this.getHash(a);
if (this.byHash.has(hash)) {
var groups = this.byHash.get(hash);
for (var i = 0, _i = groups.length; i < _i; i++) {
var group_1 = groups[i];
if (this.areEqual(a, group_1.value)) {
group_1.keys[group_1.keys.length] = key;
return group_1.value;
}
}
var group = this.createGroup(key, a);
groups[groups.length] = group;
return group.value;
}
else {
var group = this.createGroup(key, a);
this.byHash.set(hash, [group]);
return group.value;
}
};
return EquivalenceClassesImpl;
}());
export { EquivalenceClassesImpl };
export function EquivalenceClasses(getHash, areEqual) {
return new EquivalenceClassesImpl(getHash, areEqual);
}
//# sourceMappingURL=equivalence-classes.js.map