]> git.donarmstrong.com Git - bamtools.git/commitdiff
Removed assertion in GetOffset(), now returns -1 if regionChunks == 0. Jump() then...
authorbarnett <barnett@9efb377e-2e27-44b9-b91a-ec4abb80ed8b>
Thu, 23 Apr 2009 20:26:30 +0000 (20:26 +0000)
committerbarnett <barnett@9efb377e-2e27-44b9-b91a-ec4abb80ed8b>
Thu, 23 Apr 2009 20:26:30 +0000 (20:26 +0000)
git-svn-id: svn+ssh://gene.bc.edu/home/subversion/Derek/BamTools/trunk@17 9efb377e-2e27-44b9-b91a-ec4abb80ed8b

BamReader.cpp
BamReader.h

index 4b50d7e2348c9a59b2b33cd3e247b059f6c0f614..ad584a2a8097c86cdbf8bfdfe16e9bd4305eea5b 100644 (file)
@@ -2,7 +2,7 @@
 
 // Derek Barnett
 // Marth Lab, Boston College
-// Last modified: 6 April 2009
+// Last modified: 23 April 2009
 
 #include "BamReader.h"
 #include <iostream>
@@ -153,7 +153,10 @@ bool BamReader::Jump(int refID, unsigned int left) {
                m_currentRefID = refID;
                m_currentLeft  = left;
                m_isRegionSpecified = true;
-               return ( bam_seek(m_file, GetOffset(m_currentRefID, m_currentLeft), SEEK_SET) == 0 );
+               
+               int64_t offset = GetOffset(m_currentRefID, m_currentLeft);
+               if ( offset == -1 ) { return false; }
+               else { return ( bam_seek(m_file, offset, SEEK_SET) == 0 ); }
        }
        return false;
 }
@@ -238,7 +241,7 @@ uint32_t BamReader::CalculateAlignmentEnd(const unsigned int& position, const ve
        return alignEnd;
 }
 
-uint64_t BamReader::GetOffset(int refID, unsigned int left) {
+int64_t BamReader::GetOffset(int refID, unsigned int left) {
 
        //  make space for bins
        uint16_t* bins = (uint16_t*)calloc(MAX_BIN, 2);                 
@@ -298,7 +301,7 @@ uint64_t BamReader::GetOffset(int refID, unsigned int left) {
        free(bins);
 
        // there should be at least 1
-       assert(regionChunks.size() > 0);
+       if(regionChunks.size() > 0) { return -1; }
 
        // sort chunks by start position
        sort ( regionChunks.begin(), regionChunks.end(), LookupKeyCompare<uint64_t, uint64_t>() );
@@ -323,7 +326,7 @@ uint64_t BamReader::GetOffset(int refID, unsigned int left) {
        }
 
        // return beginning file offset of first chunk for region
-       return regionChunks.at(0).first;
+       return (int64_t)regionChunks.at(0).first;
 }
 
 bool BamReader::IsOverlap(BamAlignment& bAlignment) {
index 7748afa84539d4fd6720f5155711a0518d307877..e2b4598d75292aa95447f0e0599671ad2d4e7db5 100644 (file)
@@ -33,7 +33,7 @@
 \r
 // Derek Barnett\r
 // Marth Lab, Boston College\r
-// Last modified: 6 April 2009\r
+// Last modified: 23 April 2009\r
 \r
 #ifndef BAMREADER_H\r
 #define BAMREADER_H\r
@@ -205,7 +205,7 @@ class BamReader {
        private:\r
                int      BinsFromRegion(int, unsigned int, uint16_t[MAX_BIN]);\r
                uint32_t CalculateAlignmentEnd(const unsigned int&, const vector<CigarOp>&);\r
-               uint64_t GetOffset(int, unsigned int);\r
+               int64_t  GetOffset(int, unsigned int);\r
                bool     IsOverlap(BamAlignment&);\r
                bool     LoadHeader(void);\r
                bool     LoadIndex(void);\r