1 Clazz.load(["java.util.AbstractList","$.List","$.RandomAccess"],"java.util.ArrayList",["java.lang.IllegalArgumentException","$.IndexOutOfBoundsException","java.lang.reflect.Array","java.util.Arrays"],function(){
2 c$=Clazz.decorateAsClass(function(){
6 Clazz.instantialize(this,arguments);
7 },java.util,"ArrayList",java.util.AbstractList,[java.util.List,Cloneable,java.io.Serializable,java.util.RandomAccess]);
9 Clazz.overrideConstructor(c$,
14 Clazz.defineMethod(c$, "setup",
16 //Clazz.superConstructor(this,java.util.ArrayList,[]);
17 this.firstIndex=this.lastIndex=0;
19 this.array=this.newElementArray(capacity);
21 if(Clazz.instanceOf(e,NegativeArraySizeException)){
22 throw new IllegalArgumentException();
29 Clazz.makeConstructor(c$,
31 Clazz.superConstructor(this,java.util.ArrayList,[]);
32 var size=collection.size();
33 this.firstIndex=this.lastIndex=0;
34 this.array=this.newElementArray(size+(Math.floor(size/10)));
35 this.addAll(collection);
36 },"java.util.Collection");
40 Clazz.defineMethod(c$,"newElementArray",
42 return new Array(size);
43 },$fz.isPrivate=true,$fz),"~N");
45 Clazz.overrideMethod(c$,"add",
46 function(location,object){
48 if (arguments.length == 1) {
49 // coming from Java methods, e.g. Collections.list()
50 // location is actually the object
51 return this.add1(location);
54 if(0<location&&location<size){
55 if(this.firstIndex==0&&this.lastIndex==this.array.length){
56 this.growForInsert(location,1);
57 }else if((location<Math.floor(size/2)&&this.firstIndex>0)||this.lastIndex==this.array.length){
58 System.arraycopy(this.array,this.firstIndex,this.array,--this.firstIndex,location);
60 var index=location+this.firstIndex;
61 System.arraycopy(this.array,index,this.array,index+1,size-location);
63 }this.array[location+this.firstIndex]=object;
64 }else if(location==0){
65 if(this.firstIndex==0){
67 }this.array[--this.firstIndex]=object;
68 }else if(location==size){
69 if(this.lastIndex==this.array.length){
71 }this.array[this.lastIndex++]=object;
73 throw new IndexOutOfBoundsException();
77 Clazz.overrideMethod(c$,"add1",
79 if(this.lastIndex==this.array.length){
81 }this.array[this.lastIndex++]=object;
86 /* BH disallow addAll(int,List)
88 Clazz.defineMethod(c$,"addAll",
89 function(location,collection){
91 if(location<0||location>size){
92 throw new IndexOutOfBoundsException();
93 }var growSize=collection.size();
94 if(0<location&&location<size){
95 if(this.array.length-size<growSize){
96 this.growForInsert(location,growSize);
97 }else if((location<Math.floor(size/2)&&this.firstIndex>0)||this.lastIndex>this.array.length-growSize){
98 var newFirst=this.firstIndex-growSize;
100 var index=location+this.firstIndex;
101 System.arraycopy(this.array,index,this.array,index-newFirst,size-location);
102 this.lastIndex-=newFirst;
104 }System.arraycopy(this.array,this.firstIndex,this.array,newFirst,location);
105 this.firstIndex=newFirst;
107 var index=location+this.firstIndex;
108 System.arraycopy(this.array,index,this.array,index+growSize,size-location);
109 this.lastIndex+=growSize;
110 }}else if(location==0){
111 this.growAtFront(growSize);
112 this.firstIndex-=growSize;
113 }else if(location==size){
114 if(this.lastIndex>this.array.length-growSize){
115 this.growAtEnd(growSize);
116 }this.lastIndex+=growSize;
118 var it=collection.iterator();
119 var index=location+this.firstIndex;
120 var end=index+growSize;
122 this.array[index++]=it.next();
127 },"~N,java.util.Collection");
131 Clazz.overrideMethod(c$,"addAll",
132 function(collection){
133 var growSize=collection.size();
135 if(this.lastIndex>this.array.length-growSize){
136 this.growAtEnd(growSize);
138 var it=collection.iterator();
139 var end=this.lastIndex+growSize;
140 while(this.lastIndex<end){
141 this.array[this.lastIndex++]=it.next();
146 },"java.util.Collection");
148 Clazz.overrideMethod(c$,"clear",
150 if(this.firstIndex!=this.lastIndex){
151 this.fill(this.firstIndex,this.lastIndex);
152 this.firstIndex=this.lastIndex=0;
156 Clazz.defineMethod(c$,"fill", function(i1, i2) { // BH
157 for (var i = i2; --i >= i1;)
158 this.array[i] = null;
161 Clazz.defineMethod(c$,"clone",
164 var newList=Clazz.superCall(this,java.util.ArrayList,"clone",[]);
165 newList.array=this.array.clone();
168 if(Clazz.instanceOf(e,CloneNotSupportedException)){
175 Clazz.overrideMethod(c$,"contains",
178 for(var i=this.firstIndex;i<this.lastIndex;i++){
179 if(object.equals(this.array[i])){
183 for(var i=this.firstIndex;i<this.lastIndex;i++){
184 if(this.array[i]==null){
189 Clazz.defineMethod(c$,"ensureCapacity",
190 function(minimumCapacity){
191 if(this.array.length<minimumCapacity){
192 if(this.firstIndex>0){
193 this.growAtFront(minimumCapacity-this.array.length);
195 this.growAtEnd(minimumCapacity-this.array.length);
197 Clazz.overrideMethod(c$,"get",
199 if(0<=location&&location<this.size()){
200 return this.array[this.firstIndex+location];
201 }throw new IndexOutOfBoundsException();
205 Clazz.defineMethod(c$,"growAtEnd",
206 ($fz=function(required){
207 var size=this.size();
208 if(this.firstIndex>=required-(this.array.length-this.lastIndex)){
209 var newLast=this.lastIndex-this.firstIndex;
211 System.arraycopy(this.array,this.firstIndex,this.array,0,size);
212 var start=newLast<this.firstIndex?this.firstIndex:newLast;
213 this.fill(start,this.array.length);
216 this.lastIndex=newLast;
218 var increment=Math.floor(size/2);
219 if(required>increment){
225 var newArray=this.newElementArray(size+increment);
227 System.arraycopy(this.array,this.firstIndex,newArray,this.firstIndex,size);
232 },$fz.isPrivate=true,$fz),"~N");
233 Clazz.defineMethod(c$,"growAtFront",
234 ($fz=function(required){
235 var size=this.size();
236 if(this.array.length-this.lastIndex>=required){
237 var newFirst=this.array.length-size;
239 System.arraycopy(this.array,this.firstIndex,this.array,newFirst,size);
240 var length=this.firstIndex+size>newFirst?newFirst:this.firstIndex+size;
241 this.fill(this.firstIndex,length);
242 }this.firstIndex=newFirst;
243 this.lastIndex=this.array.length;
245 var increment=Math.floor(size/2);
246 if(required>increment){
250 }var newArray=this.newElementArray(size+increment);
252 System.arraycopy(this.array,this.firstIndex,newArray,newArray.length-size,size);
253 }this.firstIndex=newArray.length-size;
254 this.lastIndex=newArray.length;
256 }},$fz.isPrivate=true,$fz),"~N");
257 Clazz.defineMethod(c$,"growForInsert",
258 ($fz=function(location,required){
259 var size=this.size();
260 var increment=Math.floor(size/2);
261 if(required>increment){
265 }var newArray=this.newElementArray(size+increment);
266 if(location<Math.floor(size/2)){
267 var newFirst=newArray.length-(size+required);
268 System.arraycopy(this.array,location,newArray,location+increment,size-location);
269 System.arraycopy(this.array,this.firstIndex,newArray,newFirst,location);
270 this.firstIndex=newFirst;
271 this.lastIndex=newArray.length;
273 System.arraycopy(this.array,this.firstIndex,newArray,0,location);
274 System.arraycopy(this.array,location,newArray,location+required,size-location);
276 this.lastIndex+=required;
277 }this.array=newArray;
278 },$fz.isPrivate=true,$fz),"~N,~N");
279 Clazz.overrideMethod(c$,"indexOf",
282 for(var i=this.firstIndex;i<this.lastIndex;i++){
283 if(object.equals(this.array[i])){
284 return i-this.firstIndex;
287 for(var i=this.firstIndex;i<this.lastIndex;i++){
288 if(this.array[i]==null){
289 return i-this.firstIndex;
293 Clazz.overrideMethod(c$,"isEmpty",
295 return this.lastIndex==this.firstIndex;
297 Clazz.overrideMethod(c$,"lastIndexOf",
300 for(var i=this.lastIndex-1;i>=this.firstIndex;i--){
301 if(object.equals(this.array[i])){
302 return i-this.firstIndex;
305 for(var i=this.lastIndex-1;i>=this.firstIndex;i--){
306 if(this.array[i]==null){
307 return i-this.firstIndex;
311 Clazz.overrideMethod(c$,"remove",
314 var size=this.size();
315 if(0<=location&&location<size){
316 if(location==size-1){
317 result=this.array[--this.lastIndex];
318 this.array[this.lastIndex]=null;
319 }else if(location==0){
320 result=this.array[this.firstIndex];
321 this.array[this.firstIndex++]=null;
323 var elementIndex=this.firstIndex+location;
324 result=this.array[elementIndex];
325 if(location<Math.floor(size/2)){
326 System.arraycopy(this.array,this.firstIndex,this.array,this.firstIndex+1,location);
327 this.array[this.firstIndex++]=null;
329 System.arraycopy(this.array,elementIndex+1,this.array,elementIndex,size-location-1);
330 this.array[--this.lastIndex]=null;
332 throw new IndexOutOfBoundsException();
337 Clazz.defineMethod(c$, "removeObject", function(o) {
338 var i = this.indexOf(o);
339 if (i < 0)return null;
340 return this.remove(i);
343 Clazz.overrideMethod(c$,"removeRange",
345 if(start>=0&&start<=end&&end<=this.size()){
348 }var size=this.size();
350 this.fill(this.firstIndex+start,this.lastIndex);
351 this.lastIndex=this.firstIndex+start;
353 this.fill(this.firstIndex,this.firstIndex+end);
354 this.firstIndex+=end;
356 System.arraycopy(this.array,this.firstIndex+end,this.array,this.firstIndex+start,size-end);
357 var newLast=this.lastIndex+start-end;
358 this.fill(newLast,this.lastIndex);
359 this.lastIndex=newLast;
362 throw new IndexOutOfBoundsException();
364 Clazz.overrideMethod(c$,"set",
365 function(location,object){
366 if(0<=location&&location<this.size()){
367 var result=this.array[this.firstIndex+location];
368 this.array[this.firstIndex+location]=object;
370 }throw new IndexOutOfBoundsException();
372 Clazz.overrideMethod(c$,"size",
374 return this.lastIndex-this.firstIndex;
377 Clazz.defineMethod(c$,"toArray",
379 var size=this.size();
380 var result=new Array(size);
381 System.arraycopy(this.array,this.firstIndex,result,0,size);
386 Clazz.overrideMethod(c$,"toArray",
388 var size=this.size();
389 if(!contents || size>contents.length)
390 contents= new Array(size);
391 System.arraycopy(this.array,this.firstIndex,contents,0,size);
392 if(size<contents.length){
396 Clazz.defineMethod(c$,"trimToSize",
398 var size=this.size();
399 var newArray=this.newElementArray(size);
400 System.arraycopy(this.array,this.firstIndex,newArray,0,size);
403 this.lastIndex=this.array.length;