molstar
Version:
A comprehensive macromolecular library.
86 lines (85 loc) • 3.68 kB
JavaScript
"use strict";
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.LinearGroupingBuilder = exports.UniqueStructuresBuilder = void 0;
var structure_1 = require("../../structure");
var selection_1 = require("../selection");
var generic_1 = require("../../../../mol-data/generic");
var structure_set_1 = require("./structure-set");
var UniqueStructuresBuilder = /** @class */ (function () {
function UniqueStructuresBuilder(source) {
this.source = source;
this.set = (0, generic_1.HashSet)(structure_1.Structure.hashCode, structure_1.Structure.areUnitIdsAndIndicesEqual);
this.structures = [];
this.allSingletons = true;
}
UniqueStructuresBuilder.prototype.add = function (s) {
if (!s.elementCount)
return;
if (s.elementCount !== 1)
this.allSingletons = false;
if (this.set.add(s)) {
this.structures[this.structures.length] = s;
}
};
UniqueStructuresBuilder.prototype.getSelection = function () {
if (this.allSingletons)
return selection_1.StructureSelection.Singletons(this.source, (0, structure_set_1.structureUnion)(this.source, this.structures));
return selection_1.StructureSelection.Sequence(this.source, this.structures);
};
return UniqueStructuresBuilder;
}());
exports.UniqueStructuresBuilder = UniqueStructuresBuilder;
var LinearGroupingBuilder = /** @class */ (function () {
function LinearGroupingBuilder(source) {
this.source = source;
this.builders = [];
this.builderMap = new Map();
}
LinearGroupingBuilder.prototype.add = function (key, unit, element) {
var b = this.builderMap.get(key);
if (!b) {
b = this.source.subsetBuilder(true);
this.builders[this.builders.length] = b;
this.builderMap.set(key, b);
}
b.addToUnit(unit, element);
};
LinearGroupingBuilder.prototype.allSingletons = function () {
for (var i = 0, _i = this.builders.length; i < _i; i++) {
if (this.builders[i].elementCount > 1)
return false;
}
return true;
};
LinearGroupingBuilder.prototype.singletonSelection = function () {
var builder = this.source.subsetBuilder(true);
var loc = structure_1.StructureElement.Location.create(this.source);
for (var i = 0, _i = this.builders.length; i < _i; i++) {
this.builders[i].setSingletonLocation(loc);
builder.addToUnit(loc.unit.id, loc.element);
}
return selection_1.StructureSelection.Singletons(this.source, builder.getStructure());
};
LinearGroupingBuilder.prototype.fullSelection = function () {
var structures = new Array(this.builders.length);
for (var i = 0, _i = this.builders.length; i < _i; i++) {
structures[i] = this.builders[i].getStructure();
}
return selection_1.StructureSelection.Sequence(this.source, structures);
};
LinearGroupingBuilder.prototype.getSelection = function () {
var len = this.builders.length;
if (len === 0)
return selection_1.StructureSelection.Empty(this.source);
if (this.allSingletons())
return this.singletonSelection();
return this.fullSelection();
};
return LinearGroupingBuilder;
}());
exports.LinearGroupingBuilder = LinearGroupingBuilder;