1 // Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
3 package edu.berkeley.sbp.misc;
6 import java.lang.reflect.*;
7 import java.lang.ref.*;
8 import edu.berkeley.sbp.*;
9 import edu.berkeley.sbp.*;
10 import edu.berkeley.sbp.util.*;
11 import edu.berkeley.sbp.*;
13 public abstract class TreeWalker<T> {
14 public abstract Object walk(T head, Object[] args);
15 public Object walk(Tree<T> tree, int idx) {
16 return walk(tree.child(idx));
18 public void walkChildren(Tree<T> tree) {
19 for(Tree<T> child : tree.children()) walk(child);
21 public Object walk(Tree<T> tree) {
22 Object[] args = new Object[tree.size()];
24 for(Tree<T> child : tree.children()) args[i++] = walk(child);
25 args = Reflection.lub(args);
26 return walk(tree.head(), args);