// $Id: Traversal.java,v 1.1.1.1 1999/12/05 22:19:52 mpp Exp $

package IR2;

import java.util.*;

public class Traversal {
  /* A record of all the objects we've visited.  Could be a Hashtable. */
  private Vector visited = new Vector();

  public void traverse(Traversable t) {
    //if (visited.contains(t)) {
    //  already_seen(t);
    //  return;
    //}
    for (Enumeration e = visited.elements(); e.hasMoreElements(); ) {
      if (t == e.nextElement()) {
        already_seen(t);
        return;
      }
    }
    visited.addElement(t);
    if (visit(t))
      t.traverse(this);
  }

  public boolean visit(Traversable t) {
    return true;
  }

  // Action to take if node has already been visited.
  public void already_seen(Traversable t) { } 

  // These two are useful for maintaining local state while traversing
  // multiple paths and backtracking.
  public void save() { }
  public void restore() { }
}
