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

#ifndef __gnu_xml_transform_ParameterNode__
#define __gnu_xml_transform_ParameterNode__

#pragma interface

#include <gnu/xml/transform/TemplateNode.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace transform
      {
          class ParameterNode;
          class Stylesheet;
          class TemplateNode;
      }
      namespace xpath
      {
          class Expr;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace
      {
          class QName;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::transform::ParameterNode : public ::gnu::xml::transform::TemplateNode
{

public: // actually package-private
  ParameterNode(::javax::xml::namespace::QName *, ::gnu::xml::xpath::Expr *, jint);
  ::gnu::xml::transform::ParameterNode * ParameterNode$clone(::gnu::xml::transform::Stylesheet *);
  void doApply(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace::QName *, ::org::w3c::dom::Node *, jint, jint, ::org::w3c::dom::Node *, ::org::w3c::dom::Node *);
  ::java::lang::Object * getValue(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace::QName *, ::org::w3c::dom::Node *, jint, jint);
public:
  jboolean references(::javax::xml::namespace::QName *);
  jint ParameterNode$compareTo(::gnu::xml::transform::ParameterNode *);
  ::java::lang::String * toString();
public: // actually package-private
  ::gnu::xml::transform::TemplateNode * clone(::gnu::xml::transform::Stylesheet *);
public:
  jint compareTo(::java::lang::Object *);
public: // actually package-private
  ::javax::xml::namespace::QName * __attribute__((aligned(__alignof__( ::gnu::xml::transform::TemplateNode)))) name;
  ::gnu::xml::xpath::Expr * select;
  jint type;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_ParameterNode__
