// ***************************************************************************
// BamWriter_p.h (c) 2010 Derek Barnett
// Marth Lab, Department of Biology, Boston College
-// All rights reserved.
// ---------------------------------------------------------------------------
-// Last modified: 19 November 2010 (DB)
+// Last modified: 10 October 2011 (DB)
// ---------------------------------------------------------------------------
// Provides the basic functionality for producing BAM files
// ***************************************************************************
//
// We mean it.
-#include <api/BamAux.h>
-#include <api/BGZF.h>
+#include "api/BamAux.h"
+#include "api/internal/BgzfStream_p.h"
#include <string>
#include <vector>
namespace BamTools {
+
+class BamAlignment;
+
namespace Internal {
class BamWriterPrivate {
// ctor & dtor
public:
- BamWriterPrivate(void);
- ~BamWriterPrivate(void);
+ BamWriterPrivate(void);
+ ~BamWriterPrivate(void);
- // "public" interface to BamWriter
+ // interface methods
public:
- void Close(void);
- bool Open(const std::string& filename,
- const std::string& samHeader,
- const BamTools::RefVector& referenceSequences,
- bool isWriteUncompressed);
- void SaveAlignment(const BamAlignment& al);
-
- // internal methods
+ void Close(void);
+ std::string GetErrorString(void) const;
+ bool IsOpen(void) const;
+ bool Open(const std::string& filename,
+ const std::string& samHeaderText,
+ const BamTools::RefVector& referenceSequences);
+ bool SaveAlignment(const BamAlignment& al);
+ void SetWriteCompressed(bool ok);
+
+ // 'internal' methods
public:
- const unsigned int CalculateMinimumBin(const int begin, int end) const;
- void CreatePackedCigar(const std::vector<BamTools::CigarOp>& cigarOperations, std::string& packedCigar);
- void EncodeQuerySequence(const std::string& query, std::string& encodedQuery);
+ uint32_t CalculateMinimumBin(const int begin, int end) const;
+ void CreatePackedCigar(const std::vector<BamTools::CigarOp>& cigarOperations, std::string& packedCigar);
+ void EncodeQuerySequence(const std::string& query, std::string& encodedQuery);
+ void WriteAlignment(const BamAlignment& al);
+ void WriteCoreAlignment(const BamAlignment& al);
+ void WriteMagicNumber(void);
+ void WriteReferences(const BamTools::RefVector& referenceSequences);
+ void WriteSamHeaderText(const std::string& samHeaderText);
// data members
- public:
- BgzfData mBGZF;
- bool IsBigEndian;
+ private:
+ BgzfStream m_stream;
+ bool m_isBigEndian;
+ std::string m_errorString;
};
} // namespace Internal