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

#ifndef __gnu_xml_xpath_Selector__
#define __gnu_xml_xpath_Selector__

#pragma interface

#include <gnu/xml/xpath/Path.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace xpath
      {
          class Expr;
          class Selector;
          class Test;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class QName;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::xpath::Selector : public ::gnu::xml::xpath::Path
{

public:
  Selector(jint, ::java::util::List *);
  JArray< ::gnu::xml::xpath::Test * > * getTests();
  jboolean matches(::org::w3c::dom::Node *);
public: // actually package-private
  jboolean matches(::org::w3c::dom::Node *, jint, jint);
private:
  jint getContextPosition(::org::w3c::dom::Node *);
  jint getContextSize(::org::w3c::dom::Node *);
public:
  ::java::lang::Object * evaluate(::org::w3c::dom::Node *, jint, jint);
public: // actually package-private
  ::java::util::Collection * evaluate(::org::w3c::dom::Node *, ::java::util::Collection *);
  ::java::util::List * filterCandidates(::java::util::List *, jboolean);
  void addCandidates(::org::w3c::dom::Node *, ::java::util::Collection *);
  void addChildNodes(::org::w3c::dom::Node *, ::java::util::Collection *, jboolean);
  void addParentNode(::org::w3c::dom::Node *, ::java::util::Collection *, jboolean);
  void addFollowingNodes(::org::w3c::dom::Node *, ::java::util::Collection *, jboolean);
  void addPrecedingNodes(::org::w3c::dom::Node *, ::java::util::Collection *, jboolean);
  void addAttributes(::org::w3c::dom::Node *, ::java::util::Collection *);
  void addNamespaceAttributes(::org::w3c::dom::Node *, ::java::util::Collection *);
  jboolean isNamespaceAttribute(::org::w3c::dom::Node *);
public:
  ::gnu::xml::xpath::Expr * clone(::java::lang::Object *);
  jboolean references(::javax::xml::namespace$::QName *);
  ::java::lang::String * toString();
  static const jint ANCESTOR = 0;
  static const jint ANCESTOR_OR_SELF = 1;
  static const jint ATTRIBUTE = 2;
  static const jint CHILD = 3;
  static const jint DESCENDANT = 4;
  static const jint DESCENDANT_OR_SELF = 5;
  static const jint FOLLOWING = 6;
  static const jint FOLLOWING_SIBLING = 7;
  static const jint NAMESPACE = 8;
  static const jint PARENT = 9;
  static const jint PRECEDING = 10;
  static const jint PRECEDING_SIBLING = 11;
  static const jint SELF = 12;
public: // actually package-private
  jint __attribute__((aligned(__alignof__( ::gnu::xml::xpath::Path)))) axis;
  JArray< ::gnu::xml::xpath::Test * > * tests;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_xpath_Selector__
