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

#ifndef __gnu_xml_stream_DTDImpl__
#define __gnu_xml_stream_DTDImpl__

#pragma interface

#include <gnu/xml/stream/XMLEventImpl.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class DTDImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class Location;
      }
    }
  }
}

class gnu::xml::stream::DTDImpl : public ::gnu::xml::stream::XMLEventImpl
{

public: // actually protected
  DTDImpl(::javax::xml::stream::Location *, ::java::lang::String *, ::java::lang::Object *, ::java::util::List *, ::java::util::List *);
public:
  virtual jint getEventType();
  virtual ::java::lang::String * getDocumentTypeDeclaration();
  virtual ::java::lang::Object * getProcessedDTD();
  virtual ::java::util::List * getNotations();
  virtual ::java::util::List * getEntities();
  virtual void writeAsEncodedUnicode(::java::io::Writer *);
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::xml::stream::XMLEventImpl)))) body;
  ::java::lang::Object * impl;
  ::java::util::List * notations;
  ::java::util::List * entities;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_DTDImpl__
