
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_xml_dom_DomIterator__
#define __gnu_xml_dom_DomIterator__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
          class DomIterator;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
        namespace events
        {
            class Event;
        }
        namespace traversal
        {
            class NodeFilter;
        }
      }
    }
  }
}

class gnu::xml::dom::DomIterator : public ::java::lang::Object
{

public: // actually protected
  DomIterator(::org::w3c::dom::Node *, jint, ::org::w3c::dom::traversal::NodeFilter *, jboolean);
public:
  void detach();
  jboolean getExpandEntityReferences();
  ::org::w3c::dom::traversal::NodeFilter * getFilter();
  ::org::w3c::dom::Node * getRoot();
  jint getWhatToShow();
  ::org::w3c::dom::Node * nextNode();
  ::org::w3c::dom::Node * previousNode();
private:
  jboolean shouldShow(::org::w3c::dom::Node *);
  ::org::w3c::dom::Node * walk(jboolean);
  jboolean isLeaf(::org::w3c::dom::Node *);
  ::org::w3c::dom::Node * successor(::org::w3c::dom::Node *, jboolean);
public:
  void handleEvent(::org::w3c::dom::events::Event *);
private:
  ::org::w3c::dom::Node * __attribute__((aligned(__alignof__( ::java::lang::Object)))) reference;
  jboolean right;
  jboolean done;
  ::org::w3c::dom::Node * root;
  jint whatToShow;
  ::org::w3c::dom::traversal::NodeFilter * filter;
  jboolean expandEntityReferences;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_DomIterator__
