]> git.donarmstrong.com Git - bamtools.git/commitdiff
Added IsIndexLoaded() public method to BamReader. Allows client to make sure index...
authorDerek <derekwbarnett@gmail.com>
Fri, 3 Sep 2010 04:35:05 +0000 (00:35 -0400)
committerDerek <derekwbarnett@gmail.com>
Fri, 3 Sep 2010 04:35:05 +0000 (00:35 -0400)
src/api/BamReader.cpp
src/api/BamReader.h

index 10aaa5e405045475bc44d5e66b3668a6d90f7025..f32b4fbb88d1a5f860c46e334c25fe82524853ad 100644 (file)
@@ -137,6 +137,7 @@ BamReader::~BamReader(void) {
 \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
@@ -360,6 +361,7 @@ bool BamReader::BamReaderPrivate::BuildCharData(BamAlignment& bAlignment) {
 void BamReader::BamReaderPrivate::ClearIndex(void) {\r
     delete NewIndex;\r
     NewIndex = 0;\r
+    IsIndexLoaded = false;\r
 }\r
 \r
 // closes the BAM file\r
@@ -393,11 +395,15 @@ bool BamReader::BamReaderPrivate::CreateIndex(bool useDefaultIndex) {
     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
@@ -515,7 +521,7 @@ bool BamReader::BamReaderPrivate::Jump(int refID, int position) {
 \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
@@ -605,8 +611,9 @@ bool BamReader::BamReaderPrivate::LoadIndex(void) {
         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
index c93987b1a41bfbe41b7f0a10bd9d826a3514e681..5d4c83ab9c8c7638c776c3b6a2e987200b0d9487 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 9 July 2010 (DB)\r
+// Last modified: 2 September 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
@@ -38,6 +38,8 @@ class BamReader {
 \r
         // close BAM file\r
         void Close(void);\r
+        // returns whether index data is loaded (i.e. reader is able to Jump() or not)\r
+        bool IsIndexLoaded(void) const;\r
         // returns whether reader is open for reading or not\r
         bool IsOpen(void) const;\r
         // performs random-access jump to reference, position\r