]> git.donarmstrong.com Git - bamtools.git/blobdiff - src/api/internal/BamToolsIndex_p.h
Major update to BamTools version 1.0
[bamtools.git] / src / api / internal / BamToolsIndex_p.h
index c99834df2b3ce3420fc40db657f5962b4c321ede..ee5abbc8ad730bd86bab43cfd01d8a12afb9e095 100644 (file)
@@ -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")
 // ***************************************************************************
 #include <vector>
 
 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