Files
unisa_strutture_dati_2013_2014/utility/merge/MergeTemplate.java

81 lines
1.6 KiB
Java

package utility.merge;
import exceptions.BoundaryViolationException;
import exceptions.EmptyListException;
import exceptions.InvalidPositionException;
import position.NodePositionList;
import position.Position;
import position.PositionList;
import utility.DefaultComparator;
import java.util.Comparator;
import java.util.Iterator;
/**
* Created with xgiovio.macbookair.
* User: xgiovio
* Date: 14/05/14
* Time: 14:48
*/
public abstract class MergeTemplate<E> {
PositionList<E> s = new NodePositionList<E>();
Comparator<E> c = null;
public MergeTemplate (PositionList<E> A, PositionList <E> B){
this(A,B,new DefaultComparator<E>());
}
public MergeTemplate (PositionList<E> A, PositionList <E> B, Comparator<E> in_c){
c = in_c;
E a,b;
Iterator<E> Ait, Bit;
Ait = A.iterator();
Bit = B.iterator();
while (!(Ait.hasNext()) && !(Bit.hasNext())) {
a = Ait.next();
b= Bit.next();
if ( c.compare(a,b) < 0 )
aIsLess(a);
else if (c.compare(a,b) > 0)
bIsLess(b);
else // se b = a
bothAreEqual(a, b);
}
while (!(Ait.hasNext())) {
a = Ait.next();
aIsLess(a);
}
while (!(Bit.hasNext())) {
b = Bit.next();
bIsLess(b);
}
}
abstract protected void aIsLess (E a);
abstract protected void bIsLess (E b);
abstract protected void bothAreEqual (E a, E b);
public PositionList<E> getResult () {
return s;
}
}