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

#ifndef __java_io_CharArrayWriter__
#define __java_io_CharArrayWriter__

#pragma interface

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


class java::io::CharArrayWriter : public ::java::io::Writer
{

public:
  CharArrayWriter();
  CharArrayWriter(jint);
  virtual void close();
  virtual void flush();
  virtual void reset();
  virtual jint size();
  virtual JArray< jchar > * toCharArray();
  virtual ::java::lang::String * toString();
  virtual void write(jint);
  virtual void write(JArray< jchar > *, jint, jint);
  virtual void write(::java::lang::String *, jint, jint);
  virtual void writeTo(::java::io::Writer *);
  virtual ::java::io::CharArrayWriter * CharArrayWriter$append(jchar);
  virtual ::java::io::CharArrayWriter * CharArrayWriter$append(::java::lang::CharSequence *);
  virtual ::java::io::CharArrayWriter * CharArrayWriter$append(::java::lang::CharSequence *, jint, jint);
private:
  void resize(jint);
public:
  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_INITIAL_BUFFER_SIZE = 32;
public: // actually protected
  JArray< jchar > * __attribute__((aligned(__alignof__( ::java::io::Writer)))) buf;
  jint count;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_CharArrayWriter__
