From 5c3d96dba87db46c9a9e6a0de14a3d5e77b3424f Mon Sep 17 00:00:00 2001
From: Aaron <aaronquinlan@gmail.com>
Date: Thu, 8 Dec 2011 15:36:27 -0500
Subject: [PATCH] Further nullBed tweaking.

---
 src/intersectBed/intersectBed.cpp   |  3 +--
 src/utils/bedFile/bedFile.h         | 13 ++++++++-----
 src/utils/chromsweep/chromsweep.cpp | 28 +++++++++++++---------------
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/intersectBed/intersectBed.cpp b/src/intersectBed/intersectBed.cpp
index 735fd8d7..3581bf2e 100644
--- a/src/intersectBed/intersectBed.cpp
+++ b/src/intersectBed/intersectBed.cpp
@@ -198,7 +198,7 @@ void BedIntersect::IntersectBed() {
 
         vector<BED> hits;
         hits.reserve(100);
-        BED a, nullBed;
+        BED a;
 
         // open the "A" file, process each BED entry and searh for overlaps.
         _bedA->Open();
@@ -226,7 +226,6 @@ void BedIntersect::IntersectBed() {
                     }
                 }
             }
-            a = nullBed;
         }
         _bedA->Close();
     }
diff --git a/src/utils/bedFile/bedFile.h b/src/utils/bedFile/bedFile.h
index 25475a32..c12066c3 100644
--- a/src/utils/bedFile/bedFile.h
+++ b/src/utils/bedFile/bedFile.h
@@ -481,6 +481,7 @@ private:
     istream   *_bedStream;
     string _bedLine;
 
+    BED _nullBed;
     string _header;
     bool _firstLine;
     vector<string> _bedFields;
@@ -509,14 +510,19 @@ private:
     */
     template <typename T>
     inline BedLineStatus parseLine (T &bed, const vector<string> &lineVector) {
-
+        
+        // clear out the data from the last line.
+        bed = _nullBed;
         unsigned int numFields = lineVector.size();
 
         // bail out if we have a blank line
         if (numFields == 0) {
             return BED_BLANK;
         }
-
+        // bail out if we have a comment line
+        if (lineVector[0].find("#") == 0) {
+            return BED_HEADER;
+        }
 
         if (numFields >= 3) {
             // line parsing for all lines after the first non-header line
@@ -623,7 +629,6 @@ private:
                 bed.name = lineVector[3];
                 bed.score = lineVector[4];
                 bed.strand = lineVector[5];
-                bed.otherFields.clear();
                 for (unsigned int i = 6; i < lineVector.size(); ++i) {
                     bed.otherFields.push_back(lineVector[i]);
                 }
@@ -677,7 +682,6 @@ private:
             }
 
             if (this->bedType > 2) {
-                bed.otherFields.clear();
                 for (unsigned int i = 2; i < numFields; ++i)
                     bed.otherFields.push_back(lineVector[i]);
             }
@@ -717,7 +721,6 @@ private:
     template <typename T>
     inline bool parseGffLine (T &bed, const vector<string> &lineVector, int lineNum, unsigned int numFields) {
         if (numFields == this->bedType) {
-            bed.otherFields.clear();
             if (this->bedType >= 8 && _isGff) {
                 bed.chrom = lineVector[0];
                 if (isInteger(lineVector[3]))
diff --git a/src/utils/chromsweep/chromsweep.cpp b/src/utils/chromsweep/chromsweep.cpp
index 70eac679..5027362e 100644
--- a/src/utils/chromsweep/chromsweep.cpp
+++ b/src/utils/chromsweep/chromsweep.cpp
@@ -62,19 +62,17 @@ ChromSweep::~ChromSweep(void) {
 
 
 void ChromSweep::ScanCache() {
-    if (_query->_status != BED_INVALID) {
-        vector<BED>::iterator c = _cache.begin();
-        while (c != _cache.end())
-        {
-            if ((_curr_qy.chrom == c->chrom) && !(after(_curr_qy, *c))) {
-                if (IsValidHit(_curr_qy, *c)) {
-                    _hits.push_back(*c);
-                }
-                ++c;
-            }
-            else {
-                c = _cache.erase(c);
+    vector<BED>::iterator c = _cache.begin();
+    while (c != _cache.end())
+    {
+        if ((_curr_qy.chrom == c->chrom) && !(after(_curr_qy, *c))) {
+            if (IsValidHit(_curr_qy, *c)) {
+                _hits.push_back(*c);
             }
+            ++c;
+        }
+        else {
+            c = _cache.erase(c);
         }
     }
 }
@@ -156,7 +154,6 @@ bool ChromSweep::Next(pair<BED, vector<BED> > &next) {
             _results.push(make_pair(_curr_qy, _hits));
             // reset for the next query
             _hits.clear();
-            _curr_qy = _nullBed;
             _query->GetNextBed(_curr_qy, true);
             _curr_chrom = _curr_qy.chrom;
         }
@@ -167,7 +164,8 @@ bool ChromSweep::Next(pair<BED, vector<BED> > &next) {
         _results.pop();
         return true;
     }
-    // otherwise, the party is over.
-    else {return false;}
+    else {
+        return false;
+    }
 }
 
-- 
GitLab