]> git.donarmstrong.com Git - bamtools.git/blobdiff - src/api/internal/BamReader_p.cpp
Updated CMakeLists.txt files
[bamtools.git] / src / api / internal / BamReader_p.cpp
index 770701770b5855e935a2db01bb85fccbf2845691..a34435817d62ab039a614725b24af0dec9dd62ba 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: 14 November 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,16 +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");
-        assert(m_stream);
+        m_stream.Open(filename, IBamIODevice::ReadOnly);
 
         // load BAM metadata
         LoadHeaderData();
@@ -374,8 +376,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 +386,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) {
@@ -447,11 +446,6 @@ void BamReaderPrivate::SetIndex(BamIndex* index) {
     m_randomAccessController.SetIndex(index);
 }
 
-// change the index caching behavior
-void BamReaderPrivate::SetIndexCacheMode(const BamIndex::IndexCacheMode& mode) {
-    m_randomAccessController.SetIndexCacheMode(mode);
-}
-
 // sets current region & attempts to jump to it
 // returns success/failure
 bool BamReaderPrivate::SetRegion(const BamRegion& region) {