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

#ifndef __gnu_xml_stream_StartDocumentImpl__
#define __gnu_xml_stream_StartDocumentImpl__

#pragma interface

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

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

public: // actually protected
  StartDocumentImpl(::javax::xml::stream::Location *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, jboolean, jboolean, jboolean);
public:
  virtual jint getEventType();
  virtual ::java::lang::String * getSystemId();
  virtual ::java::lang::String * getCharacterEncodingScheme();
  virtual jboolean encodingSet();
  virtual jboolean isStandalone();
  virtual jboolean standaloneSet();
  virtual ::java::lang::String * getVersion();
  virtual void writeAsEncodedUnicode(::java::io::Writer *);
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::xml::stream::XMLEventImpl)))) systemId;
  ::java::lang::String * encoding;
  ::java::lang::String * xmlVersion;
  jboolean xmlStandalone;
  jboolean standaloneDeclared;
  jboolean encodingDeclared;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_StartDocumentImpl__
