fix javadoc generation
[sbp.git] / src / edu / berkeley / sbp / util / IntegerTopology.java
1 // Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
2
3 package edu.berkeley.sbp.util;
4 import java.io.*;
5 import java.util.*;
6 import java.lang.reflect.*;
7 import java.lang.ref.*;
8 import edu.berkeley.sbp.*;
9 import edu.berkeley.sbp.util.*;
10
11 /** implementation of <tt>Topology</tt> for any class for which there is a mapping to the <tt>int</tt>s */
12 public class IntegerTopology<V> implements Topology<V>, Serializable {
13
14     private final Range.Set rs;
15     private final Functor<V,Integer> f;
16
17     private int toInt(V v) { return f==null?((IntegerMappable)v).toInt():f.invoke(v); }
18
19     public Range.Set getRanges()         { return new Range.Set(rs); }
20     public Functor<V,Integer> functor() { return f; }
21
22     public IntegerTopology(Functor<V,Integer> f)               { this(f, new Range.Set()); }
23     public IntegerTopology(Functor<V,Integer> f, V a)          { this(f, f==null?((IntegerMappable)a).toInt():f.invoke(a)); }
24     public IntegerTopology(Functor<V,Integer> f, V a, V b)     { this(f, f==null?((IntegerMappable)a).toInt():f.invoke(a),
25                                                                       f==null?((IntegerMappable)b).toInt():f.invoke(b)); }
26     public IntegerTopology(Functor<V,Integer> f, int a)        { this(f, a, a); }
27     public IntegerTopology(Functor<V,Integer> f, int a, int b) { this(f, new Range(a, b)); }
28     public IntegerTopology(Functor<V,Integer> f, Range r)      { this(f, new Range.Set(r)); }
29     public IntegerTopology(Functor<V,Integer> f, Range.Set rs) {
30         this.rs = rs;
31         this.f = f==null?(this instanceof Functor ? (Functor)this : null):f;
32     }
33     
34     public Topology<V> empty()              { return new IntegerTopology<V>(f);   }
35         
36     public boolean          contains(V v)              { return rs.contains(toInt(v)); }
37         
38     public Topology<V>      complement()               { return new IntegerTopology<V>(f, rs.complement()); }
39     public Topology<V>      intersect(Topology<V> t)   { return new IntegerTopology<V>(f, rs.intersect(((IntegerTopology<V>)t.unwrap()).rs)); }
40     public Topology<V>      minus(Topology<V> t)       { return new IntegerTopology<V>(f, rs.intersect(((IntegerTopology<V>)t.unwrap()).rs.complement())); }
41     public Topology<V>      union(Topology<V> t)       { return new IntegerTopology<V>(f, rs.union(((IntegerTopology<V>)t.unwrap()).rs)); }
42     public boolean          disjoint(Topology<V> t)    { return rs.intersect(((IntegerTopology<V>)t.unwrap()).rs).size()==0; }
43     public boolean          containsAll(Topology<V> t) { return rs.containsAll(((IntegerTopology<V>)t.unwrap()).rs); }
44
45     public Topology<V> unwrap() { return this; }
46     public int     hashCode()                          { return rs.hashCode(); }
47     public boolean equals(Object o)                    { return o!=null && o instanceof IntegerTopology && ((IntegerTopology<V>)o).rs.equals(rs); }
48
49 }