UNPKG

molstar

Version:

A comprehensive macromolecular library.

84 lines 3.91 kB
"use strict"; /** * Copyright (c) 2017-2019 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.intersectionSize = exports.intersect = exports.findRange = exports.findPredecessorIndexInInterval = exports.findPredecessorIndex = exports.isSubInterval = exports.areIntersecting = exports.areEqual = exports.getAt = exports.indexOf = exports.has = exports.toString = exports.hashCode = exports.size = exports.max = exports.min = exports.end = exports.start = exports.is = exports.ofLength = exports.ofBounds = exports.ofRange = exports.Empty = void 0; var tuple_1 = require("../tuple"); exports.Empty = tuple_1.IntTuple.Zero; function ofRange(min, max) { return max < min ? tuple_1.IntTuple.create(min, min) : tuple_1.IntTuple.create(min, max + 1); } exports.ofRange = ofRange; function ofBounds(start, end) { return end <= start ? tuple_1.IntTuple.create(start, start) : tuple_1.IntTuple.create(start, end); } exports.ofBounds = ofBounds; function ofLength(length) { return length < 0 ? tuple_1.IntTuple.create(0, 0) : tuple_1.IntTuple.create(0, length); } exports.ofLength = ofLength; exports.is = tuple_1.IntTuple.is; exports.start = tuple_1.IntTuple.fst; exports.end = tuple_1.IntTuple.snd; exports.min = tuple_1.IntTuple.fst; function max(i) { return tuple_1.IntTuple.snd(i) - 1; } exports.max = max; exports.size = tuple_1.IntTuple.diff; exports.hashCode = tuple_1.IntTuple.hashCode; exports.toString = tuple_1.IntTuple.toString; function has(int, v) { return tuple_1.IntTuple.fst(int) <= v && v < tuple_1.IntTuple.snd(int); } exports.has = has; /** Returns the index of `x` in `set` or -1 if not found. */ function indexOf(int, x) { var m = (0, exports.start)(int); return x >= m && x < (0, exports.end)(int) ? x - m : -1; } exports.indexOf = indexOf; function getAt(int, i) { return tuple_1.IntTuple.fst(int) + i; } exports.getAt = getAt; exports.areEqual = tuple_1.IntTuple.areEqual; function areIntersecting(a, b) { var sa = (0, exports.size)(a), sb = (0, exports.size)(b); if (sa === 0 && sb === 0) return true; return sa > 0 && sb > 0 && max(a) >= (0, exports.min)(b) && (0, exports.min)(a) <= max(b); } exports.areIntersecting = areIntersecting; function isSubInterval(a, b) { if (!(0, exports.size)(a)) return (0, exports.size)(b) === 0; if (!(0, exports.size)(b)) return true; return (0, exports.start)(a) <= (0, exports.start)(b) && (0, exports.end)(a) >= (0, exports.end)(b); } exports.isSubInterval = isSubInterval; function findPredecessorIndex(int, v) { var s = (0, exports.start)(int); if (v <= s) return 0; var e = (0, exports.end)(int); if (v >= e) return e - s; return v - s; } exports.findPredecessorIndex = findPredecessorIndex; function findPredecessorIndexInInterval(int, v, bounds) { var bS = (0, exports.start)(bounds); var s = (0, exports.start)(int); if (v <= bS + s) return bS; var bE = (0, exports.end)(bounds); if (v >= bE + s) return bE; return v - s; } exports.findPredecessorIndexInInterval = findPredecessorIndexInInterval; function findRange(int, min, max) { return ofBounds(findPredecessorIndex(int, min), findPredecessorIndex(int, max + 1)); } exports.findRange = findRange; function intersect(a, b) { if (!areIntersecting(a, b)) return exports.Empty; return ofBounds(Math.max((0, exports.start)(a), (0, exports.start)(b)), Math.min((0, exports.end)(a), (0, exports.end)(b))); } exports.intersect = intersect; function intersectionSize(a, b) { return (0, exports.size)(findRange(a, (0, exports.min)(b), max(b))); } exports.intersectionSize = intersectionSize; //# sourceMappingURL=interval.js.map