19 #include "StringBasics.h"
23 myChromNamesBuffer(NULL)
30 if(myChromNamesBuffer != NULL)
32 delete[] myChromNamesBuffer;
33 myChromNamesBuffer = NULL;
42 if(myChromNamesBuffer != NULL)
44 delete[] myChromNamesBuffer;
45 myChromNamesBuffer = NULL;
47 myChromNamesVector.clear();
69 if(
ifread(indexFile, magic, 4) != 4)
76 if (magic[0] !=
'T' || magic[1] !=
'B' || magic[2] !=
'I' || magic[3] != 1)
84 if(
ifread(indexFile, &n_ref, 4) != 4)
94 if(
ifread(indexFile, &myFormat,
sizeof(myFormat)) !=
sizeof(myFormat))
103 if(
ifread(indexFile, &l_nm,
sizeof(l_nm)) !=
sizeof(l_nm))
110 myChromNamesBuffer =
new char[l_nm];
111 if(
ifread(indexFile, myChromNamesBuffer, l_nm) != l_nm)
115 myChromNamesVector.resize(n_ref);
118 bool prevNull =
true;
120 for(uint32_t i = 0; i < l_nm; i++)
122 if(chromIndex >= n_ref)
130 myChromNamesVector[chromIndex++] = myChromNamesBuffer + i;
133 if(myChromNamesBuffer[i] ==
'\0')
139 for(
int refIndex = 0; refIndex < n_ref; refIndex++)
145 if(
ifread(indexFile, &(ref->n_bin), 4) != 4)
153 ref->bins.resize(ref->n_bin + 1);
156 for(
int binIndex = 0; binIndex < ref->n_bin; binIndex++)
161 if(
ifread(indexFile, &(binNumber), 4) != 4)
170 Bin* binPtr = &(ref->bins[binIndex]);
171 binPtr->bin = binNumber;
174 if(
ifread(indexFile, &(binPtr->n_chunk), 4) != 4)
183 uint32_t sizeOfChunkList = binPtr->n_chunk *
sizeof(
Chunk);
184 binPtr->chunks = (
Chunk*)malloc(sizeOfChunkList);
185 if(
ifread(indexFile, binPtr->chunks, sizeOfChunkList) != sizeOfChunkList)
194 if(
ifread(indexFile, &(ref->n_intv), 4) != 4)
203 uint32_t linearIndexSize = ref->n_intv *
sizeof(uint64_t);
204 ref->ioffsets = (uint64_t*)malloc(linearIndexSize);
205 if(
ifread(indexFile, ref->ioffsets, linearIndexSize) != linearIndexSize)
219 uint64_t& fileStartPos)
const
223 for(refID = 0; refID < n_ref; refID++)
225 if(strcmp(refName, myChromNamesVector[refID]) == 0)
243 return(getMinOffsetFromLinearIndex(refID, start, fileStartPos));
249 if(indexNum >= myChromNamesVector.size())
251 String message =
"ERROR: Out of range on Tabix::getRefName(";
254 throw(std::runtime_error(message.c_str()));
257 return(myChromNamesVector[indexNum]);