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

#ifndef __gnu_xml_dom_DomImpl__
#define __gnu_xml_dom_DomImpl__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
          class DomImpl;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Document;
          class DocumentType;
        namespace ls
        {
            class LSInput;
            class LSOutput;
            class LSParser;
            class LSSerializer;
        }
      }
    }
  }
}

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

public:
  DomImpl();
  virtual jboolean hasFeature(::java::lang::String *, ::java::lang::String *);
  virtual ::org::w3c::dom::DocumentType * createDocumentType(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  virtual ::org::w3c::dom::Document * createDocument(::java::lang::String *, ::java::lang::String *, ::org::w3c::dom::DocumentType *);
public: // actually protected
  virtual ::org::w3c::dom::Document * createDocument();
public:
  virtual ::java::lang::Object * getFeature(::java::lang::String *, ::java::lang::String *);
  virtual ::org::w3c::dom::ls::LSParser * createLSParser(jshort, ::java::lang::String *);
  virtual ::org::w3c::dom::ls::LSSerializer * createLSSerializer();
  virtual ::org::w3c::dom::ls::LSInput * createLSInput();
  virtual ::org::w3c::dom::ls::LSOutput * createLSOutput();
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_DomImpl__
