]> git.donarmstrong.com Git - bamtools.git/blobdiff - src/api/internal/BamReader_p.cpp
Cleaned up intra-API includes & moved version numbers to 2.0.0
[bamtools.git] / src / api / internal / BamReader_p.cpp
index 770701770b5855e935a2db01bb85fccbf2845691..11cba33ce177fabbc382738f99e6dcfb9b309554 100644 (file)
@@ -2,20 +2,21 @@
 // BamReader_p.cpp (c) 2009 Derek Barnett
 // Marth Lab, Department of Biology, Boston College
 // ---------------------------------------------------------------------------
-// Last modified: 7 October 2011 (DB)
+// Last modified: 10 October 2011 (DB)
 // ---------------------------------------------------------------------------
 // Provides the basic functionality for reading BAM files
 // ***************************************************************************
 
-#include <api/BamConstants.h>
-#include <api/BamReader.h>
-#include <api/internal/BamException_p.h>
-#include <api/internal/BamHeader_p.h>
-#include <api/internal/BamRandomAccessController_p.h>
-#include <api/internal/BamReader_p.h>
-#include <api/internal/BamStandardIndex_p.h>
-#include <api/internal/BamToolsIndex_p.h>
-#include <api/internal/BgzfStream_p.h>
+#include "api/BamConstants.h"
+#include "api/BamReader.h"
+#include "api/IBamIODevice.h"
+#include "api/internal/BamDeviceFactory_p.h"
+#include "api/internal/BamException_p.h"
+#include "api/internal/BamHeader_p.h"
+#include "api/internal/BamRandomAccessController_p.h"
+#include "api/internal/BamReader_p.h"
+#include "api/internal/BamStandardIndex_p.h"
+#include "api/internal/BamToolsIndex_p.h"
 using namespace BamTools;
 using namespace BamTools::Internal;
 
@@ -137,6 +138,10 @@ bool BamReaderPrivate::GetNextAlignment(BamAlignment& alignment) {
 // useful for operations requiring ONLY positional or other alignment-related information
 bool BamReaderPrivate::GetNextAlignmentCore(BamAlignment& alignment) {
 
+    // skip if stream not opened
+    if ( !m_stream.IsOpen() )
+        return false;
+
     try {
 
         // skip if region is set but has no alignments
@@ -214,7 +219,7 @@ bool BamReaderPrivate::HasIndex(void) const {
 }
 
 bool BamReaderPrivate::IsOpen(void) const {
-    return m_stream.IsOpen;
+    return m_stream.IsOpen();
 }
 
 // load BAM header data
@@ -240,7 +245,7 @@ bool BamReaderPrivate::LoadNextAlignment(BamAlignment& alignment) {
 
     // swap core endian-ness if necessary
     if ( m_isBigEndian ) {
-        for ( int i = 0; i < Constants::BAM_CORE_SIZE; i+=sizeof(uint32_t) )
+        for ( unsigned int i = 0; i < Constants::BAM_CORE_SIZE; i+=sizeof(uint32_t) )
             BamTools::SwapEndian_32p(&x[i]);
     }
 
@@ -355,15 +360,13 @@ bool BamReaderPrivate::LocateIndex(const BamIndex::IndexType& preferredType) {
 // opens BAM file (and index)
 bool BamReaderPrivate::Open(const string& filename) {
 
-    bool result;
-
     try {
 
         // make sure we're starting with fresh state
         Close();
 
         // open BgzfStream
-        m_stream.Open(filename, "rb");
+        m_stream.Open(filename, IBamIODevice::ReadOnly);
         assert(m_stream);
 
         // load BAM metadata
@@ -374,8 +377,8 @@ bool BamReaderPrivate::Open(const string& filename) {
         m_filename = filename;
         m_alignmentsBeginOffset = m_stream.Tell();
 
-        // set flag
-        result = true;
+        // return success
+        return true;
 
     } catch ( BamException& e ) {
         const string error = e.what();
@@ -384,9 +387,6 @@ bool BamReaderPrivate::Open(const string& filename) {
         SetErrorString("BamReader::Open", message);
         return false;
     }
-
-    // return success/failure
-    return result;
 }
 
 bool BamReaderPrivate::OpenIndex(const std::string& indexFilename) {