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
6 Clazz.instantialize(this,arguments);
\r
7 },java.util,"ArrayList",java.util.AbstractList,[java.util.List,Cloneable,java.io.Serializable,java.util.RandomAccess]);
\r
9 Clazz.overrideConstructor(c$,
\r
14 Clazz.defineMethod(c$, "setup",
\r
16 //Clazz.superConstructor(this,java.util.ArrayList,[]);
\r
17 this.firstIndex=this.lastIndex=0;
\r
19 this.array=this.newElementArray(capacity);
\r
21 if(Clazz.instanceOf(e,NegativeArraySizeException)){
\r
22 throw new IllegalArgumentException();
\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
40 Clazz.defineMethod(c$,"newElementArray",
\r
41 ($fz=function(size){
\r
42 return new Array(size);
\r
43 },$fz.isPrivate=true,$fz),"~N");
\r
45 Clazz.overrideMethod(c$,"add",
\r
46 function(location,object){
\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
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
60 var index=location+this.firstIndex;
\r
61 System.arraycopy(this.array,index,this.array,index+1,size-location);
\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
71 }this.array[this.lastIndex++]=object;
\r
73 throw new IndexOutOfBoundsException();
\r
77 Clazz.overrideMethod(c$,"add1",
\r
79 if(this.lastIndex==this.array.length){
\r
81 }this.array[this.lastIndex++]=object;
\r
86 /* BH disallow addAll(int,List)
\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
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
104 }System.arraycopy(this.array,this.firstIndex,this.array,newFirst,location);
\r
105 this.firstIndex=newFirst;
\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
118 var it=collection.iterator();
\r
119 var index=location+this.firstIndex;
\r
120 var end=index+growSize;
\r
122 this.array[index++]=it.next();
\r
127 },"~N,java.util.Collection");
\r
131 Clazz.overrideMethod(c$,"addAll",
\r
132 function(collection){
\r
133 var growSize=collection.size();
\r
135 if(this.lastIndex>this.array.length-growSize){
\r
136 this.growAtEnd(growSize);
\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
146 },"java.util.Collection");
\r
148 Clazz.overrideMethod(c$,"clear",
\r
150 if(this.firstIndex!=this.lastIndex){
\r
151 this.fill(this.firstIndex,this.lastIndex);
\r
152 this.firstIndex=this.lastIndex=0;
\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
161 Clazz.defineMethod(c$,"clone",
\r
164 var newList=Clazz.superCall(this,java.util.ArrayList,"clone",[]);
\r
165 newList.array=this.array.clone();
\r
168 if(Clazz.instanceOf(e,CloneNotSupportedException)){
\r
175 Clazz.overrideMethod(c$,"contains",
\r
178 for(var i=this.firstIndex;i<this.lastIndex;i++){
\r
179 if(object.equals(this.array[i])){
\r
183 for(var i=this.firstIndex;i<this.lastIndex;i++){
\r
184 if(this.array[i]==null){
\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
195 this.growAtEnd(minimumCapacity-this.array.length);
\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
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
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
216 this.lastIndex=newLast;
\r
218 var increment=Math.floor(size/2);
\r
219 if(required>increment){
\r
220 increment=required;
\r
225 var newArray=this.newElementArray(size+increment);
\r
227 System.arraycopy(this.array,this.firstIndex,newArray,this.firstIndex,size);
\r
229 this.array=newArray;
\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
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
245 var increment=Math.floor(size/2);
\r
246 if(required>increment){
\r
247 increment=required;
\r
250 }var newArray=this.newElementArray(size+increment);
\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
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
273 System.arraycopy(this.array,this.firstIndex,newArray,0,location);
\r
274 System.arraycopy(this.array,location,newArray,location+required,size-location);
\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
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
287 for(var i=this.firstIndex;i<this.lastIndex;i++){
\r
288 if(this.array[i]==null){
\r
289 return i-this.firstIndex;
\r
293 Clazz.overrideMethod(c$,"isEmpty",
\r
295 return this.lastIndex==this.firstIndex;
\r
297 Clazz.overrideMethod(c$,"lastIndexOf",
\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
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
311 Clazz.overrideMethod(c$,"remove",
\r
312 function(location){
\r
314 var size=this.size();
\r
315 if(0<=location&&location<size){
\r
316 if(location==size-1){
\r
317 result=this.array[--this.lastIndex];
\r
318 this.array[this.lastIndex]=null;
\r
319 }else if(location==0){
\r
320 result=this.array[this.firstIndex];
\r
321 this.array[this.firstIndex++]=null;
\r
323 var elementIndex=this.firstIndex+location;
\r
324 result=this.array[elementIndex];
\r
325 if(location<Math.floor(size/2)){
\r
326 System.arraycopy(this.array,this.firstIndex,this.array,this.firstIndex+1,location);
\r
327 this.array[this.firstIndex++]=null;
\r
329 System.arraycopy(this.array,elementIndex+1,this.array,elementIndex,size-location-1);
\r
330 this.array[--this.lastIndex]=null;
\r
332 throw new IndexOutOfBoundsException();
\r
337 Clazz.defineMethod(c$, "removeObject", function(o) {
\r
338 var i = this.indexOf(o);
\r
339 if (i < 0)return null;
\r
340 return this.remove(i);
\r
343 Clazz.overrideMethod(c$,"removeRange",
\r
344 function(start,end){
\r
345 if(start>=0&&start<=end&&end<=this.size()){
\r
348 }var size=this.size();
\r
350 this.fill(this.firstIndex+start,this.lastIndex);
\r
351 this.lastIndex=this.firstIndex+start;
\r
352 }else if(start==0){
\r
353 this.fill(this.firstIndex,this.firstIndex+end);
\r
354 this.firstIndex+=end;
\r
356 System.arraycopy(this.array,this.firstIndex+end,this.array,this.firstIndex+start,size-end);
\r
357 var newLast=this.lastIndex+start-end;
\r
358 this.fill(newLast,this.lastIndex);
\r
359 this.lastIndex=newLast;
\r
362 throw new IndexOutOfBoundsException();
\r
364 Clazz.overrideMethod(c$,"set",
\r
365 function(location,object){
\r
366 if(0<=location&&location<this.size()){
\r
367 var result=this.array[this.firstIndex+location];
\r
368 this.array[this.firstIndex+location]=object;
\r
370 }throw new IndexOutOfBoundsException();
\r
372 Clazz.overrideMethod(c$,"size",
\r
374 return this.lastIndex-this.firstIndex;
\r
377 Clazz.defineMethod(c$,"toArray",
\r
379 var size=this.size();
\r
380 var result=new Array(size);
\r
381 System.arraycopy(this.array,this.firstIndex,result,0,size);
\r
386 Clazz.overrideMethod(c$,"toArray",
\r
387 function(contents){
\r
388 var size=this.size();
\r
389 if(!contents || size>contents.length)
\r
390 contents= new Array(size);
\r
391 System.arraycopy(this.array,this.firstIndex,contents,0,size);
\r
392 if(size<contents.length){
\r
393 contents[size]=null;
\r
396 Clazz.defineMethod(c$,"trimToSize",
\r
398 var size=this.size();
\r
399 var newArray=this.newElementArray(size);
\r
400 System.arraycopy(this.array,this.firstIndex,newArray,0,size);
\r
401 this.array=newArray;
\r
403 this.lastIndex=this.array.length;
\r