package edu.berkeley.sbp.util;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import edu.berkeley.sbp.util.*;
import edu.berkeley.sbp.*;
/** implementation of Topology for any class via equals()/hashCode() */
public class DiscreteTopology implements Topology {
HashSet hs = new HashSet();
public DiscreteTopology() { }
public DiscreteTopology(V v) { hs.add(v); }
DiscreteTopology(HashSet hs) { this.hs.addAll(hs); }
public Topology fresh() { return new DiscreteTopology(); }
public Topology dup() { return new DiscreteTopology(this.hs); }
public HashSet hs() {
HashSet ret = new HashSet();
ret.addAll(hs);
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 int hashCode() { return hs.hashCode(); }
public boolean equals(Object o) { return o!=null && o instanceof DiscreteTopology && ((DiscreteTopology)o).hs.equals(hs); }
public int size() { return hs.size(); }
}