\r
// file operations\r
void BamReader::Close(void) { d->Close(); }\r
+bool BamReader::IsIndexLoaded(void) const { return d->IsIndexLoaded; }\r
bool BamReader::IsOpen(void) const { return d->mBGZF.IsOpen; }\r
bool BamReader::Jump(int refID, int position) { \r
d->Region.LeftRefID = refID;\r
void BamReader::BamReaderPrivate::ClearIndex(void) {\r
delete NewIndex;\r
NewIndex = 0;\r
+ IsIndexLoaded = false;\r
}\r
\r
// closes the BAM file\r
else\r
NewIndex = new BamToolsIndex(&mBGZF, Parent, IsBigEndian);\r
\r
+ // build new index\r
bool ok = true;\r
ok &= NewIndex->Build();\r
+ IsIndexLoaded = ok;\r
+ \r
+ // attempt to save index data to file\r
ok &= NewIndex->Write(Filename); \r
\r
- // return success/fail\r
+ // return success/fail of both building & writing index\r
return ok;\r
}\r
\r
\r
// -----------------------------------------------------------------------\r
// check for existing index \r
- if ( NewIndex == 0 ) return false; \r
+ if ( !IsIndexLoaded || NewIndex == 0 ) return false; \r
// see if reference has alignments\r
if ( !NewIndex->HasAlignments(refID) ) return false; \r
// make sure position is valid\r
return false;\r
}\r
\r
- // return success of loading index data\r
- return NewIndex->Load(IndexFilename);\r
+ // return success of loading index data from file\r
+ IsIndexLoaded = NewIndex->Load(IndexFilename);\r
+ return IsIndexLoaded;\r
}\r
\r
// populates BamAlignment with alignment data under file pointer, returns success/fail\r