1 package edu.berkeley.sbp.util;
4 import java.lang.reflect.*;
5 import java.lang.ref.*;
6 import edu.berkeley.sbp.*;
7 import edu.berkeley.sbp.util.*;
9 /** implementation of <tt>Topology</tt> for any class for which there is a mapping to the <tt>int</tt>s */
10 public class IntegerTopology<V> implements Topology<V> {
12 private final Range.Set rs;
13 private final Functor<V,Integer> f;
15 private int toInt(V v) { return f==null?((IntegerMappable)v).toInt():f.invoke(v); }
17 public Range.Set getRanges() { return new Range.Set(rs); }
19 public IntegerTopology(Functor<V,Integer> f) { this(f, new Range.Set()); }
20 public IntegerTopology(Functor<V,Integer> f, V a) { this(f, f==null?((IntegerMappable)a).toInt():f.invoke(a)); }
21 public IntegerTopology(Functor<V,Integer> f, V a, V b) { this(f, f==null?((IntegerMappable)a).toInt():f.invoke(a),
22 f==null?((IntegerMappable)b).toInt():f.invoke(b)); }
23 public IntegerTopology(Functor<V,Integer> f, int a) { this(f, a, a); }
24 public IntegerTopology(Functor<V,Integer> f, int a, int b) { this(f, new Range(a, b)); }
25 public IntegerTopology(Functor<V,Integer> f, Range r) { this(f, new Range.Set(r)); }
26 public IntegerTopology(Functor<V,Integer> f, Range.Set rs) {
28 this.f = f==null?(this instanceof Functor ? (Functor)this : null):f;
31 public Topology<V> empty() { return new IntegerTopology<V>(f); }
33 public boolean contains(V v) { return rs.contains(toInt(v)); }
35 public Topology<V> complement() { return new IntegerTopology<V>(f, rs.complement()); }
36 public Topology<V> intersect(Topology<V> t) { return new IntegerTopology<V>(f, rs.intersect(((IntegerTopology<V>)t.unwrap()).rs)); }
37 public Topology<V> minus(Topology<V> t) { return new IntegerTopology<V>(f, rs.intersect(((IntegerTopology<V>)t.unwrap()).rs.complement())); }
38 public Topology<V> union(Topology<V> t) { return new IntegerTopology<V>(f, rs.union(((IntegerTopology<V>)t.unwrap()).rs)); }
39 public boolean disjoint(Topology<V> t) { return rs.intersect(((IntegerTopology<V>)t.unwrap()).rs).size()==0; }
40 public boolean containsAll(Topology<V> t) { return rs.containsAll(((IntegerTopology<V>)t.unwrap()).rs); }
42 public Topology<V> unwrap() { return this; }
43 public int hashCode() { return rs.hashCode(); }
44 public boolean equals(Object o) { return o!=null && o instanceof IntegerTopology && ((IntegerTopology<V>)o).rs.equals(rs); }