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

#ifndef __gnu_xml_stream_XMLEventWriterImpl__
#define __gnu_xml_stream_XMLEventWriterImpl__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class XMLEventWriterImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace
      {
          class NamespaceContext;
      }
      namespace stream
      {
          class XMLEventReader;
          class XMLStreamWriter;
        namespace events
        {
            class XMLEvent;
        }
      }
    }
  }
}

class gnu::xml::stream::XMLEventWriterImpl : public ::java::lang::Object
{

public: // actually protected
  XMLEventWriterImpl(::javax::xml::stream::XMLStreamWriter *);
public:
  virtual void flush();
  virtual void close();
  virtual void add(::javax::xml::stream::events::XMLEvent *);
  virtual void add(::javax::xml::stream::XMLEventReader *);
  virtual ::java::lang::String * getPrefix(::java::lang::String *);
  virtual void setPrefix(::java::lang::String *, ::java::lang::String *);
  virtual void setDefaultNamespace(::java::lang::String *);
  virtual void setNamespaceContext(::javax::xml::namespace::NamespaceContext *);
  virtual ::javax::xml::namespace::NamespaceContext * getNamespaceContext();
public: // actually protected
  ::javax::xml::stream::XMLStreamWriter * __attribute__((aligned(__alignof__( ::java::lang::Object)))) writer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_XMLEventWriterImpl__
