From e6cab1c6baa63cb440d86027ec00d2aee61e44b7 Mon Sep 17 00:00:00 2001
From: arq5x <arq5x@virginia.edu>
Date: Mon, 20 Jan 2014 13:27:31 -0500
Subject: [PATCH] [BUG] change getField() logic in GffRecord

---
 .../FileRecordTools/Records/GffRecord.cpp     | 37 +++++++++++++++++++
 src/utils/FileRecordTools/Records/GffRecord.h |  3 +-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/utils/FileRecordTools/Records/GffRecord.cpp b/src/utils/FileRecordTools/Records/GffRecord.cpp
index f13c8fd8..a91ce159 100644
--- a/src/utils/FileRecordTools/Records/GffRecord.cpp
+++ b/src/utils/FileRecordTools/Records/GffRecord.cpp
@@ -120,3 +120,40 @@ void GffRecord::printNull(QuickString &outBuf) const
 	}
 }
 
+const QuickString &GffRecord::getField(int fieldNum) const
+{
+	if (fieldNum == 9 && _numFields == 9) {
+		return _group;
+	}
+	switch (fieldNum) {
+	case 1:
+		return _chrName;
+		break;
+	case 2:
+		return _source;
+		break;
+	case 3:
+		return _name;
+		break;
+	case 4:
+		return _startPosStr;
+		break;
+	case 5:
+		return _endPosStr;
+		break;
+	case 6:
+		return _score;
+		break;
+	case 7:
+		return _strand;
+		break;
+	case 8:
+		return _frame;
+		break;
+	default:
+		return Bed6Interval::getField(fieldNum);
+		break;
+	}
+}
+
+
diff --git a/src/utils/FileRecordTools/Records/GffRecord.h b/src/utils/FileRecordTools/Records/GffRecord.h
index 195d4bea..b84d96a7 100644
--- a/src/utils/FileRecordTools/Records/GffRecord.h
+++ b/src/utils/FileRecordTools/Records/GffRecord.h
@@ -27,9 +27,10 @@ public:
 	virtual const QuickString &getSource() const { return _source; }
 	virtual const QuickString &getFrame() const { return _frame; }
 	virtual const QuickString &getGroup() const { return _group; }
-	virtual const int getNumFields() const { return _numFields; }
+	virtual int getNumFields() const { return _numFields; }
 	virtual void setNumFields(int val) { _numFields = val; }
 
+	virtual const QuickString &getField(int fieldNum) const;
 	//Note: using the assignment operator in a GffRecord can potentially be a performance hit,
 	//if the number of fields frequently differ between this object and the one being copied.
 	const GffRecord &operator=(const GffRecord &other);
-- 
GitLab