package generated.javacard.mondex.purse;
public class ListOfPayDetails {

	private short size;
	private PayDetails[] elems;
	private short index;

	public ListOfPayDetails(short size) {
		this.size = size;
		elems = new PayDetails[size];
		for (short i = 0; i < elems.length; i++)
			elems[i] = new PayDetails();
	}

	public void add(PayDetails e) {
		elems[index++].copy(e);
	}

	public short size() {
		return size;
	}

	public boolean hasFree() {
		return index < elems.length;
	}

	//**************************************************

	public boolean isEmpty() {
		return index == 0;
	}

	public void clear() {
		index = 0;
	}

	public boolean contains(PayDetails e) {
		for (short i = 0; i < index; i++) {
			if (elems[i].equals(e)) {
				return true;
			}
		}
		return false;
	}

	public void remove(PayDetails e) {
		removeIndex(containsAndIndex(e));
	}

	public void removeAll(PayDetails e) {
		removeAllIndex(containsAndIndex(e), e);
	}

	public PayDetails get(short index) {
		return elems[index];
	}

	//****************************************************

	private short containsAndIndex(PayDetails e) {
		for (short i = 0; i < index; i++) {
			if (elems[i].equals(e)) {
				return i;
			}
		}
		return -1;
	}

	private void removeIndex(short ind) {
		if (ind >= 0 && ind < index) {
			for (short i = ind; (short) (i + 1) < index; i++) {
				elems[i].copy(elems[(short) (i + 1)]);
			}
			index--;
		}
	}

	private void removeAllIndex(short ind, PayDetails e) {
		if (ind >= 0) {
			short i = ind;
			short found = 1;
			for (short j = (short) (ind + 1); j < index; j++) {
				if (!elems[j].equals(e)) {
					elems[i++].copy(elems[j]);
				} else {
					found++;
				}
			}
			index -= found;
		}
	}
}