X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2Finternal%2FBamReader_p.cpp;h=11cba33ce177fabbc382738f99e6dcfb9b309554;hb=9f1ce8c47aeadb6dc1320b52ee671c3341b97935;hp=770701770b5855e935a2db01bb85fccbf2845691;hpb=2e049ed7f28881bce09653e60f5aea54bfd7afbf;p=bamtools.git diff --git a/src/api/internal/BamReader_p.cpp b/src/api/internal/BamReader_p.cpp index 7707017..11cba33 100644 --- a/src/api/internal/BamReader_p.cpp +++ b/src/api/internal/BamReader_p.cpp @@ -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 -#include -#include -#include -#include -#include -#include -#include -#include +#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) {