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

#ifndef __gnu_java_beans_encoder_StAXWriter__
#define __gnu_java_beans_encoder_StAXWriter__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace encoder
        {
            class StAXWriter;
        }
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class XMLStreamWriter;
      }
    }
  }
}

class gnu::java::beans::encoder::StAXWriter : public ::java::lang::Object
{

public:
  StAXWriter(::java::io::OutputStream *);
  virtual void flush();
  virtual void close();
  virtual void writePreamble();
  virtual void writeEnd(jboolean);
  virtual void writeEndNoChildren();
  virtual void write(::java::lang::String *, jboolean);
  virtual void write(::java::lang::String *, ::java::lang::String *);
  virtual void writeNoChildren(::java::lang::String *, ::java::lang::String *);
  virtual void write(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, jboolean);
  virtual void write(::java::lang::String *, ::java::lang::String *, JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, jboolean);
  virtual void write(::java::lang::String *, JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, jboolean);
public: // actually package-private
  ::javax::xml::stream::XMLStreamWriter * __attribute__((aligned(__alignof__( ::java::lang::Object)))) writer;
  jint indent;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_encoder_StAXWriter__
