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

#ifndef __gnu_xml_transform_NodeNumberNode__
#define __gnu_xml_transform_NodeNumberNode__

#pragma interface

#include <gnu/xml/transform/AbstractNumberNode.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace transform
      {
          class NodeNumberNode;
          class Stylesheet;
          class TemplateNode;
      }
      namespace xpath
      {
          class Pattern;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::transform::NodeNumberNode : public ::gnu::xml::transform::AbstractNumberNode
{

public: // actually package-private
  NodeNumberNode(jint, ::gnu::xml::xpath::Pattern *, ::gnu::xml::xpath::Pattern *, ::gnu::xml::transform::TemplateNode *, ::java::lang::String *, jint, ::java::lang::String *, jint);
  ::gnu::xml::transform::TemplateNode * clone(::gnu::xml::transform::Stylesheet *);
  JArray< jint > * compute(::gnu::xml::transform::Stylesheet *, ::org::w3c::dom::Node *, jint, jint);
  jboolean countMatches(::org::w3c::dom::Node *, ::org::w3c::dom::Node *);
  jboolean fromMatches(::org::w3c::dom::Node *);
  jint getIndex(::org::w3c::dom::Node *, ::org::w3c::dom::Node *);
  static const jint SINGLE = 0;
  static const jint MULTIPLE = 1;
  static const jint ANY = 2;
  jint __attribute__((aligned(__alignof__( ::gnu::xml::transform::AbstractNumberNode)))) level;
  ::gnu::xml::xpath::Pattern * count;
  ::gnu::xml::xpath::Pattern * from;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_NodeNumberNode__
