-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrange.js
More file actions
50 lines (43 loc) · 1.34 KB
/
range.js
File metadata and controls
50 lines (43 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import {assertIsNumber, assertIsBoolean} from '../../common/lib/testing_utils';
/**
* @class SequenceRange
* @attribute {Integer} from Value is 0 based.
* Is always <= `to()`.
*/
class SequenceRange {
// from: number;
// size: number;
// reverse: boolean;
constructor({from, size, reverse = false}) {
this.from = from;
this.size = size;
this.reverse = reverse;
assertIsNumber(this.from, 'from');
assertIsNumber(this.size, 'size');
assertIsBoolean(this.reverse, 'reverse');
}
get to() { return this.from + this.size; }
}
/**
* @method newFromOld
* Creates a SequenceRange instance from an old range object, correcting
* for the new range in the process (where `to` is exclusive not inclusive).
* @param {Object} oldRange
* @param {String} oldReverseName
* @param {Boolean} returnObject
* @return {SequenceRange}
*/
SequenceRange.newFromOld = function(oldRange, oldReverseName='reverseComplement', returnObject=false) {
var newRange = {
from: oldRange.from
};
var to = oldRange.to;
if(oldRange[oldReverseName]) {
newRange.from = oldRange.to + 1;
to = oldRange.from;
}
newRange.size = to + 1 - newRange.from;
newRange.reverse = oldRange[oldReverseName];
return returnObject ? newRange : new SequenceRange(newRange);
};
export default SequenceRange;