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

#ifndef __java_io_StringWriter__
#define __java_io_StringWriter__

#pragma interface

#include <java/io/Writer.h>
#include <gcj/array.h>


class java::io::StringWriter : public ::java::io::Writer
{

public:
  virtual void close();
  virtual void flush();
  virtual ::java::lang::StringBuffer * getBuffer();
  StringWriter();
  StringWriter(jint);
  virtual ::java::lang::String * toString();
  virtual void write(jint);
  virtual void write(JArray< jchar > *, jint, jint);
  virtual void write(::java::lang::String *);
  virtual void write(::java::lang::String *, jint, jint);
  virtual ::java::io::StringWriter * StringWriter$append(jchar);
  virtual ::java::io::StringWriter * StringWriter$append(::java::lang::CharSequence *);
  virtual ::java::io::StringWriter * StringWriter$append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::io::Writer * Writer$append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *);
  virtual ::java::io::Writer * Writer$append(::java::lang::CharSequence *);
  virtual ::java::lang::Appendable * append(jchar);
  virtual ::java::io::Writer * Writer$append(jchar);
private:
  static const jint DEFAULT_BUFFER_SIZE = 16;
  ::java::lang::StringBuffer * __attribute__((aligned(__alignof__( ::java::io::Writer)))) buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_StringWriter__
