X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FDiscreteTopology.java;h=0fb75eb390787e0f1f4658afc9718fb199a59bbe;hp=f78bdaee2717890bc8ea4698f8c0f04f31d34d58;hb=6b53048f4413f3c618acc3581d0b4f60a236a9bc;hpb=84a4a8204373b996105e69edf91d2f9fae7b4bcb diff --git a/src/edu/berkeley/sbp/util/DiscreteTopology.java b/src/edu/berkeley/sbp/util/DiscreteTopology.java index f78bdae..0fb75eb 100644 --- a/src/edu/berkeley/sbp/util/DiscreteTopology.java +++ b/src/edu/berkeley/sbp/util/DiscreteTopology.java @@ -9,14 +9,15 @@ import edu.berkeley.sbp.*; /** implementation of Topology for any class via equals()/hashCode() */ public class DiscreteTopology implements Topology { + private static final DiscreteTopology empty = new DiscreteTopology(); + HashSet hs = new HashSet(); public DiscreteTopology() { } public DiscreteTopology(V v) { hs.add(v); } - DiscreteTopology(HashSet hs) { this.hs.addAll(hs); } + DiscreteTopology(HashSet hs) { this.hs.addAll(hs); } - public Topology fresh() { return new DiscreteTopology(); } - public Topology dup() { return new DiscreteTopology(this.hs); } + public Topology empty() { return (Topology)empty; } public HashSet hs() { HashSet ret = new HashSet(); @@ -24,18 +25,15 @@ public class DiscreteTopology implements Topology { return ret; } - public void add(Topology t) { hs.addAll(((DiscreteTopology)t).hs); } - public void remove(Topology t) { hs.removeAll(((DiscreteTopology)t).hs); } - public void add(V v) { hs.add(v); } - public void remove(V v) { hs.remove(v); } public boolean contains(V v) { return hs.contains(v); } - public Topology complement() { /*return dup(hs.complement());*/ throw new Error(); } - public Topology intersect(Topology t) { return new DiscreteTopology(hs().retainAll(((DiscreteTopology)t).hs)); } - public Topology minus(Topology t) { return new DiscreteTopology(hs().removeAll(((DiscreteTopology)t).hs)); } - public Topology union(Topology t) { return new DiscreteTopology(hs().addAll(((DiscreteTopology)t).hs)); } - public boolean disjoint(Topology t) { return ((DiscreteTopology)intersect(t)).size()==0; } - public boolean containsAll(Topology t) { return hs.containsAll(((DiscreteTopology)t).hs); } + public Topology unwrap() { return this; } + public Topology complement() { throw new Error(); } + public Topology intersect(Topology t) { return new DiscreteTopology(hs().retainAll(((DiscreteTopology)t.unwrap()).hs)); } + public Topology minus(Topology t) { return new DiscreteTopology(hs().removeAll(((DiscreteTopology)t.unwrap()).hs)); } + public Topology union(Topology t) { return new DiscreteTopology(hs().addAll(((DiscreteTopology)t.unwrap()).hs)); } + public boolean disjoint(Topology t) { return ((DiscreteTopology)intersect(t).unwrap()).size()==0; } + public boolean containsAll(Topology t) { return hs.containsAll(((DiscreteTopology)t.unwrap()).hs); } public int hashCode() { return hs.hashCode(); } public boolean equals(Object o) { return o!=null && o instanceof DiscreteTopology && ((DiscreteTopology)o).hs.equals(hs); }