package org.andengine.util.adt.list;
/**
* TODO This class could take some kind of AllocationStrategy object.
*
* (c) Zynga 2012
*
* @author Nicolas Gramlich <ngramlich@zynga.com>
* @since 19:22:29 - 03.05.2012
*/
public class IntArrayList implements IIntList {
// ===========================================================
// Constants
// ===========================================================
private static final int CAPACITY_INITIAL_DEFAULT = 0;
// ===========================================================
// Fields
// ===========================================================
private int[] mItems;
private int mSize;
// ===========================================================
// Constructors
// ===========================================================
public IntArrayList() {
this(IntArrayList.CAPACITY_INITIAL_DEFAULT);
}
public IntArrayList(final int pInitialCapacity) {
this.mItems = new int[pInitialCapacity];
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public boolean isEmpty() {
return this.mSize == 0;
}
@Override
public float get(final int pIndex) throws ArrayIndexOutOfBoundsException {
return this.mItems[pIndex];
}
@Override
public void add(final int pItem) {
this.ensureCapacity(this.mSize + 1);
this.mItems[this.mSize] = pItem;
this.mSize++;
}
@Override
public void add(final int pIndex, final int pItem) throws ArrayIndexOutOfBoundsException {
this.ensureCapacity(this.mSize + 1);
System.arraycopy(this.mItems, pIndex, this.mItems, pIndex + 1, this.mSize - pIndex);
this.mItems[pIndex] = pItem;
this.mSize++;
}
@Override
public float remove(final int pIndex) throws ArrayIndexOutOfBoundsException {
final float oldValue = this.mItems[pIndex];
final int numMoved = this.mSize - pIndex - 1;
if(numMoved > 0) {
System.arraycopy(this.mItems, pIndex + 1, this.mItems, pIndex, numMoved);
}
this.mSize--;
return oldValue;
}
@Override
public int size() {
return this.mSize;
}
@Override
public void clear() {
this.mSize = 0;
}
@Override
public int[] toArray() {
final int[] array = new int[this.mSize];
System.arraycopy(this.mItems, 0, array, 0, this.mSize);
return array ;
}
// ===========================================================
// Methods
// ===========================================================
private void ensureCapacity(final int pCapacity) {
final int currentCapacity = this.mItems.length;
if(currentCapacity < pCapacity) {
/* Increase array size. */
final int newCapacity = ((currentCapacity * 3) >> 1) + 1;
final int newItems[] = new int[newCapacity];
System.arraycopy(this.mItems, 0, newItems, 0, currentCapacity);
this.mItems = newItems;
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}