X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FPrintableTree.java;h=8e12956700c96d95de59aabc4e936c2818adbeed;hp=180d2eaaf83fe3a46a895bae9d7a2bdece9bf510;hb=5ae7d4fd7c53dab6df9aae2e42579efabf66f49e;hpb=fc1e5069ec5401c425dd29b77b04285916b62d10 diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java index 180d2ea..8e12956 100644 --- a/src/edu/berkeley/sbp/util/PrintableTree.java +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -17,6 +17,7 @@ public abstract class PrintableTree implements Iterable private boolean basic() { return toString().length() < MAXCHARS; } public String toPrettyString() { return toPrettyString("\n"); } + public StringBuffer toPrettyString(StringBuffer sb) { sb.append(toPrettyString()); return sb; } private String toPrettyString(String nl) { String str = toString(); if (str.length() < MAXCHARS) return str; @@ -47,7 +48,9 @@ public abstract class PrintableTree implements Iterable return ret.toString(); } + private String cached = null; public String toString() { + if (cached!=null) return cached; StringBuffer ret = new StringBuffer(); int count=0; for(T t : this) { @@ -55,19 +58,19 @@ public abstract class PrintableTree implements Iterable String q = t==null ? "null" : t.toString(); if (q.length() > 0) { ret.append(q); ret.append(" "); } } - if (count==1 && ignoreSingleton()) return ret.toString().trim(); + if (count==1 && ignoreSingleton()) { return cached = ret.toString().trim(); } 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 = left() + tail + right(); - return h + tail; + return cached = 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(head); sb.append(", new "+this.getClass().getName()+"[] { "); boolean first = true; for(T t : this) {