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

#ifndef __gnu_xml_transform_ApplyTemplatesNode__
#define __gnu_xml_transform_ApplyTemplatesNode__

#pragma interface

#include <gnu/xml/transform/TemplateNode.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace transform
      {
          class ApplyTemplatesNode;
          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::ApplyTemplatesNode : public ::gnu::xml::transform::TemplateNode
{

public: // actually package-private
  ApplyTemplatesNode(::gnu::xml::xpath::Expr *, ::javax::xml::namespace::QName *, ::java::util::List *, ::java::util::List *, jboolean);
  ::gnu::xml::transform::TemplateNode * 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 *);
public:
  jboolean references(::javax::xml::namespace::QName *);
  ::java::lang::String * toString();
public: // actually package-private
  ::gnu::xml::xpath::Expr * __attribute__((aligned(__alignof__( ::gnu::xml::transform::TemplateNode)))) select;
  ::javax::xml::namespace::QName * mode;
  ::java::util::List * sortKeys;
  ::java::util::List * withParams;
  jboolean isDefault;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_ApplyTemplatesNode__
