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

#ifndef __java_io_Writer__
#define __java_io_Writer__

#pragma interface

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


class java::io::Writer : public ::java::lang::Object
{

public: // actually protected
  Writer();
  Writer(::java::lang::Object *);
public:
  virtual void flush() = 0;
  virtual void close() = 0;
  virtual void write(jint);
  virtual void write(JArray< jchar > *);
  virtual void write(JArray< jchar > *, jint, jint) = 0;
  virtual void write(::java::lang::String *);
  virtual void write(::java::lang::String *, jint, jint);
  virtual ::java::io::Writer * Writer$append(jchar);
  virtual ::java::io::Writer * Writer$append(::java::lang::CharSequence *);
  virtual ::java::io::Writer * Writer$append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *);
  virtual ::java::lang::Appendable * append(jchar);
public: // actually protected
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) lock;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_Writer__
