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

#ifndef __gnu_xml_xpath_NamespaceTest__
#define __gnu_xml_xpath_NamespaceTest__

#pragma interface

#include <gnu/xml/xpath/Test.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace xpath
      {
          class NamespaceTest;
          class Test;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class QName;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::xpath::NamespaceTest : public ::gnu::xml::xpath::Test
{

public:
  NamespaceTest(::javax::xml::namespace$::QName *, jboolean, jboolean);
  jboolean matchesAny();
  jboolean matchesAnyLocalName();
  jboolean matches(::org::w3c::dom::Node *, jint, jint);
  ::gnu::xml::xpath::Test * clone(::java::lang::Object *);
  jboolean references(::javax::xml::namespace$::QName *);
  ::java::lang::String * toString();
public: // actually package-private
  ::javax::xml::namespace$::QName * __attribute__((aligned(__alignof__( ::gnu::xml::xpath::Test)))) qName;
  jboolean anyLocalName;
  jboolean any;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_xpath_NamespaceTest__
