JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / util / ShiftList.js
1 Clazz.declarePackage ("jalview.util");\r
2 Clazz.load (null, "jalview.util.ShiftList", ["java.util.ArrayList"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.shifts = null;\r
5 Clazz.instantialize (this, arguments);\r
6 }, jalview.util, "ShiftList");\r
7 Clazz.makeConstructor (c$, \r
8 function () {\r
9 this.shifts =  new java.util.ArrayList ();\r
10 });\r
11 Clazz.defineMethod (c$, "addShift", \r
12 function (pos, shift) {\r
13 {\r
14 var sidx = 0;\r
15 var rshift = null;\r
16 while (sidx < this.shifts.size () && (rshift = this.shifts.get (sidx))[0] < pos) {\r
17 sidx++;\r
18 }\r
19 if (sidx == this.shifts.size ()) {\r
20 this.shifts.add (sidx,  Clazz.newIntArray (-1, [pos, shift]));\r
21 } else {\r
22 rshift[1] += shift;\r
23 }}}, "~N,~N");\r
24 Clazz.defineMethod (c$, "shift", \r
25 function (pos) {\r
26 if (this.shifts.size () == 0) {\r
27 return pos;\r
28 }var shifted = pos;\r
29 var sidx = 0;\r
30 var rshift;\r
31 while (sidx < this.shifts.size () && (rshift = (this.shifts.get (sidx++)))[0] <= pos) {\r
32 shifted += rshift[1];\r
33 }\r
34 return shifted;\r
35 }, "~N");\r
36 Clazz.defineMethod (c$, "clear", \r
37 function () {\r
38 this.shifts.clear ();\r
39 });\r
40 Clazz.defineMethod (c$, "getInverse", \r
41 function () {\r
42 var inverse =  new jalview.util.ShiftList ();\r
43 {\r
44 if (this.shifts != null) {\r
45 for (var sh, $sh = this.shifts.iterator (); $sh.hasNext () && ((sh = $sh.next ()) || true);) {\r
46 if (sh != null) {\r
47 inverse.shifts.add ( Clazz.newIntArray (-1, [sh[0], -sh[1]]));\r
48 }}\r
49 }}return inverse;\r
50 });\r
51 c$.parseMap = Clazz.defineMethod (c$, "parseMap", \r
52 function (gapMap) {\r
53 var shiftList = null;\r
54 if (gapMap != null && gapMap.length > 0) {\r
55 shiftList =  new jalview.util.ShiftList ();\r
56 for (var i = 0, p = 0; i < gapMap.length; p++, i++) {\r
57 if (p != gapMap[i]) {\r
58 shiftList.addShift (p, gapMap[i] - p);\r
59 p = gapMap[i];\r
60 }}\r
61 }return shiftList;\r
62 }, "~A");\r
63 Clazz.defineMethod (c$, "getShifts", \r
64 function () {\r
65 return this.shifts;\r
66 });\r
67 });\r