1 17 package org.apache.commons.collections.primitives; 18 19 import java.io.IOException ; 20 import java.io.ObjectInputStream ; 21 import java.io.ObjectOutputStream ; 22 import java.io.Serializable ; 23 24 42 public class ArrayUnsignedIntList extends RandomAccessLongList implements LongList, Serializable { 43 44 47 51 public ArrayUnsignedIntList() { 52 this(8); 53 } 54 55 60 public ArrayUnsignedIntList(int initialCapacity) { 61 if(initialCapacity < 0) { 62 throw new IllegalArgumentException ("capacity " + initialCapacity); 63 } 64 _data = new int[initialCapacity]; 65 _size = 0; 66 } 67 68 77 public ArrayUnsignedIntList(LongCollection that) { 78 this(that.size()); 79 addAll(that); 80 } 81 82 88 public ArrayUnsignedIntList(long[] array) { 89 this(array.length); 90 for(int i=0;i<array.length;i++) { 91 _data[i] = fromLong(array[i]); 92 } 93 _size = array.length; 94 } 95 96 99 109 public long get(int index) { 110 checkRange(index); 111 return toLong(_data[index]); 112 } 113 114 public int size() { 115 return _size; 116 } 117 118 133 public long removeElementAt(int index) { 134 checkRange(index); 135 incrModCount(); 136 long oldval = toLong(_data[index]); 137 int numtomove = _size - index - 1; 138 if(numtomove > 0) { 139 System.arraycopy(_data,index+1,_data,index,numtomove); 140 } 141 _size--; 142 return oldval; 143 } 144 145 160 public long set(int index, long element) { 161 assertValidUnsignedInt(element); 162 checkRange(index); 163 incrModCount(); 164 long oldval = toLong(_data[index]); 165 _data[index] = fromLong(element); 166 return oldval; 167 } 168 169 186 public void add(int index, long element) { 187 assertValidUnsignedInt(element); 188 checkRangeIncludingEndpoint(index); 189 incrModCount(); 190 ensureCapacity(_size+1); 191 int numtomove = _size-index; 192 System.arraycopy(_data,index,_data,index+1,numtomove); 193 _data[index] = fromLong(element); 194 _size++; 195 } 196 197 public void clear() { 198 incrModCount(); 199 _size = 0; 200 } 201 202 205 210 public void ensureCapacity(int mincap) { 211 incrModCount(); 212 if(mincap > _data.length) { 213 int newcap = (_data.length * 3)/2 + 1; 214 int[] olddata = _data; 215 _data = new int[newcap < mincap ? mincap : newcap]; 216 System.arraycopy(olddata,0,_data,0,_size); 217 } 218 } 219 220 224 public void trimToSize() { 225 incrModCount(); 226 if(_size < _data.length) { 227 int[] olddata = _data; 228 _data = new int[_size]; 229 System.arraycopy(olddata,0,_data,0,_size); 230 } 231 } 232 233 236 private final long toLong(int value) { 237 return value & MAX_VALUE; 238 } 239 240 private final int fromLong(long value) { 241 return (int)(value&MAX_VALUE); 242 } 243 244 private final void assertValidUnsignedInt(long value) throws IllegalArgumentException { 245 if(value > MAX_VALUE) { 246 throw new IllegalArgumentException (value + " > " + MAX_VALUE); 247 } 248 if(value < MIN_VALUE) { 249 throw new IllegalArgumentException (value + " < " + MIN_VALUE); 250 } 251 } 252 253 private void writeObject(ObjectOutputStream out) throws IOException { 254 out.defaultWriteObject(); 255 out.writeInt(_data.length); 256 for(int i=0;i<_size;i++) { 257 out.writeInt(_data[i]); 258 } 259 } 260 261 private void readObject(ObjectInputStream in) throws IOException , ClassNotFoundException { 262 in.defaultReadObject(); 263 _data = new int[in.readInt()]; 264 for(int i=0;i<_size;i++) { 265 _data[i] = in.readInt(); 266 } 267 } 268 269 private final void checkRange(int index) { 270 if(index < 0 || index >= _size) { 271 throw new IndexOutOfBoundsException ("Should be at least 0 and less than " + _size + ", found " + index); 272 } 273 } 274 275 private final void checkRangeIncludingEndpoint(int index) { 276 if(index < 0 || index > _size) { 277 throw new IndexOutOfBoundsException ("Should be at least 0 and at most " + _size + ", found " + index); 278 } 279 } 280 281 284 287 public static final long MAX_VALUE = 0xFFFFFFFFL; 288 289 292 public static final long MIN_VALUE = 0L; 293 294 private transient int[] _data = null; 295 private int _size = 0; 296 297 } 298 | Popular Tags |