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