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

#ifndef __gnu_xml_dom_DomXPathResult__
#define __gnu_xml_dom_DomXPathResult__

#pragma interface

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

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

public: // actually package-private
  DomXPathResult(::java::lang::Object *, jshort);
public:
  virtual jboolean getBooleanValue();
  virtual jboolean getInvalidIteratorState();
  virtual jdouble getNumberValue();
  virtual jshort getResultType();
  virtual ::org::w3c::dom::Node * getSingleNodeValue();
  virtual jint getSnapshotLength();
  virtual ::java::lang::String * getStringValue();
  virtual ::org::w3c::dom::Node * iterateNext();
  virtual ::org::w3c::dom::Node * snapshotItem(jint);
  virtual ::java::lang::String * toString();
private:
  ::java::lang::String * typeName(jshort);
public: // actually package-private
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
  jshort type;
  ::java::util::Iterator * iterator;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_DomXPathResult__
