X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FIntegerTopology.java;h=e1bec151904e3570dae4f980d4ac6398616bd2a8;hp=cac19e9b19676da56eb8ec7fde15d15c2be445b5;hb=6b53048f4413f3c618acc3581d0b4f60a236a9bc;hpb=84a4a8204373b996105e69edf91d2f9fae7b4bcb diff --git a/src/edu/berkeley/sbp/util/IntegerTopology.java b/src/edu/berkeley/sbp/util/IntegerTopology.java index cac19e9..e1bec15 100644 --- a/src/edu/berkeley/sbp/util/IntegerTopology.java +++ b/src/edu/berkeley/sbp/util/IntegerTopology.java @@ -9,7 +9,9 @@ import edu.berkeley.sbp.*; /** implementation of Topology for any class for which there is a mapping to the ints */ public class IntegerTopology implements Topology { private final Range.Set rs; - + + private static final IntegerTopology empty = new IntegerTopology(); + public Range.Set getRanges() { return new Range.Set(rs); } public IntegerTopology() { this(new Range.Set()); } @@ -20,23 +22,18 @@ public class IntegerTopology implemen public IntegerTopology(Range r) { this(new Range.Set(r)); } public IntegerTopology(Range.Set rs) { this.rs = rs; } - public Topology fresh() { return new IntegerTopology(); } - public Topology dup() { return new IntegerTopology(this.rs); } - public Topology dup(Range.Set rs) { return new IntegerTopology(rs); } + public Topology empty() { return (Topology)empty; } - public void add(Topology t) { rs.add(((IntegerTopology)t).rs); } - public void remove(Topology t) { rs.remove(((IntegerTopology)t).rs); } - public void add(V v) { rs.add(v.toInt()); } - public void remove(V v) { rs.remove(v.toInt()); } public boolean contains(V v) { return rs.contains(v.toInt()); } - public Topology complement() { return dup(rs.complement()); } - public Topology intersect(Topology t) { return dup(rs.intersect(((IntegerTopology)t).rs)); } - public Topology minus(Topology t) { return dup(rs.intersect(((IntegerTopology)t).rs.complement())); } - public Topology union(Topology t) { return dup(rs.union(((IntegerTopology)t).rs)); } - public boolean disjoint(Topology t) { return rs.intersect(((IntegerTopology)t).rs).size()==0; } - public boolean containsAll(Topology t) { return rs.intersect(((IntegerTopology)t).rs).equals(((IntegerTopology)t).rs); } + public Topology complement() { return new IntegerTopology(rs.complement()); } + public Topology intersect(Topology t) { return new IntegerTopology(rs.intersect(((IntegerTopology)t.unwrap()).rs)); } + public Topology minus(Topology t) { return new IntegerTopology(rs.intersect(((IntegerTopology)t.unwrap()).rs.complement())); } + public Topology union(Topology t) { return new IntegerTopology(rs.union(((IntegerTopology)t.unwrap()).rs)); } + public boolean disjoint(Topology t) { return rs.intersect(((IntegerTopology)t.unwrap()).rs).size()==0; } + public boolean containsAll(Topology t) { return rs.containsAll(((IntegerTopology)t.unwrap()).rs); } + public Topology unwrap() { return this; } public int hashCode() { return rs.hashCode(); } public boolean equals(Object o) { return o!=null && o instanceof IntegerTopology && ((IntegerTopology)o).rs.equals(rs); }