X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2Finternal%2FBamToolsIndex_p.h;h=ee5abbc8ad730bd86bab43cfd01d8a12afb9e095;hb=8c80d760637f8df39262683cd2570f0589423d36;hp=c99834df2b3ce3420fc40db657f5962b4c321ede;hpb=577b6032aa3d85616047c8aba6061dd8dad20cfc;p=bamtools.git diff --git a/src/api/internal/BamToolsIndex_p.h b/src/api/internal/BamToolsIndex_p.h index c99834d..ee5abbc 100644 --- a/src/api/internal/BamToolsIndex_p.h +++ b/src/api/internal/BamToolsIndex_p.h @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 19 November 2010 (DB) +// Last modified: 19 January 2011 (DB) // --------------------------------------------------------------------------- // Provides index operations for the BamTools index format (".bti") // *************************************************************************** @@ -28,9 +28,11 @@ #include namespace BamTools { - namespace Internal { +// BTI constants +const std::string BTI_EXTENSION = ".bti"; + // individual index offset entry struct BamToolsIndexEntry { @@ -41,11 +43,11 @@ struct BamToolsIndexEntry { // ctor BamToolsIndexEntry(const int32_t& maxEndPosition = 0, - const int64_t& startOffset = 0, - const int32_t& startPosition = 0) - : MaxEndPosition(maxEndPosition) - , StartOffset(startOffset) - , StartPosition(startPosition) + const int64_t& startOffset = 0, + const int32_t& startPosition = 0) + : MaxEndPosition(maxEndPosition) + , StartOffset(startOffset) + , StartPosition(startPosition) { } }; @@ -58,7 +60,7 @@ struct BamToolsReferenceEntry { // ctor BamToolsReferenceEntry(void) - : HasAlignments(false) + : HasAlignments(false) { } }; @@ -78,112 +80,113 @@ class BamToolsIndex : public BamIndex { // else // do the old thing enum Version { BTI_1_0 = 1 - , BTI_1_1 - , BTI_1_2 - }; + , BTI_1_1 + , BTI_1_2 + }; // ctor & dtor public: - BamToolsIndex(BamTools::BgzfData* bgzf, BamTools::BamReader* reader); - ~BamToolsIndex(void); + BamToolsIndex(void); + ~BamToolsIndex(void); // interface (implements BamIndex virtual methods) public: - // creates index data (in-memory) from current reader data - bool Build(void); - // returns supported file extension - const std::string Extension(void) const { return std::string(".bti"); } - // returns whether reference has alignments or no - bool HasAlignments(const int& referenceID) const; - // attempts to use index to jump to region; returns success/fail - // a "successful" jump indicates no error, but not whether this region has data - // * thus, the method sets a flag to indicate whether there are alignments - // available after the jump position - bool Jump(const BamTools::BamRegion& region, bool* hasAlignmentsInRegion); + // creates index data (in-memory) from @reader data + bool Build(Internal::BamReaderPrivate* reader); + // returns supported file extension + const std::string Extension(void) { return BTI_EXTENSION; } + // returns whether reference has alignments or no + bool HasAlignments(const int& referenceID) const; + // attempts to use index to jump to @region in @reader; returns success/fail + // a "successful" jump indicates no error, but not whether this region has data + // * thus, the method sets a flag to indicate whether there are alignments + // available after the jump position + bool Jump(Internal::BamReaderPrivate* reader, + const BamTools::BamRegion& region, + bool *hasAlignmentsInRegion); + public: - // clear all current index offset data in memory - void ClearAllData(void); - // return file position after header metadata - const off_t DataBeginOffset(void) const; - // return true if all index data is cached - bool HasFullDataCache(void) const; - // clears index data from all references except the first - void KeepOnlyFirstReferenceOffsets(void); - // load index data for all references, return true if loaded OK - // @saveData - save data in memory if true, just read & discard if false - bool LoadAllReferences(bool saveData = true); - // load first reference from file, return true if loaded OK - // @saveData - save data in memory if true, just read & discard if false - bool LoadFirstReference(bool saveData = true); - // load header data from index file, return true if loaded OK - bool LoadHeader(void); - // position file pointer to first reference begin, return true if skipped OK - bool SkipToFirstReference(void); - // write index reference data - bool WriteAllReferences(void); - // write index header data - bool WriteHeader(void); - - // 'internal' methods + // clear all current index offset data in memory + void ClearAllData(void); + // return file position after header metadata + off_t DataBeginOffset(void) const; + // return true if all index data is cached + bool HasFullDataCache(void) const; + // clears index data from all references except the first + void KeepOnlyFirstReferenceOffsets(void); + // load index data for all references, return true if loaded OK + // @saveData - save data in memory if true, just read & discard if false + bool LoadAllReferences(bool saveData = true); + // load first reference from file, return true if loaded OK + // @saveData - save data in memory if true, just read & discard if false + bool LoadFirstReference(bool saveData = true); + // load header data from index file, return true if loaded OK + bool LoadHeader(void); + // position file pointer to first reference begin, return true if skipped OK + bool SkipToFirstReference(void); + // write index reference data + bool WriteAllReferences(void); + // write index header data + bool WriteHeader(void); + + // internal methods public: - // ----------------------- - // index file operations - - // check index file magic number, return true if OK - bool CheckMagicNumber(void); - // check index file version, return true if OK - bool CheckVersion(void); - // return true if FILE* is open - bool IsOpen(void) const; - // load a single index entry from file, return true if loaded OK - // @saveData - save data in memory if true, just read & discard if false - bool LoadIndexEntry(const int& refId, bool saveData = true); - // load a single reference from file, return true if loaded OK - // @saveData - save data in memory if true, just read & discard if false - bool LoadReference(const int& refId, bool saveData = true); - // loads number of references, return true if loaded OK - bool LoadReferenceCount(int& numReferences); - // position file pointer to desired reference begin, return true if skipped OK - bool SkipToReference(const int& refId); - // write current reference index data to new index file - bool WriteReferenceEntry(const BamToolsReferenceEntry& refEntry); - // write current index offset entry to new index file - bool WriteIndexEntry(const BamToolsIndexEntry& entry); - - // ----------------------- - // index data operations - - // clear all index offset data for desired reference - void ClearReferenceOffsets(const int& refId); - // calculate BAM file offset for desired region - // return true if no error (*NOT* equivalent to "has alignments or valid offset") - // check @hasAlignmentsInRegion to determine this status - // @region - target region - // @offset - resulting seek target - // @hasAlignmentsInRegion - sometimes a file just lacks data in region, this flag indicates that status - bool GetOffset(const BamRegion& region, int64_t& offset, bool* hasAlignmentsInRegion); - // returns true if index cache has data for desired reference - bool IsDataLoaded(const int& refId) const; - // clears index data from all references except the one specified - void KeepOnlyReferenceOffsets(const int& refId); - // saves an index offset entry in memory - void SaveOffsetEntry(const int& refId, const BamToolsIndexEntry& entry); - // pre-allocates size for offset vector - void SetOffsetCount(const int& refId, const int& offsetCount); - // initializes index data structure to hold @count references - void SetReferenceCount(const int& count); + // ----------------------- + // index file operations + + // check index file magic number, return true if OK + bool CheckMagicNumber(void); + // check index file version, return true if OK + bool CheckVersion(void); + // load a single index entry from file, return true if loaded OK + // @saveData - save data in memory if true, just read & discard if false + bool LoadIndexEntry(const int& refId, bool saveData = true); + // load a single reference from file, return true if loaded OK + // @saveData - save data in memory if true, just read & discard if false + bool LoadReference(const int& refId, bool saveData = true); + // loads number of references, return true if loaded OK + bool LoadReferenceCount(int& numReferences); + // position file pointer to desired reference begin, return true if skipped OK + bool SkipToReference(const int& refId); + // write current reference index data to new index file + bool WriteReferenceEntry(const BamToolsReferenceEntry& refEntry); + // write current index offset entry to new index file + bool WriteIndexEntry(const BamToolsIndexEntry& entry); + + // ----------------------- + // index data operations + + // clear all index offset data for desired reference + void ClearReferenceOffsets(const int& refId); + // calculate BAM file offset for desired region + // return true if no error (*NOT* equivalent to "has alignments or valid offset") + // check @hasAlignmentsInRegion to determine this status + // @region - target region + // @offset - resulting seek target + // @hasAlignmentsInRegion - sometimes a file just lacks data in region, this flag indicates that status + bool GetOffset(const BamRegion& region, int64_t& offset, bool* hasAlignmentsInRegion); + // returns true if index cache has data for desired reference + bool IsDataLoaded(const int& refId) const; + // clears index data from all references except the one specified + void KeepOnlyReferenceOffsets(const int& refId); + // saves an index offset entry in memory + void SaveOffsetEntry(const int& refId, const BamToolsIndexEntry& entry); + // pre-allocates size for offset vector + void SetOffsetCount(const int& refId, const int& offsetCount); + // initializes index data structure to hold @count references + void SetReferenceCount(const int& count); // data members private: - int32_t m_blockSize; - BamToolsIndexData m_indexData; - off_t m_dataBeginOffset; - bool m_hasFullDataCache; - bool m_isBigEndian; - int32_t m_inputVersion; // Version is serialized as int - Version m_outputVersion; + int32_t m_blockSize; + BamToolsIndexData m_indexData; + off_t m_dataBeginOffset; + bool m_hasFullDataCache; + bool m_isBigEndian; + int32_t m_inputVersion; // Version is serialized as int + Version m_outputVersion; }; } // namespace Internal