checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / CharTopology.java
index 796a4ce..81ab840 100644 (file)
@@ -3,8 +3,36 @@ import edu.berkeley.sbp.*;
 import edu.berkeley.sbp.util.*;
 
 public class CharTopology extends IntegerTopology<Character> implements Functor<Character,Integer> {
-    public Integer invoke(Character c) { return (int)c.charValue(); }
+
     public CharTopology()               { super(null); }
     public CharTopology(Range.Set r)    { super(null, r); }
     public CharTopology(char a, char b) { super(null, a, b); }
+
+    public Integer invoke(Character c) { return (int)c.charValue(); }
+
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        sb.append('[');
+        Range.Set ranges = getRanges();
+        if (ranges.size() == -1 || ranges.size() > Character.MAX_VALUE/2) {
+            sb.append('~');
+            ranges = ranges.complement();
+        }
+        ranges = ranges.intersect(new Range.Set(new Range(0, Character.MAX_VALUE)));
+        for(Range r : ranges) {
+            if (r.isMinNegInf() || r.isMaxPosInf()) throw new Error("should not happen");
+            if (r.getMin()==r.getMax()) {
+                sb.append(esc((char)r.getMin()));
+            } else{
+                sb.append(esc((char)r.getMin()));
+                sb.append('-');
+                sb.append(esc((char)r.getMax()));
+            }
+        }
+        sb.append(']');
+        return sb.toString();
+    }
+
+    private String esc(char c) { return StringUtil.escapify(c+"", "[]-~\\\"\'"); }
+
 }