1 Clazz.declarePackage ("jalview.util");
\r
2 Clazz.load (["java.util.ArrayList"], "jalview.util.MapList", ["java.lang.StringBuilder", "java.util.Arrays"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.fromShifts = null;
\r
5 this.toShifts = null;
\r
9 this.fromHighest = 0;
\r
12 Clazz.instantialize (this, arguments);
\r
13 }, jalview.util, "MapList");
\r
14 Clazz.prepareFields (c$, function () {
\r
15 this.fromShifts = new java.util.ArrayList ();
\r
16 this.toShifts = new java.util.ArrayList ();
\r
18 Clazz.overrideMethod (c$, "equals",
\r
20 if (o == null || !(Clazz.instanceOf (o, jalview.util.MapList))) {
\r
25 }if (obj.fromRatio != this.fromRatio || obj.toRatio != this.toRatio || obj.fromShifts == null || obj.toShifts == null) {
\r
27 }return java.util.Arrays.deepEquals (this.fromShifts.toArray (), obj.fromShifts.toArray ()) && java.util.Arrays.deepEquals (this.toShifts.toArray (), obj.toShifts.toArray ());
\r
29 Clazz.defineMethod (c$, "getFromRanges",
\r
31 return this.fromShifts;
\r
33 Clazz.defineMethod (c$, "getToRanges",
\r
35 return this.toShifts;
\r
37 c$.getRanges = Clazz.defineMethod (c$, "getRanges",
\r
39 var rnges = Clazz.newIntArray (2 * shifts.size (), 0);
\r
41 for (var r, $r = shifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
\r
46 }, "java.util.List");
\r
47 Clazz.defineMethod (c$, "getFromRatio",
\r
49 return this.fromRatio;
\r
51 Clazz.defineMethod (c$, "getToRatio",
\r
53 return this.toRatio;
\r
55 Clazz.defineMethod (c$, "getFromLowest",
\r
57 return this.fromLowest;
\r
59 Clazz.defineMethod (c$, "getFromHighest",
\r
61 return this.fromHighest;
\r
63 Clazz.defineMethod (c$, "getToLowest",
\r
65 return this.toLowest;
\r
67 Clazz.defineMethod (c$, "getToHighest",
\r
69 return this.toHighest;
\r
71 Clazz.makeConstructor (c$,
\r
72 function (from, to, fromRatio, toRatio) {
\r
73 this.fromRatio = fromRatio;
\r
74 this.toRatio = toRatio;
\r
75 this.fromLowest = from[0];
\r
76 this.fromHighest = from[1];
\r
77 for (var i = 0; i < from.length; i += 2) {
\r
78 this.fromLowest = Math.min (this.fromLowest, from[i]);
\r
79 this.fromHighest = Math.max (this.fromHighest, from[i + 1]);
\r
80 this.fromShifts.add ( Clazz.newIntArray (-1, [from[i], from[i + 1]]));
\r
82 this.toLowest = to[0];
\r
83 this.toHighest = to[1];
\r
84 for (var i = 0; i < to.length; i += 2) {
\r
85 this.toLowest = Math.min (this.toLowest, to[i]);
\r
86 this.toHighest = Math.max (this.toHighest, to[i + 1]);
\r
87 this.toShifts.add ( Clazz.newIntArray (-1, [to[i], to[i + 1]]));
\r
90 Clazz.makeConstructor (c$,
\r
92 this.fromLowest = map.fromLowest;
\r
93 this.fromHighest = map.fromHighest;
\r
94 this.toLowest = map.toLowest;
\r
95 this.toHighest = map.toHighest;
\r
96 this.fromRatio = map.fromRatio;
\r
97 this.toRatio = map.toRatio;
\r
98 if (map.fromShifts != null) {
\r
99 for (var r, $r = map.fromShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
\r
100 this.fromShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
\r
102 }if (map.toShifts != null) {
\r
103 for (var r, $r = map.toShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
\r
104 this.toShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
\r
106 }}, "jalview.util.MapList");
\r
107 Clazz.makeConstructor (c$,
\r
108 function (fromRange, toRange, fromRatio, toRatio) {
\r
109 this.fromShifts = fromRange;
\r
110 this.toShifts = toRange;
\r
111 this.fromRatio = fromRatio;
\r
112 this.toRatio = toRatio;
\r
113 this.fromLowest = 2147483647;
\r
114 this.fromHighest = 0;
\r
115 for (var range, $range = fromRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
\r
116 this.fromLowest = Math.min (this.fromLowest, range[0]);
\r
117 this.fromHighest = Math.max (this.fromHighest, range[1]);
\r
119 this.toLowest = 2147483647;
\r
120 this.toHighest = 0;
\r
121 for (var range, $range = toRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
\r
122 this.toLowest = Math.min (this.toLowest, range[0]);
\r
123 this.toHighest = Math.max (this.toHighest, range[1]);
\r
125 }, "java.util.List,java.util.List,~N,~N");
\r
126 Clazz.defineMethod (c$, "makeFromMap",
\r
128 return this.posMap (this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
\r
130 Clazz.defineMethod (c$, "makeToMap",
\r
132 return this.posMap (this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
\r
134 Clazz.defineMethod (c$, "posMap",
\r
135 ($fz = function (shiftTo, ratio, shiftFrom, toRatio) {
\r
137 var ivSize = shiftTo.size ();
\r
138 if (iv >= ivSize) {
\r
140 }var intv = shiftTo.get (iv++);
\r
141 var from = intv[0];
\r
146 }while (iv < ivSize) {
\r
147 intv = shiftTo.get (iv++);
\r
148 if (intv[0] < from) {
\r
150 }if (intv[1] < from) {
\r
152 }if (intv[0] > to) {
\r
154 }if (intv[1] > to) {
\r
159 var mp = Clazz.newIntArray (to - from + 2, 0);
\r
160 for (var i = 0; i < mp.length; i++) {
\r
161 var m = jalview.util.MapList.shift (i + from, shiftTo, ratio, shiftFrom, toRatio);
\r
172 var map = Clazz.newArray (-1, [ Clazz.newIntArray (-1, [from, to, tF, tT]), Clazz.newIntArray (to - from + 2, 0)]);
\r
175 for (var i = 0; i < mp.length; i++) {
\r
176 if (mp[i] != null) {
\r
177 map[1][i] = mp[i][0] - tF;
\r
182 }, $fz.isPrivate = true, $fz), "java.util.List,~N,java.util.List,~N");
\r
183 Clazz.defineMethod (c$, "shiftFrom",
\r
185 return jalview.util.MapList.shift (pos, this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
\r
187 Clazz.defineMethod (c$, "shiftTo",
\r
189 return jalview.util.MapList.shift (pos, this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
\r
191 c$.shift = Clazz.defineMethod (c$, "shift",
\r
192 function (pos, shiftTo, fromRatio, shiftFrom, toRatio) {
\r
193 var fromCount = jalview.util.MapList.countPos (shiftTo, pos);
\r
194 if (fromCount == null) {
\r
196 }var fromRemainder = (fromCount[0] - 1) % fromRatio;
\r
197 var toCount = 1 + ((Clazz.doubleToInt ((fromCount[0] - 1) / fromRatio)) * toRatio);
\r
198 var toPos = jalview.util.MapList.countToPos (shiftFrom, toCount);
\r
199 if (toPos == null) {
\r
201 }return Clazz.newIntArray (-1, [toPos[0], fromRemainder, toPos[1]]);
\r
202 }, "~N,java.util.List,~N,java.util.List,~N");
\r
203 c$.countPos = Clazz.defineMethod (c$, "countPos",
\r
204 function (shiftTo, pos) {
\r
208 var ivSize = shiftTo.size ();
\r
209 while (iv < ivSize) {
\r
210 intv = shiftTo.get (iv++);
\r
211 if (intv[0] <= intv[1]) {
\r
212 if (pos >= intv[0] && pos <= intv[1]) {
\r
213 return Clazz.newIntArray (-1, [count + pos - intv[0] + 1, 1]);
\r
215 count += intv[1] - intv[0] + 1;
\r
217 if (pos >= intv[1] && pos <= intv[0]) {
\r
218 return Clazz.newIntArray (-1, [count + intv[0] - pos + 1, -1]);
\r
220 count += intv[0] - intv[1] + 1;
\r
223 }, "java.util.List,~N");
\r
224 c$.countToPos = Clazz.defineMethod (c$, "countToPos",
\r
225 function (shiftFrom, pos) {
\r
229 var ivSize = shiftFrom.size ();
\r
230 var intv = Clazz.newIntArray (-1, [0, 0]);
\r
231 while (iv < ivSize) {
\r
232 intv = shiftFrom.get (iv++);
\r
233 diff = intv[1] - intv[0];
\r
235 if (pos <= count + 1 + diff) {
\r
236 return Clazz.newIntArray (-1, [pos - count - 1 + intv[0], 1]);
\r
240 if (pos <= count + 1 - diff) {
\r
241 return Clazz.newIntArray (-1, [intv[0] - (pos - count - 1), -1]);
\r
246 }, "java.util.List,~N");
\r
247 Clazz.defineMethod (c$, "locateInFrom",
\r
248 function (start, end) {
\r
249 var fromStart = this.shiftTo (start);
\r
250 var fromEnd = this.shiftTo (end);
\r
251 return jalview.util.MapList.getIntervals (this.fromShifts, fromStart, fromEnd, this.fromRatio);
\r
253 Clazz.defineMethod (c$, "locateInTo",
\r
254 function (start, end) {
\r
255 var toStart = this.shiftFrom (start);
\r
256 var toEnd = this.shiftFrom (end);
\r
257 return jalview.util.MapList.getIntervals (this.toShifts, toStart, toEnd, this.toRatio);
\r
259 c$.getIntervals = Clazz.defineMethod (c$, "getIntervals",
\r
260 function (shiftFrom, fromStart, fromEnd, fromRatio2) {
\r
261 if (fromStart == null || fromEnd == null) {
\r
265 startpos = fromStart[0];
\r
266 endpos = fromEnd[0];
\r
267 var endindx = (fromRatio2 - 1);
\r
269 var intvSize = shiftFrom.size ();
\r
275 while (intv < intvSize && (fs == -1 || fe == -1)) {
\r
276 iv = shiftFrom.get (intv++);
\r
280 }if (iv[0] <= iv[1]) {
\r
281 if (fs == -1 && startpos >= iv[0] && startpos <= iv[1]) {
\r
283 }if (endpos >= iv[0] && endpos <= iv[1]) {
\r
287 if (endpos + endindx <= iv[1]) {
\r
289 endpos = endpos + endindx;
\r
291 endindx -= iv[1] - endpos;
\r
293 if (fs == -1 && startpos <= iv[0] && startpos >= iv[1]) {
\r
295 }if (endpos <= iv[0] && endpos >= iv[1]) {
\r
299 if (endpos - endindx >= iv[1]) {
\r
301 endpos = endpos - endindx;
\r
303 endindx -= endpos - iv[1];
\r
306 if (fs == fe && fe == -1) {
\r
308 }var ranges = new java.util.ArrayList ();
\r
312 iv = shiftFrom.get (intv++);
\r
313 iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
\r
318 iv = shiftFrom.get (intv++);
\r
319 iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
\r
326 i = shiftFrom.size () - 1;
\r
330 iv = shiftFrom.get (i);
\r
331 iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
\r
334 }while (--i != fe) {
\r
336 iv = shiftFrom.get (i);
\r
337 iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
\r
343 if (ranges != null && ranges.size () > 0) {
\r
344 range = Clazz.newIntArray (ranges.size () * 2, 0);
\r
346 intvSize = ranges.size ();
\r
348 while (intv < intvSize) {
\r
349 iv = ranges.get (intv);
\r
350 range[i++] = iv[0];
\r
351 range[i++] = iv[1];
\r
352 ranges.set (intv++, null);
\r
355 }, "java.util.List,~A,~A,~N");
\r
356 Clazz.defineMethod (c$, "getToPosition",
\r
358 var mp = this.shiftTo (mpos);
\r
363 Clazz.defineMethod (c$, "getToWord",
\r
365 var mp = this.shiftTo (mpos);
\r
367 return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getFromRatio () - 1)]);
\r
370 Clazz.defineMethod (c$, "getMappedPosition",
\r
372 var mp = this.shiftFrom (pos);
\r
377 Clazz.defineMethod (c$, "getMappedWord",
\r
379 var mp = this.shiftFrom (pos);
\r
381 return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getToRatio () - 1)]);
\r
384 Clazz.defineMethod (c$, "getInverse",
\r
386 return new jalview.util.MapList (this.getToRanges (), this.getFromRanges (), this.getToRatio (), this.getFromRatio ());
\r
388 Clazz.defineMethod (c$, "containsEither",
\r
389 function (local, map) {
\r
391 return ((this.getFromLowest () >= map.getFromLowest () && this.getFromHighest () <= map.getFromHighest ()) || (this.getFromLowest () <= map.getFromLowest () && this.getFromHighest () >= map.getFromHighest ()));
\r
393 return ((this.getToLowest () >= map.getToLowest () && this.getToHighest () <= map.getToHighest ()) || (this.getToLowest () <= map.getToLowest () && this.getToHighest () >= map.getToHighest ()));
\r
394 }}, "~B,jalview.util.MapList");
\r
395 Clazz.overrideMethod (c$, "toString",
\r
397 var sb = new StringBuilder (64);
\r
398 sb.append ("From (").append (this.fromRatio).append (":").append (this.toRatio).append (") [");
\r
399 for (var shift, $shift = this.fromShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
\r
400 sb.append (" ").append (java.util.Arrays.toString (shift));
\r
402 sb.append (" ] To [");
\r
403 for (var shift, $shift = this.toShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
\r
404 sb.append (" ").append (java.util.Arrays.toString (shift));
\r
407 return sb.toString ();
\r