stevenh@25: package org.qmul.eecs.c4dm.sia.model; stevenh@25: stevenh@25: import java.util.ArrayList; stevenh@25: import java.util.Iterator; stevenh@25: stevenh@25: public class SiatecX implements Comparable { stevenh@25: stevenh@25: private ArrayList q; stevenh@25: private int i; stevenh@25: stevenh@25: /** stevenh@25: * @return stevenh@25: */ stevenh@25: public ArrayList getQ() { stevenh@25: return q; stevenh@25: } stevenh@25: stevenh@25: /** stevenh@25: * @param q stevenh@25: */ stevenh@25: public void setQ(ArrayList q) { stevenh@25: this.q = q; stevenh@25: } stevenh@25: stevenh@25: /** stevenh@25: * @return stevenh@25: */ stevenh@25: public int getI() { stevenh@25: return i; stevenh@25: } stevenh@25: stevenh@25: /** stevenh@25: * @param i stevenh@25: */ stevenh@25: public void setI(int i) { stevenh@25: this.i = i; stevenh@25: } stevenh@25: stevenh@25: @Override stevenh@25: public int compareTo(Object o2) { stevenh@25: stevenh@25: SiatecX siatecX2 = (SiatecX)o2; stevenh@25: int compareQResult = compareToIgnoreI(siatecX2); stevenh@25: stevenh@25: if (compareQResult != 0) stevenh@25: { stevenh@25: return compareQResult; stevenh@25: } stevenh@25: stevenh@25: // q1 and q2 are exactly equal, so compare i1 and i2 stevenh@25: int i1 = this.getI(); stevenh@25: int i2 = siatecX2.getI(); stevenh@25: stevenh@25: if (i1 < i2) stevenh@25: { stevenh@25: return -1; stevenh@25: } stevenh@25: else if (i1 > i2) stevenh@25: { stevenh@25: return 1; stevenh@25: } stevenh@25: stevenh@25: // i1 and i2 are equal too, so return 0 stevenh@25: return 0; stevenh@25: } stevenh@25: stevenh@25: public int compareToIgnoreI(SiatecX siatecX2) { stevenh@25: stevenh@25: ArrayList q1 = this.getQ(); stevenh@25: ArrayList q2 = siatecX2.getQ(); stevenh@25: stevenh@25: int q1Size = q1.size(); stevenh@25: int q2Size = q2.size(); stevenh@25: stevenh@25: // Check whether q1 < q2 stevenh@25: stevenh@25: // First check for differing vector lengths stevenh@25: if (q1Size < q2Size) stevenh@25: { stevenh@25: return -1; stevenh@25: } stevenh@25: else if (q1Size > q2Size) stevenh@25: { stevenh@25: return 1; stevenh@25: } stevenh@25: stevenh@25: // q1 and q2 are of equal length, so compare contents of both stevenh@25: Iterator q2Iter = q2.iterator(); stevenh@25: for (NDimensionalObject nDimObj1: q1) stevenh@25: { stevenh@25: NDimensionalObject nDimObj2 = q2Iter.next(); stevenh@25: int compareResult = nDimObj1.compareTo(nDimObj2); stevenh@25: if (compareResult != 0) stevenh@25: { stevenh@25: return compareResult; stevenh@25: } stevenh@25: } stevenh@25: stevenh@25: return 0; stevenh@25: } stevenh@25: stevenh@25: stevenh@25: }