package set; import position.NodePositionList; import position.PositionList; import utility.DefaultComparator; import utility.merge.MergeTemplate; import java.util.Comparator; /** * Created with xgiovio.macbookair. * User: xgiovio * Date: 14/05/14 * Time: 14:23 */ public class OrderedListSet implements Set { private Comparator c; private PositionList L; public OrderedListSet() { L = new NodePositionList(); c = new DefaultComparator(); } public OrderedListSet(Comparator in_c) { L = new NodePositionList(); c = in_c; } public OrderedListSet(PositionList in_l){ L = in_l; c = new DefaultComparator(); } public OrderedListSet(PositionList in_l,Comparator in_c ){ L = in_l; c = in_c; } @Override public int size() { return L.size(); } @Override public boolean isEmpty() { return L.isEmpty(); } @Override public Set union(Set B) { MergeUnion ret = new MergeUnion(L, ((OrderedListSet)B).L , c ); L = ret.getResult(); return this; } @Override public Set intersect(Set B) { MergeIntersect ret = new MergeIntersect(L, ((OrderedListSet)B).L , c ); L = ret.getResult(); return this; } @Override public Set subtract(Set B) { MergeSubtract ret = new MergeSubtract(L, ((OrderedListSet)B).L , c ); L = ret.getResult(); return this; } @Override public String toString() { return L.toString(); } //////////////////////// inner class override methods from merge template ///// protected class MergeUnion extends MergeTemplate{ public MergeUnion (PositionList A , PositionList B, Comparator c){ super(A,B,c); } @Override protected void aIsLess(E a) { s.addLast(a); } @Override protected void bIsLess(E b) { s.addLast(b); } @Override protected void bothAreEqual(E a, E b) { s.addLast(a); } } protected class MergeIntersect extends MergeTemplate{ public MergeIntersect (PositionList A , PositionList B, Comparator c){ super(A,B,c); } @Override protected void aIsLess(E a) { } @Override protected void bIsLess(E b) { } @Override protected void bothAreEqual(E a, E b) { s.addLast(a); } } protected class MergeSubtract extends MergeTemplate{ public MergeSubtract (PositionList A , PositionList B, Comparator c){ super(A,B,c); } @Override protected void aIsLess(E a) { s.addLast(a); } @Override protected void bIsLess(E b) { } @Override protected void bothAreEqual(E a, E b) { } } }