// Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
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 {
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); }
public Topology empty() { return (Topology)empty; }
public HashSet hs() {
HashSet ret = new HashSet();
ret.addAll(hs);
return ret;
}
public boolean contains(V v) { return hs.contains(v); }
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); }
public int size() { return hs.size(); }
}