X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FPrintableTree.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FPrintableTree.java;h=a50aff9267b2852768da6c946f598fe506e6eba3;hp=0000000000000000000000000000000000000000;hb=b0d313eb49712b23f9c71003c96f130f23a63526;hpb=72d5880c192b7fbd525c97ded4cf11e935c58cc8 diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java new file mode 100644 index 0000000..a50aff9 --- /dev/null +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -0,0 +1,43 @@ +package edu.berkeley.sbp; +import edu.berkeley.sbp.*; +import edu.berkeley.sbp.*; +import edu.berkeley.sbp.util.*; +import java.io.*; +import java.util.*; +import java.lang.reflect.*; + +public abstract class PrintableTree implements Iterable { + + protected abstract String headToString(); + protected abstract String headToJava(); + + public String toString() { + StringBuffer ret = new StringBuffer(); + for(T t : this) { + String q = t==null ? "null" : t.toString(); + if (q.length() > 0) { ret.append(q); ret.append(" "); } + } + String tail = ret.toString().trim(); + String head = headToString(); + String h = (head!=null && !head.toString().equals("")) ? (tail.length() > 0 ? head+":" : head+"") : ""; + if (tail.length() > 0) tail = "{" + tail + "}"; + return h + tail; + } + + /** append Java code to sb which evaluates to this instance */ + public void toJava(StringBuffer sb) { + sb.append("new "+this.getClass().getName()+"(null, "); + String head = headToJava(); + sb.append(head==null ? "null" : "\"" + head + "\""); + sb.append(", new "+this.getClass().getName()+"[] { "); + boolean first = true; + for(T t : this) { + if (!first) sb.append(",\n "); + if (t==null) sb.append("null"); + else t.toJava(sb); + first = false; + } + sb.append("})"); + } + +}