| FloatArray.java |
package ij.util;
/** This class implements an expandable float array similar
* to an ArrayList or Vector but more efficient.
* Calls to this class are not synchronized.
* @author Michael Schmid
*/
public class FloatArray {
private int size;
private float[] data;
/** Creates a new expandable array with an initial capacity of 100. */
public FloatArray() {
this(100);
}
/** Creates a new expandable array with specified initial capacity.
* @throws IllegalArgumentException if the specified initial capacity is less than zero */
public FloatArray(int initialCapacity) {
if (initialCapacity < 0) throw new IllegalArgumentException("Illegal FloatArray Capacity: "+initialCapacity);
data = new float[initialCapacity];
}
/** Returns the number of elements in the array. */
public int size() {
return size;
}
/** Removes all elements form this FloatArray. */
public void clear() {
size = 0;
}
/** Returns a float array containing all elements of this FloatArray. */
public float[] toArray() {
float[] out = new float[size];
System.arraycopy(data, 0, out, 0, size);
return out;
}
/** Returns the element at the specified position in this FloatArray.
* @throws IndexOutOfBoundsException - if index is out of range (<code>index < 0 || index >= size()</code>). */
public float get(int index) {
if (index<0 || index>= size) throw new IndexOutOfBoundsException("FloatArray Index out of Bounds: "+index);
return data[index];
}
/** Returns the last element of this FloatArray.
* @throws IndexOutOfBoundsException - if this FloatArray is empty */
public float getLast() {
return get(size-1);
}
/** Replaces the element at the specified position with the value given.
* @return the value previously at the specified position.
* @throws IndexOutOfBoundsException - if index is out of range (<code>index < 0 || index >= size()</code>). */
public float set(int index, float value) {
if (index<0 || index>= size) throw new IndexOutOfBoundsException("FloatArray Index out of Bounds: "+index);
float previousValue = data[index];
data[index] = value;
return previousValue;
}
/** Appends the specified value to the end of this FloatArray. Returns the number of elements after adding. */
public int add(float value) {
if (size >= data.length) {
float[] newData = new float[size*2 + 50];
System.arraycopy(data, 0, newData, 0, size);
data = newData;
}
data[size++] = value;
return size;
}
/** Appends the first n values from the specified array to this FloatArray. Returns the number of elements after adding. */
public int add(float[] a, int n) {
if (size + n > data.length) {
float[] newData = new float[size*2 + n + 50];
System.arraycopy(data, 0, newData, 0, size);
data = newData;
}
System.arraycopy(a, 0, data, size, n);
size += n;
return size;
}
/** Deletes the last <code>n</code> element from this FloatArray. <code>n</code> may be larger than the number of elements; in that
* case, all elements are removed. */
public void removeLast(int n) {
size -= Math.min(n, size);
}
/** Trims the capacity of this FloatArray instance to be its current size,
* minimizing the storage of the FloatArray instance. */
public void trimToSize() {
data = toArray();
}
}