import demeter.*;
class EqualVisitor extends UniversalVisitor implements Cloneable {
  protected boolean is_equal = true ;
  public boolean get_is_equal() { return is_equal; }
  public void set_is_equal(boolean new_is_equal)
    { is_equal = new_is_equal; }
  EqualVisitor() { super(); }
  public EqualVisitor(boolean is_equal) {
    super();
    set_is_equal(is_equal);
  }

    private java.util.Stack history = new java.util.Stack();
    public EqualVisitor(Object obj) {
      history.push(obj);
    }
    public void before(Person host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_personname().equals(((Person) obj).get_personname());  }
  public void before(Main host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(PrintVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((PrintVisitor) obj).get_indent()
      && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();  }
  public void before(CopyVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(EqualVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();  }
  public void before(DisplayVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((DisplayVisitor) obj).get_indent();  }
  public void before(TraceVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass())
      && host.get_indent() == ((TraceVisitor) obj).get_indent();  }
  public void before(UniversalVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Person_NList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before(Nonempty_Person_NList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());  }
  public void before_spouse(Person source, Person dest) {
    if (is_equal) {
      Person obj = (Person) history.peek();
      history.push(obj.get_spouse());
    }
  }
  public void after_spouse(Person source, Person dest) {
    if (is_equal) history.pop();
  }
  public void before_siblings(Person source, Person_NList dest) {
    if (is_equal) {
      Person obj = (Person) history.peek();
      history.push(obj.get_siblings());
    }
  }
  public void after_siblings(Person source, Person_NList dest) {
    if (is_equal) history.pop();
  }
  public void before_first(Person_NList source, Nonempty_Person_NList dest) {
    if (is_equal) {
      Person_NList obj = (Person_NList) history.peek();
      history.push(obj.get_first());
    }
  }
  public void after_first(Person_NList source, Nonempty_Person_NList dest) {
    if (is_equal) history.pop();
  }
  public void before_it(Nonempty_Person_NList source, Person dest) {
    if (is_equal) {
      Nonempty_Person_NList obj = (Nonempty_Person_NList) history.peek();
      history.push(obj.get_it());
    }
  }
  public void after_it(Nonempty_Person_NList source, Person dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Person_NList source, Nonempty_Person_NList dest) {
    if (is_equal) {
      Nonempty_Person_NList obj = (Nonempty_Person_NList) history.peek();
      history.push(obj.get_next());
    }
  }
  public void after_next(Nonempty_Person_NList source, Nonempty_Person_NList dest) {
    if (is_equal) history.pop();
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
  }
  void universal_trv0_aft(UniversalVisitor _v_) {
    super.universal_trv0_aft(_v_);
  }
  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
}

