JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / util / ArrayList.js
1 Clazz.load(["java.util.AbstractList","$.List","$.RandomAccess"],"java.util.ArrayList",["java.lang.IllegalArgumentException","$.IndexOutOfBoundsException","java.lang.reflect.Array","java.util.Arrays"],function(){\r
2 c$=Clazz.decorateAsClass(function(){\r
3 this.firstIndex=0;\r
4 this.lastIndex=0;\r
5 this.array=null;\r
6 Clazz.instantialize(this,arguments);\r
7 },java.util,"ArrayList",java.util.AbstractList,[java.util.List,Cloneable,java.io.Serializable,java.util.RandomAccess]);\r
8 \r
9 Clazz.overrideConstructor(c$,\r
10 function(){\r
11 this.setup(0);\r
12 });\r
13 \r
14 Clazz.defineMethod(c$, "setup",\r
15 function(capacity){\r
16 //Clazz.superConstructor(this,java.util.ArrayList,[]);\r
17 this.firstIndex=this.lastIndex=0;\r
18 try{\r
19 this.array=this.newElementArray(capacity);\r
20 }catch(e){\r
21 if(Clazz.instanceOf(e,NegativeArraySizeException)){\r
22 throw new IllegalArgumentException();\r
23 }else{\r
24 throw e;\r
25 }\r
26 }\r
27 },"~N");\r
28 /*\r
29 Clazz.makeConstructor(c$,\r
30 function(collection){\r
31 Clazz.superConstructor(this,java.util.ArrayList,[]);\r
32 var size=collection.size();\r
33 this.firstIndex=this.lastIndex=0;\r
34 this.array=this.newElementArray(size+(Math.floor(size/10)));\r
35 this.addAll(collection);\r
36 },"java.util.Collection");\r
37 \r
38 */\r
39 \r
40 Clazz.defineMethod(c$,"newElementArray",\r
41 ($fz=function(size){\r
42 return new Array(size);\r
43 },$fz.isPrivate=true,$fz),"~N");\r
44 \r
45 Clazz.overrideMethod(c$,"add",\r
46 function(location,object){\r
47 \r
48 if (arguments.length == 1) {\r
49         // coming from Java methods, e.g. Collections.list()\r
50         // location is actually the object\r
51         return this.add1(location);\r
52 }\r
53 var size=this.size();\r
54 if(0<location&&location<size){\r
55 if(this.firstIndex==0&&this.lastIndex==this.array.length){\r
56 this.growForInsert(location,1);\r
57 }else if((location<Math.floor(size/2)&&this.firstIndex>0)||this.lastIndex==this.array.length){\r
58 System.arraycopy(this.array,this.firstIndex,this.array,--this.firstIndex,location);\r
59 }else{\r
60 var index=location+this.firstIndex;\r
61 System.arraycopy(this.array,index,this.array,index+1,size-location);\r
62 this.lastIndex++;\r
63 }this.array[location+this.firstIndex]=object;\r
64 }else if(location==0){\r
65 if(this.firstIndex==0){\r
66 this.growAtFront(1);\r
67 }this.array[--this.firstIndex]=object;\r
68 }else if(location==size){\r
69 if(this.lastIndex==this.array.length){\r
70 this.growAtEnd(1);\r
71 }this.array[this.lastIndex++]=object;\r
72 }else{\r
73 throw new IndexOutOfBoundsException();\r
74 }this.modCount++;\r
75 },"~N,~O");\r
76 \r
77 Clazz.overrideMethod(c$,"add1",\r
78 function(object){\r
79 if(this.lastIndex==this.array.length){\r
80 this.growAtEnd(1);\r
81 }this.array[this.lastIndex++]=object;\r
82 this.modCount++;\r
83 return true;\r
84 },"~O");\r
85 \r
86 /* BH disallow addAll(int,List)\r
87  * \r
88 Clazz.defineMethod(c$,"addAll",\r
89 function(location,collection){\r
90 var size=this.size();\r
91 if(location<0||location>size){\r
92 throw new IndexOutOfBoundsException();\r
93 }var growSize=collection.size();\r
94 if(0<location&&location<size){\r
95 if(this.array.length-size<growSize){\r
96 this.growForInsert(location,growSize);\r
97 }else if((location<Math.floor(size/2)&&this.firstIndex>0)||this.lastIndex>this.array.length-growSize){\r
98 var newFirst=this.firstIndex-growSize;\r
99 if(newFirst<0){\r
100 var index=location+this.firstIndex;\r
101 System.arraycopy(this.array,index,this.array,index-newFirst,size-location);\r
102 this.lastIndex-=newFirst;\r
103 newFirst=0;\r
104 }System.arraycopy(this.array,this.firstIndex,this.array,newFirst,location);\r
105 this.firstIndex=newFirst;\r
106 }else{\r
107 var index=location+this.firstIndex;\r
108 System.arraycopy(this.array,index,this.array,index+growSize,size-location);\r
109 this.lastIndex+=growSize;\r
110 }}else if(location==0){\r
111 this.growAtFront(growSize);\r
112 this.firstIndex-=growSize;\r
113 }else if(location==size){\r
114 if(this.lastIndex>this.array.length-growSize){\r
115 this.growAtEnd(growSize);\r
116 }this.lastIndex+=growSize;\r
117 }if(growSize>0){\r
118 var it=collection.iterator();\r
119 var index=location+this.firstIndex;\r
120 var end=index+growSize;\r
121 while(index<end){\r
122 this.array[index++]=it.next();\r
123 }\r
124 this.modCount++;\r
125 return true;\r
126 }return false;\r
127 },"~N,java.util.Collection");\r
128 \r
129  */\r
130 \r
131 Clazz.overrideMethod(c$,"addAll",\r
132 function(collection){\r
133 var growSize=collection.size();\r
134 if(growSize>0){\r
135         if(this.lastIndex>this.array.length-growSize){\r
136                 this.growAtEnd(growSize);\r
137 }\r
138 var it=collection.iterator();\r
139 var end=this.lastIndex+growSize;\r
140 while(this.lastIndex<end){\r
141         this.array[this.lastIndex++]=it.next();\r
142 }\r
143 this.modCount++;\r
144 return true;\r
145 }return false;\r
146 },"java.util.Collection");\r
147 \r
148 Clazz.overrideMethod(c$,"clear",\r
149 function(){\r
150 if(this.firstIndex!=this.lastIndex){\r
151 this.fill(this.firstIndex,this.lastIndex);\r
152 this.firstIndex=this.lastIndex=0;\r
153 this.modCount++;\r
154 }});\r
155 \r
156 Clazz.defineMethod(c$,"fill", function(i1, i2) { // BH\r
157 for (var i = i2; --i >= i1;)\r
158 this.array[i] = null;\r
159 },"~N,~N");\r
160 \r
161 Clazz.defineMethod(c$,"clone",\r
162 function(){\r
163 try{\r
164 var newList=Clazz.superCall(this,java.util.ArrayList,"clone",[]);\r
165 newList.array=this.array.clone();\r
166 return newList;\r
167 }catch(e){\r
168 if(Clazz.instanceOf(e,CloneNotSupportedException)){\r
169 return null;\r
170 }else{\r
171 throw e;\r
172 }\r
173 }\r
174 });\r
175 Clazz.overrideMethod(c$,"contains",\r
176 function(object){\r
177 if(object!=null){\r
178 for(var i=this.firstIndex;i<this.lastIndex;i++){\r
179 if(object.equals(this.array[i])){\r
180 return true;\r
181 }}\r
182 }else{\r
183 for(var i=this.firstIndex;i<this.lastIndex;i++){\r
184 if(this.array[i]==null){\r
185 return true;\r
186 }}\r
187 }return false;\r
188 },"~O");\r
189 Clazz.defineMethod(c$,"ensureCapacity",\r
190 function(minimumCapacity){\r
191 if(this.array.length<minimumCapacity){\r
192 if(this.firstIndex>0){\r
193 this.growAtFront(minimumCapacity-this.array.length);\r
194 }else{\r
195 this.growAtEnd(minimumCapacity-this.array.length);\r
196 }}},"~N");\r
197 Clazz.overrideMethod(c$,"get",\r
198 function(location){\r
199 if(0<=location&&location<this.size()){\r
200 return this.array[this.firstIndex+location];\r
201 }throw new IndexOutOfBoundsException();\r
202 },"~N");\r
203 \r
204 \r
205 Clazz.defineMethod(c$,"growAtEnd",\r
206 ($fz=function(required){\r
207 var size=this.size();\r
208 if(this.firstIndex>=required-(this.array.length-this.lastIndex)){\r
209         var newLast=this.lastIndex-this.firstIndex;\r
210         if(size>0){\r
211                 System.arraycopy(this.array,this.firstIndex,this.array,0,size);\r
212                 var start=newLast<this.firstIndex?this.firstIndex:newLast;\r
213                 this.fill(start,this.array.length);\r
214         }\r
215         this.firstIndex=0;\r
216         this.lastIndex=newLast;\r
217 }else{\r
218         var increment=Math.floor(size/2);\r
219         if(required>increment){\r
220                 increment=required;\r
221         }\r
222         if(increment<12){\r
223                 increment=12;\r
224         }\r
225         var newArray=this.newElementArray(size+increment);\r
226         if(size>0){\r
227                 System.arraycopy(this.array,this.firstIndex,newArray,this.firstIndex,size);\r
228         }\r
229         this.array=newArray;\r
230 }\r
231 \r
232 },$fz.isPrivate=true,$fz),"~N");\r
233 Clazz.defineMethod(c$,"growAtFront",\r
234 ($fz=function(required){\r
235 var size=this.size();\r
236 if(this.array.length-this.lastIndex>=required){\r
237 var newFirst=this.array.length-size;\r
238 if(size>0){\r
239 System.arraycopy(this.array,this.firstIndex,this.array,newFirst,size);\r
240 var length=this.firstIndex+size>newFirst?newFirst:this.firstIndex+size;\r
241 this.fill(this.firstIndex,length);\r
242 }this.firstIndex=newFirst;\r
243 this.lastIndex=this.array.length;\r
244 }else{\r
245 var increment=Math.floor(size/2);\r
246 if(required>increment){\r
247 increment=required;\r
248 }if(increment<12){\r
249 increment=12;\r
250 }var newArray=this.newElementArray(size+increment);\r
251 if(size>0){\r
252 System.arraycopy(this.array,this.firstIndex,newArray,newArray.length-size,size);\r
253 }this.firstIndex=newArray.length-size;\r
254 this.lastIndex=newArray.length;\r
255 this.array=newArray;\r
256 }},$fz.isPrivate=true,$fz),"~N");\r
257 Clazz.defineMethod(c$,"growForInsert",\r
258 ($fz=function(location,required){\r
259 var size=this.size();\r
260 var increment=Math.floor(size/2);\r
261 if(required>increment){\r
262 increment=required;\r
263 }if(increment<12){\r
264 increment=12;\r
265 }var newArray=this.newElementArray(size+increment);\r
266 if(location<Math.floor(size/2)){\r
267 var newFirst=newArray.length-(size+required);\r
268 System.arraycopy(this.array,location,newArray,location+increment,size-location);\r
269 System.arraycopy(this.array,this.firstIndex,newArray,newFirst,location);\r
270 this.firstIndex=newFirst;\r
271 this.lastIndex=newArray.length;\r
272 }else{\r
273 System.arraycopy(this.array,this.firstIndex,newArray,0,location);\r
274 System.arraycopy(this.array,location,newArray,location+required,size-location);\r
275 this.firstIndex=0;\r
276 this.lastIndex+=required;\r
277 }this.array=newArray;\r
278 },$fz.isPrivate=true,$fz),"~N,~N");\r
279 Clazz.overrideMethod(c$,"indexOf",\r
280 function(object){\r
281 if(object!=null){\r
282 for(var i=this.firstIndex;i<this.lastIndex;i++){\r
283 if(object.equals(this.array[i])){\r
284 return i-this.firstIndex;\r
285 }}\r
286 }else{\r
287 for(var i=this.firstIndex;i<this.lastIndex;i++){\r
288 if(this.array[i]==null){\r
289 return i-this.firstIndex;\r
290 }}\r
291 }return-1;\r
292 },"~O");\r
293 Clazz.overrideMethod(c$,"isEmpty",\r
294 function(){\r
295 return this.lastIndex==this.firstIndex;\r
296 });\r
297 Clazz.overrideMethod(c$,"lastIndexOf",\r
298 function(object){\r
299 if(object!=null){\r
300 for(var i=this.lastIndex-1;i>=this.firstIndex;i--){\r
301 if(object.equals(this.array[i])){\r
302 return i-this.firstIndex;\r
303 }}\r
304 }else{\r
305 for(var i=this.lastIndex-1;i>=this.firstIndex;i--){\r
306 if(this.array[i]==null){\r
307 return i-this.firstIndex;\r
308 }}\r
309 }return-1;\r
310 },"~O");\r
311 Clazz.overrideMethod(c$,"remove",\r
312 function(location){\r
313 if (0+location != location) return this.removeObject(location)\r
314 var result;\r
315 var size=this.size();\r
316 if(0<=location&&location<size){\r
317 if(location==size-1){\r
318 result=this.array[--this.lastIndex];\r
319 this.array[this.lastIndex]=null;\r
320 }else if(location==0){\r
321 result=this.array[this.firstIndex];\r
322 this.array[this.firstIndex++]=null;\r
323 }else{\r
324 var elementIndex=this.firstIndex+location;\r
325 result=this.array[elementIndex];\r
326 if(location<Math.floor(size/2)){\r
327 System.arraycopy(this.array,this.firstIndex,this.array,this.firstIndex+1,location);\r
328 this.array[this.firstIndex++]=null;\r
329 }else{\r
330 System.arraycopy(this.array,elementIndex+1,this.array,elementIndex,size-location-1);\r
331 this.array[--this.lastIndex]=null;\r
332 }}}else{\r
333 throw new IndexOutOfBoundsException();\r
334 }this.modCount++;\r
335 return result;\r
336 },"~N"); \r
337 \r
338 Clazz.defineMethod(c$, "removeObject", function(o) {\r
339         var i = this.indexOf(o);\r
340         if (i < 0)return null;\r
341         return this.remove(i);\r
342 }, "~O");\r
343 \r
344 Clazz.overrideMethod(c$,"removeRange",\r
345 function(start,end){\r
346 if(start>=0&&start<=end&&end<=this.size()){\r
347 if(start==end){\r
348 return;\r
349 }var size=this.size();\r
350 if(end==size){\r
351         this.fill(this.firstIndex+start,this.lastIndex);\r
352 this.lastIndex=this.firstIndex+start;\r
353 }else if(start==0){\r
354         this.fill(this.firstIndex,this.firstIndex+end);\r
355 this.firstIndex+=end;\r
356 }else{\r
357 System.arraycopy(this.array,this.firstIndex+end,this.array,this.firstIndex+start,size-end);\r
358 var newLast=this.lastIndex+start-end;\r
359 this.fill(newLast,this.lastIndex);\r
360 this.lastIndex=newLast;\r
361 }this.modCount++;\r
362 }else{\r
363 throw new IndexOutOfBoundsException();\r
364 }},"~N,~N");\r
365 Clazz.overrideMethod(c$,"set",\r
366 function(location,object){\r
367 if(0<=location&&location<this.size()){\r
368 var result=this.array[this.firstIndex+location];\r
369 this.array[this.firstIndex+location]=object;\r
370 return result;\r
371 }throw new IndexOutOfBoundsException();\r
372 },"~N,~O");\r
373 Clazz.overrideMethod(c$,"size",\r
374 function(){\r
375 return this.lastIndex-this.firstIndex;\r
376 });\r
377 /*\r
378 Clazz.defineMethod(c$,"toArray",\r
379 function(){\r
380 var size=this.size();\r
381 var result=new Array(size);\r
382 System.arraycopy(this.array,this.firstIndex,result,0,size);\r
383 return result;\r
384 });\r
385 */\r
386 \r
387 Clazz.overrideMethod(c$,"toArray",\r
388 function(contents){\r
389 var size=this.size();\r
390 if(!contents || size>contents.length)\r
391         contents= new Array(size);\r
392 System.arraycopy(this.array,this.firstIndex,contents,0,size);\r
393 if(size<contents.length){\r
394 contents[size]=null;\r
395 }return contents;\r
396 },"~O");\r
397 Clazz.defineMethod(c$,"trimToSize",\r
398 function(){\r
399 var size=this.size();\r
400 var newArray=this.newElementArray(size);\r
401 System.arraycopy(this.array,this.firstIndex,newArray,0,size);\r
402 this.array=newArray;\r
403 this.firstIndex=0;\r
404 this.lastIndex=this.array.length;\r
405 });\r
406 });\r