]> git.donarmstrong.com Git - bamtools.git/commitdiff
Had some typos in last commit. Fixed.
authorbarnett <barnett@9efb377e-2e27-44b9-b91a-ec4abb80ed8b>
Tue, 30 Mar 2010 15:36:55 +0000 (15:36 +0000)
committerbarnett <barnett@9efb377e-2e27-44b9-b91a-ec4abb80ed8b>
Tue, 30 Mar 2010 15:36:55 +0000 (15:36 +0000)
git-svn-id: svn+ssh://gene.bc.edu/home/subversion/Derek/BamTools/trunk@41 9efb377e-2e27-44b9-b91a-ec4abb80ed8b

BamAux.h
BamReader.cpp
BamReader.h
BamWriter.cpp

index ea709270fb1a173f8bb4abc6705b5f5ef107606d..089700ad5f44587ba725e07446814c215f4a7343 100644 (file)
--- a/BamAux.h
+++ b/BamAux.h
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 29 March 2010 (DB)\r
+// Last modified: 30 March 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Provides the basic constants, data structures, etc. for using BAM files\r
 // ***************************************************************************\r
@@ -341,12 +341,24 @@ inline bool SystemIsBigEndian(void) {
 }\r
 \r
 // swaps endianness of 16-bit value 'in place'\r
+inline void SwapEndian_16(int16_t& x) {\r
+    x = ((x >> 8) | (x << 8));\r
+}\r
+\r
 inline void SwapEndian_16(uint16_t& x) {\r
     x = ((x >> 8) | (x << 8));\r
 }\r
 \r
 // swaps endianness of 32-bit value 'in-place'\r
-inline void SwapEndian_32(uint32_t& value) {\r
+inline void SwapEndian_32(int32_t& x) {\r
+    x = ( (x >> 24) | \r
+         ((x << 8) & 0x00FF0000) | \r
+         ((x >> 8) & 0x0000FF00) | \r
+          (x << 24)\r
+        );\r
+}\r
+\r
+inline void SwapEndian_32(uint32_t& x) {\r
     x = ( (x >> 24) | \r
          ((x << 8) & 0x00FF0000) | \r
          ((x >> 8) & 0x0000FF00) | \r
@@ -355,14 +367,26 @@ inline void SwapEndian_32(uint32_t& value) {
 }\r
 \r
 // swaps endianness of 64-bit value 'in-place'\r
-inline void SwapEndian_64(uint64_t& value) {\r
+inline void SwapEndian_64(int64_t& x) {\r
+    x = ( (x >> 56) | \r
+         ((x << 40) & 0x00FF000000000000ll) |\r
+         ((x << 24) & 0x0000FF0000000000ll) |\r
+         ((x << 8)  & 0x000000FF00000000ll) |\r
+         ((x >> 8)  & 0x00000000FF000000ll) |\r
+         ((x >> 24) & 0x0000000000FF0000ll) |\r
+         ((x >> 40) & 0x000000000000FF00ll) |\r
+          (x << 56)\r
+        );\r
+}\r
+\r
+inline void SwapEndian_64(uint64_t& x) {\r
     x = ( (x >> 56) | \r
-         ((x << 40) & 0x00FF000000000000) |\r
-         ((x << 24) & 0x0000FF0000000000) |\r
-         ((x << 8)  & 0x000000FF00000000) |\r
-         ((x >> 8)  & 0x00000000FF000000) |\r
-         ((x >> 24) & 0x0000000000FF0000) |\r
-         ((x >> 40) & 0x000000000000FF00) |\r
+         ((x << 40) & 0x00FF000000000000ll) |\r
+         ((x << 24) & 0x0000FF0000000000ll) |\r
+         ((x << 8)  & 0x000000FF00000000ll) |\r
+         ((x >> 8)  & 0x00000000FF000000ll) |\r
+         ((x >> 24) & 0x0000000000FF0000ll) |\r
+         ((x >> 40) & 0x000000000000FF00ll) |\r
           (x << 56)\r
         );\r
 }\r
index c29b14ce5e867f8e9edcb9f2552fd6b04dd638f9..2d43e3900a3df978ff85769b03be43a26028e652 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 29 March 2010 (DB)\r
+// Last modified: 30 March 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
@@ -70,10 +70,7 @@ struct BamReader::BamReaderPrivate {
     bool GetNextAlignment(BamAlignment& bAlignment);\r
 \r
     // access auxiliary data\r
-    const string GetHeaderText(void) const;\r
-    const int GetReferenceCount(void) const;\r
-    const RefVector GetReferenceData(void) const;\r
-    const int GetReferenceID(const string& refName) const;\r
+    int GetReferenceID(const string& refName) const;\r
 \r
     // index operations\r
     bool CreateIndex(void);\r
@@ -144,10 +141,10 @@ bool BamReader::Rewind(void) { return d->Rewind(); }
 bool BamReader::GetNextAlignment(BamAlignment& bAlignment) { return d->GetNextAlignment(bAlignment); }\r
 \r
 // access auxiliary data\r
-const string    BamReader::GetHeaderText(void) const { return d->HeaderText; }\r
-const int       BamReader::GetReferenceCount(void) const { return d->References.size(); }\r
+const string BamReader::GetHeaderText(void) const { return d->HeaderText; }\r
+int BamReader::GetReferenceCount(void) const { return d->References.size(); }\r
 const RefVector BamReader::GetReferenceData(void) const { return d->References; }\r
-const int       BamReader::GetReferenceID(const string& refName) const { return d->GetReferenceID(refName); }\r
+int BamReader::GetReferenceID(const string& refName) const { return d->GetReferenceID(refName); }\r
 \r
 // index operations\r
 bool BamReader::CreateIndex(void) { return d->CreateIndex(); }\r
@@ -375,7 +372,7 @@ bool BamReader::BamReaderPrivate::CreateIndex(void) {
 }\r
 \r
 // returns RefID for given RefName (returns References.size() if not found)\r
-const int BamReader::BamReaderPrivate::GetReferenceID(const string& refName) const {\r
+int BamReader::BamReaderPrivate::GetReferenceID(const string& refName) const {\r
 \r
     // retrieve names from reference data\r
     vector<string> refNames;\r
@@ -717,13 +714,13 @@ bool BamReader::BamReaderPrivate::LoadNextAlignment(BamAlignment& bAlignment) {
     int bytesRead = 4;\r
 \r
     // read in core alignment data, make sure the right size of data was read\r
-    uint32_t x[8];\r
+    char x[BAM_CORE_SIZE];\r
     if ( mBGZF.Read(x, BAM_CORE_SIZE) != BAM_CORE_SIZE ) { return false; }\r
     bytesRead += BAM_CORE_SIZE;\r
 \r
     if ( IsBigEndian ) {\r
-        for ( int i = 0; i < 8; ++i ) { \r
-          SwapEndian_32(x[i]); \r
+        for ( int i = 0; i < BAM_CORE_SIZE; i+=sizeof(uint32_t) ) { \r
+          SwapEndian_32p(&x[i]); \r
         }\r
     }\r
     \r
@@ -734,21 +731,21 @@ bool BamReader::BamReaderPrivate::LoadNextAlignment(BamAlignment& bAlignment) {
     unsigned int querySequenceLength;\r
 \r
     bAlignment.RefID    = BgzfData::UnpackSignedInt(&x[0]);  \r
-    bAlignment.Position = BgzfData::UnpackSignedInt(&x[1]);\r
+    bAlignment.Position = BgzfData::UnpackSignedInt(&x[4]);\r
     \r
-    tempValue = BgzfData::UnpackUnsignedInt(&x[2]);\r
+    tempValue = BgzfData::UnpackUnsignedInt(&x[8]);\r
     bAlignment.Bin        = tempValue >> 16;\r
     bAlignment.MapQuality = tempValue >> 8 & 0xff;\r
     queryNameLength       = tempValue & 0xff;\r
 \r
-    tempValue = BgzfData::UnpackUnsignedInt(&x[3]);\r
+    tempValue = BgzfData::UnpackUnsignedInt(&x[12]);\r
     bAlignment.AlignmentFlag = tempValue >> 16;\r
     numCigarOperations       = tempValue & 0xffff;\r
 \r
-    querySequenceLength     = BgzfData::UnpackUnsignedInt(&x[4]);\r
-    bAlignment.MateRefID    = BgzfData::UnpackSignedInt(&x[5]);\r
-    bAlignment.MatePosition = BgzfData::UnpackSignedInt(&x[6]);\r
-    bAlignment.InsertSize   = BgzfData::UnpackSignedInt(&x[7]);\r
+    querySequenceLength     = BgzfData::UnpackUnsignedInt(&x[16]);\r
+    bAlignment.MateRefID    = BgzfData::UnpackSignedInt(&x[20]);\r
+    bAlignment.MatePosition = BgzfData::UnpackSignedInt(&x[24]);\r
+    bAlignment.InsertSize   = BgzfData::UnpackSignedInt(&x[28]);\r
     \r
     // calculate lengths/offsets\r
     const unsigned int dataLength      = blockLength - BAM_CORE_SIZE;\r
@@ -772,7 +769,7 @@ bool BamReader::BamReaderPrivate::LoadNextAlignment(BamAlignment& bAlignment) {
         bytesRead += dataLength;\r
 \r
         // clear out any previous string data\r
-        bAlignment.Name.clear(;)\r
+        bAlignment.Name.clear();\r
         bAlignment.QueryBases.clear();\r
         bAlignment.Qualities.clear();\r
         bAlignment.AlignedBases.clear();\r
@@ -875,7 +872,7 @@ bool BamReader::BamReaderPrivate::LoadNextAlignment(BamAlignment& bAlignment) {
         // -----------------------\r
         if ( IsBigEndian ) {\r
             int i = 0;\r
-            while ( i < tagDataLen ) {\r
+            while ( (unsigned int)i < tagDataLen ) {\r
                 \r
                 i += 2;                                 // skip tag type (e.g. "RG", "NM", etc)\r
                 uint8_t type = toupper(tagData[i]);     // lower & upper case letters have same meaning \r
index 6332cde74bf76ecd539f9f073d8244483dc6ec1c..8047d7a774e1c516c06d4292784a4adc3805de78 100644 (file)
@@ -1,9 +1,9 @@
 // ***************************************************************************\r
-// BamReader.h (c) 2009 Derek Barnett, Michael Strömberg\r
+// BamReader.h (c) 2009 Derek Barnett, Michael Strmberg\r
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 8 December 2009 (DB)\r
+// Last modified: 30 March 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
@@ -59,11 +59,11 @@ class BamReader {
         // returns SAM header text\r
         const std::string GetHeaderText(void) const;\r
         // returns number of reference sequences\r
-        const int GetReferenceCount(void) const;\r
+        int GetReferenceCount(void) const;\r
         // returns vector of reference objects\r
         const BamTools::RefVector GetReferenceData(void) const;\r
         // returns reference id (used for BamReader::Jump()) for the given reference name\r
-        const int GetReferenceID(const std::string& refName) const;\r
+        int GetReferenceID(const std::string& refName) const;\r
 \r
         // ----------------------\r
         // BAM index operations\r
index 075989a6f015a09340a9392d856a37ed0914ce30..2cd2742dce5c5acc9a679927cb06af5e88bdeb63 100644 (file)
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 29 March 2010 (DB)\r
+// Last modified: 30 March 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
@@ -305,7 +305,7 @@ void BamWriter::BamWriterPrivate::SaveAlignment(const BamAlignment& al) {
         \r
         for (unsigned int i = 0; i < packedCigarLen; ++i) {\r
             if ( IsBigEndian ) { \r
-              SwapEndian_32(cigarData[i]); \r
+              SwapEndian_32p(&cigarData[i]); \r
             }\r
         }\r
         \r
@@ -332,7 +332,7 @@ void BamWriter::BamWriterPrivate::SaveAlignment(const BamAlignment& al) {
         memcpy(tagData, al.TagData.data(), tagDataLength);\r
       \r
         int i = 0;\r
-        while ( i < tagDataLength ) {\r
+        while ( (unsigned int)i < tagDataLength ) {\r
             \r
             i += 2;                                 // skip tag type (e.g. "RG", "NM", etc)\r
             uint8_t type = toupper(tagData[i]);     // lower & upper case letters have same meaning \r