-package jalview.util;
-
-import jalview.datamodel.SequenceI;
-
-import java.util.*;
-
-/**
- * ShiftList
- * Simple way of mapping a linear series to a new linear range with new points introduced.
- * Use at your own risk!
- * <p>Title: ShiftList</p>
- *
- * <p>Description: </p>
- *
- * <p>Copyright: Copyright (c) 2004</p>
- *
- * <p>Company: Dundee University</p>
- *
- * @author not attributable
- * @version 1.0
- */
-public class ShiftList
-{
- public Vector shifts;
- public ShiftList()
- {
- shifts = new Vector();
- }
-
- /**
- * addShift
- * @param pos start position for shift (in original reference frame)
- * @param shift length of shift
- */
- 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())
- shifts.insertElementAt(new int[] { pos, shift}, sidx);
- else
- rshift[1]+=shift;
- }
-
- /**
- * shift
- *
- * @param pos int
- * @return int shifted position
- */
- public int shift(int pos)
- {
- if (shifts.size()==0)
- return pos;
- int shifted=pos;
- int sidx=0;
- int rshift[];
- while (sidx<shifts.size()
- &&
- (rshift=((int[]) shifts.elementAt(sidx++)))[0]<=pos) {
- shifted += rshift[1];
- }
- return shifted;
- }
-
- /**
- * clear all shifts
- */
- public void clear()
- {
- shifts.removeAllElements();
- }
- /**
- * invert the shifts
- * @return ShiftList with inverse shift operations
- */
- public ShiftList getInverse() {
- ShiftList inverse=new ShiftList();
- if (shifts!=null) {
- for (int i=0,j=shifts.size(); i<j; i++) {
- int[] sh=(int[]) shifts.get(i);
- if (sh!=null)
- inverse.shifts.add(new int[] {sh[0], -sh[1]});
- }
- }
- return inverse;
- }
-
- /**
- * parse a 1d map of position 1<i<n to L<pos[i]<N
- * such as that returned from SequenceI.gapMap()
- * @param gapMap
- * @return
- */
- public static ShiftList parseMap(int[] gapMap) {
- ShiftList shiftList = null;
- if (gapMap!=null && gapMap.length>0) {
- shiftList=new ShiftList();
-
- for (int i=0,p=0; i<gapMap.length; p++,i++) {
- if (p!=gapMap[i]) {
- shiftList.addShift(p, gapMap[i]-p);
- p=gapMap[i];
- }
- }
- }
- return shiftList;
- }
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)\r
+ * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
+ * \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE. See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+package jalview.util;\r
+\r
+import java.util.*;\r
+\r
+/**\r
+ * ShiftList Simple way of mapping a linear series to a new linear range with\r
+ * new points introduced. Use at your own risk! Now growing to be used for\r
+ * interval ranges (position, offset) storing deletions/insertions\r
+ */\r
+public class ShiftList\r
+{\r
+ public Vector shifts;\r
+\r
+ public ShiftList()\r
+ {\r
+ shifts = new Vector();\r
+ }\r
+\r
+ /**\r
+ * addShift\r
+ * \r
+ * @param pos\r
+ * start position for shift (in original reference frame)\r
+ * @param shift\r
+ * length of shift\r
+ */\r
+ public void addShift(int pos, int shift)\r
+ {\r
+ int sidx = 0;\r
+ int[] rshift = null;\r
+ while (sidx < shifts.size()\r
+ && (rshift = (int[]) shifts.elementAt(sidx))[0] < pos)\r
+ {\r
+ sidx++;\r
+ }\r
+ if (sidx == shifts.size())\r
+ {\r
+ shifts.insertElementAt(new int[]\r
+ { pos, shift }, sidx);\r
+ }\r
+ else\r
+ {\r
+ rshift[1] += shift;\r
+ }\r
+ }\r
+\r
+ /**\r
+ * shift\r
+ * \r
+ * @param pos\r
+ * int\r
+ * @return int shifted position\r
+ */\r
+ public int shift(int pos)\r
+ {\r
+ if (shifts.size() == 0)\r
+ {\r
+ return pos;\r
+ }\r
+ int shifted = pos;\r
+ int sidx = 0;\r
+ int rshift[];\r
+ while (sidx < shifts.size()\r
+ && (rshift = ((int[]) shifts.elementAt(sidx++)))[0] <= pos)\r
+ {\r
+ shifted += rshift[1];\r
+ }\r
+ return shifted;\r
+ }\r
+\r
+ /**\r
+ * clear all shifts\r
+ */\r
+ public void clear()\r
+ {\r
+ shifts.removeAllElements();\r
+ }\r
+\r
+ /**\r
+ * invert the shifts\r
+ * \r
+ * @return ShiftList with inverse shift operations\r
+ */\r
+ public ShiftList getInverse()\r
+ {\r
+ ShiftList inverse = new ShiftList();\r
+ if (shifts != null)\r
+ {\r
+ for (int i = 0, j = shifts.size(); i < j; i++)\r
+ {\r
+ int[] sh = (int[]) shifts.elementAt(i);\r
+ if (sh != null)\r
+ {\r
+ inverse.shifts.addElement(new int[]\r
+ { sh[0], -sh[1] });\r
+ }\r
+ }\r
+ }\r
+ return inverse;\r
+ }\r
+\r
+ /**\r
+ * parse a 1d map of position 1<i<n to L<pos[i]<N such as that returned from\r
+ * SequenceI.gapMap()\r
+ * \r
+ * @param gapMap\r
+ * @return shifts from map index to mapped position\r
+ */\r
+ public static ShiftList parseMap(int[] gapMap)\r
+ {\r
+ ShiftList shiftList = null;\r
+ if (gapMap != null && gapMap.length > 0)\r
+ {\r
+ shiftList = new ShiftList();\r
+ for (int i = 0, p = 0; i < gapMap.length; p++, i++)\r
+ {\r
+ if (p != gapMap[i])\r
+ {\r
+ shiftList.addShift(p, gapMap[i] - p);\r
+ p = gapMap[i];\r
+ }\r
+ }\r
+ }\r
+ return shiftList;\r
+ }\r
+}\r