
// 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__
