JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / util / ShiftList.java
index 3c0683a..860a700 100644 (file)
@@ -1,24 +1,27 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.util;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * ShiftList Simple way of mapping a linear series to a new linear range with
@@ -27,11 +30,11 @@ import java.util.*;
  */
 public class ShiftList
 {
-  public Vector shifts;
+  private List<int[]> shifts;
 
   public ShiftList()
   {
-    shifts = new Vector();
+    shifts = new ArrayList<int[]>();
   }
 
   /**
@@ -44,21 +47,22 @@ public class ShiftList
    */
   public void addShift(int pos, int shift)
   {
-    int sidx = 0;
-    int[] rshift = null;
-    while (sidx < shifts.size()
-            && (rshift = (int[]) shifts.elementAt(sidx))[0] < pos)
-    {
-      sidx++;
-    }
-    if (sidx == shifts.size())
+    synchronized (shifts)
     {
-      shifts.insertElementAt(new int[]
-      { pos, shift }, sidx);
-    }
-    else
-    {
-      rshift[1] += shift;
+      int sidx = 0;
+      int[] rshift = null;
+      while (sidx < shifts.size() && (rshift = shifts.get(sidx))[0] < pos)
+      {
+        sidx++;
+      }
+      if (sidx == shifts.size())
+      {
+        shifts.add(sidx, new int[] { pos, shift });
+      }
+      else
+      {
+        rshift[1] += shift;
+      }
     }
   }
 
@@ -79,7 +83,7 @@ public class ShiftList
     int sidx = 0;
     int rshift[];
     while (sidx < shifts.size()
-            && (rshift = ((int[]) shifts.elementAt(sidx++)))[0] <= pos)
+            && (rshift = (shifts.get(sidx++)))[0] <= pos)
     {
       shifted += rshift[1];
     }
@@ -89,9 +93,9 @@ public class ShiftList
   /**
    * clear all shifts
    */
-  public void clear()
+  public synchronized void clear()
   {
-    shifts.removeAllElements();
+    shifts.clear();
   }
 
   /**
@@ -102,15 +106,16 @@ public class ShiftList
   public ShiftList getInverse()
   {
     ShiftList inverse = new ShiftList();
-    if (shifts != null)
+    synchronized (shifts)
     {
-      for (int i = 0, j = shifts.size(); i < j; i++)
+      if (shifts != null)
       {
-        int[] sh = (int[]) shifts.elementAt(i);
-        if (sh != null)
+        for (int[] sh : shifts)
         {
-          inverse.shifts.addElement(new int[]
-          { sh[0], -sh[1] });
+          if (sh != null)
+          {
+            inverse.shifts.add(new int[] { sh[0], -sh[1] });
+          }
         }
       }
     }
@@ -118,8 +123,8 @@ public class ShiftList
   }
 
   /**
-   * parse a 1d map of position 1<i<n to L<pos[i]<N such as that returned from
-   * SequenceI.gapMap()
+   * parse a 1d map of position 1&lt;i&lt;n to L&lt;pos[i]&lt;N such as that
+   * returned from SequenceI.gapMap()
    * 
    * @param gapMap
    * @return shifts from map index to mapped position
@@ -141,4 +146,9 @@ public class ShiftList
     }
     return shiftList;
   }
+
+  public List<int[]> getShifts()
+  {
+    return shifts;
+  }
 }