1 #include "Bed3Interval.h"
2 #include "SingleLineDelimTextFileReader.h"
3 #include <cstdio>
4 #include <cstdlib>
5
Bed3Interval()6 Bed3Interval::Bed3Interval()
7 {
8
9 }
10
~Bed3Interval()11 Bed3Interval::~Bed3Interval()
12 {
13
14 }
15
initFromFile(FileReader * fileReader)16 bool Bed3Interval::initFromFile(FileReader *fileReader)
17 {
18 SingleLineDelimTextFileReader *sldFileReader = static_cast<SingleLineDelimTextFileReader*>(fileReader);
19 return initFromFile(sldFileReader);
20 }
21
22
initFromFile(SingleLineDelimTextFileReader * fileReader)23 bool Bed3Interval::initFromFile(SingleLineDelimTextFileReader *fileReader)
24 {
25 setFileIdx(fileReader->getFileIdx());
26 fileReader->getField(0, _chrName);
27 fileReader->getField(1, _startPosStr);
28 fileReader->getField(2, _endPosStr);
29 _startPos = str2chrPos(_startPosStr);
30 _endPos = str2chrPos(_endPosStr);
31 _zeroLength = false;
32 return true;
33 }
34
print_record(const string & name,CHRPOS start,CHRPOS end,string & buf)35 inline void print_record(const string& name, CHRPOS start, CHRPOS end, string& buf) {
36 static char buffer[1024];
37 snprintf(buffer, sizeof(buffer), "%s\t%" PRId_CHRPOS "\t%" PRId_CHRPOS, name.c_str(), start, end);
38 buf.append(buffer);
39 }
40
print(string & outBuf) const41 void Bed3Interval::print(string &outBuf) const{
42 print_record(_chrName, _startPos, _endPos, outBuf);
43 }
44
print(string & outBuf,CHRPOS start,CHRPOS end) const45 void Bed3Interval::print(string &outBuf, CHRPOS start, CHRPOS end) const{
46 print_record(_chrName, start, end, outBuf);
47 }
48
print(string & outBuf,const string & start,const string & end) const49 void Bed3Interval::print(string &outBuf, const string & start, const string & end) const
50 {
51 outBuf.append(_chrName);
52 outBuf.append("\t");
53 outBuf.append(start);
54 outBuf.append("\t");
55 outBuf.append(end);
56 }
57
printNull(string & outBuf) const58 void Bed3Interval::printNull(string &outBuf) const {
59 outBuf.append(".\t-1\t-1", 7);
60 }
61
getField(int fieldNum) const62 const string &Bed3Interval::getField(int fieldNum) const
63 {
64 switch (fieldNum) {
65 case 1:
66 return _chrName;
67 break;
68 case 2:
69 return _startPosStr;
70 break;
71 case 3:
72 return _endPosStr;
73 break;
74 default:
75 return Record::getField(fieldNum);
76 break;
77 }
78 }
79
isNumericField(int fieldNum)80 bool Bed3Interval::isNumericField(int fieldNum) {
81 switch (fieldNum) {
82 case 1:
83 return false; //chrom
84 break;
85 case 2:
86 return true; //startPos
87 break;
88 case 3:
89 return true; //endPos
90 break;
91 default:
92 cerr << endl << "*****" << endl
93 << "*****ERROR: requested invalid column " << fieldNum << ". Exiting." << endl
94 << endl << "*****" << endl;
95 exit(1);
96 break;
97 }
98 }
99