fixed multiple shifts bug.
[jalview.git] / src / jalview / util / ShiftList.java
1 package jalview.util;\r
2 \r
3 import java.util.*;\r
4 \r
5 /**\r
6  * ShiftList\r
7  * Simple way of mapping a linear series to a new linear range with new points introduced.\r
8  * Use at your own risk!\r
9  * <p>Title: ShiftList</p>\r
10  *\r
11  * <p>Description: </p>\r
12  *\r
13  * <p>Copyright: Copyright (c) 2004</p>\r
14  *\r
15  * <p>Company: Dundee University</p>\r
16  *\r
17  * @author not attributable\r
18  * @version 1.0\r
19  */\r
20 public class ShiftList\r
21 {\r
22     Vector shifts;\r
23   public ShiftList()\r
24   {\r
25     shifts = new Vector();\r
26   }\r
27 \r
28   /**\r
29    * addShift\r
30    * @param pos start position for shift (in original reference frame)\r
31    * @param shift length of shift\r
32    */\r
33   public void addShift(int pos, int shift)\r
34   {\r
35     int sidx = 0;\r
36     int[] rshift=null;\r
37     while (sidx<shifts.size() && (rshift=(int[]) shifts.elementAt(sidx))[0]<pos)\r
38       sidx++;\r
39     if (sidx==shifts.size())\r
40       shifts.insertElementAt(new int[] { pos, shift}, sidx);\r
41     else\r
42       rshift[1]+=shift;\r
43   }\r
44 \r
45   /**\r
46    * shift\r
47    *\r
48    * @param pos int\r
49    * @return int shifted position\r
50    */\r
51   public int shift(int pos)\r
52   {\r
53     if (shifts.size()==0)\r
54       return pos;\r
55     int shifted=pos;\r
56     int sidx=0;\r
57     int rshift[];\r
58     while (sidx<shifts.size()\r
59            &&\r
60            (rshift=((int[]) shifts.elementAt(sidx++)))[0]<=pos) {\r
61       shifted += rshift[1];\r
62     }\r
63     return shifted;\r
64   }\r
65 \r
66   /**\r
67    * clear all shifts\r
68    */\r
69   public void clear()\r
70   {\r
71     shifts.removeAllElements();\r
72   }\r
73 \r
74 }\r