From c3fff51bad7325789c84e9bdac09db4920dceee1 Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Tue, 22 Feb 2011 14:41:38 +0000
Subject: [PATCH] optimise getParts()

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15578 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/variant/BCFReader.java | 31 ++++++++++++++-----
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java
index b746e9a5e..d68ca4bac 100644
--- a/uk/ac/sanger/artemis/components/variant/BCFReader.java
+++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java
@@ -200,7 +200,7 @@ class BCFReader extends AbstractVCFReader
       if(bcfRecord.getAlt().isNonVariant())
         nc = 1;
 
-      String fmts[] = bcfRecord.getFormat().split(":");
+      String fmts[] = VCFRecord.COLON_PATTERN.split( bcfRecord.getFormat() );
       bcfRecord.setData( new String[nsamples][fmts.length] );
       
       for(int j=0; j<nsamples; j++)
@@ -251,13 +251,28 @@ class BCFReader extends AbstractVCFReader
         buff.append((char)b[i]);
     }
 
-    String parts[] = buff.toString().replace("  ", " ").split(" ");
-    bcfRecord.setID( parts[0] );
-    bcfRecord.setRef( parts[1] );
-    bcfRecord.setAlt( parts[2] );
-    bcfRecord.setFilter( parts[3] );
-    bcfRecord.setInfo( parts[4] );
-    bcfRecord.setFormat( parts[5] );
+    int ind = 0;
+    int lastInd = 0;
+    int i = 0;
+    while((ind = buff.indexOf(" ", ind)) > -1)
+    {
+      switch( i )
+      {
+        case 0:  bcfRecord.setID(buff.substring(lastInd, ind)); break;
+        case 1:  bcfRecord.setRef(buff.substring(lastInd, ind)); break;
+        case 2:  bcfRecord.setAlt(buff.substring(lastInd, ind)); break;
+        case 3:  bcfRecord.setFilter(buff.substring(lastInd, ind)); break;
+        case 4:  bcfRecord.setInfo(buff.substring(lastInd, ind)); break;
+        case 5:  bcfRecord.setFormat(buff.substring(lastInd, ind)); break;
+        default: return;
+      }
+
+      ind++;
+      if(ind < buff.length() && buff.charAt(ind) == ' ')
+        ind++;
+      lastInd = ind;
+      i++;
+    }
   }
   
   /**
-- 
GitLab