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

#ifndef __java_io_PrintStream__
#define __java_io_PrintStream__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
      namespace convert
      {
          class UnicodeToBytes;
      }
    }
  }
}

class java::io::PrintStream : public ::java::io::FilterOutputStream
{

public:
  PrintStream(::java::io::OutputStream *);
  PrintStream(::java::io::OutputStream *, jboolean);
  PrintStream(::java::io::File *);
  PrintStream(::java::io::File *, ::java::lang::String *);
  PrintStream(::java::lang::String *);
  PrintStream(::java::lang::String *, ::java::lang::String *);
  PrintStream(::java::io::OutputStream *, jboolean, ::java::lang::String *);
  virtual jboolean checkError();
public: // actually protected
  virtual void setError();
public:
  virtual void close();
  virtual void flush();
private:
  void print(::java::lang::String *, jboolean);
  void print(JArray< jchar > *, jint, jint, jboolean);
  void writeChars(JArray< jchar > *, jint, jint);
  void writeChars(::java::lang::String *, jint, jint);
public:
  virtual void print(jboolean);
  virtual void print(jint);
  virtual void print(jlong);
  virtual void print(jfloat);
  virtual void print(jdouble);
  virtual void print(::java::lang::Object *);
  virtual void print(::java::lang::String *);
  virtual void print(jchar);
  virtual void print(JArray< jchar > *);
  virtual void println();
  virtual void println(jboolean);
  virtual void println(jint);
  virtual void println(jlong);
  virtual void println(jfloat);
  virtual void println(jdouble);
  virtual void println(::java::lang::Object *);
  virtual void println(::java::lang::String *);
  virtual void println(jchar);
  virtual void println(JArray< jchar > *);
  virtual void write(jint);
  virtual void write(JArray< jbyte > *, jint, jint);
  virtual ::java::io::PrintStream * PrintStream$append(jchar);
  virtual ::java::io::PrintStream * PrintStream$append(::java::lang::CharSequence *);
  virtual ::java::io::PrintStream * PrintStream$append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::io::PrintStream * printf(::java::lang::String *, JArray< ::java::lang::Object * > *);
  virtual ::java::io::PrintStream * printf(::java::util::Locale *, ::java::lang::String *, JArray< ::java::lang::Object * > *);
  virtual ::java::io::PrintStream * format(::java::lang::String *, JArray< ::java::lang::Object * > *);
  virtual ::java::io::PrintStream * format(::java::util::Locale *, ::java::lang::String *, JArray< ::java::lang::Object * > *);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint);
  virtual ::java::lang::Appendable * append(::java::lang::CharSequence *);
  virtual ::java::lang::Appendable * append(jchar);
private:
  static JArray< jchar > * line_separator;
public: // actually package-private
  ::gnu::gcj::convert::UnicodeToBytes * __attribute__((aligned(__alignof__( ::java::io::FilterOutputStream)))) converter;
  JArray< jchar > * work;
  JArray< jbyte > * work_bytes;
private:
  jboolean error_occurred;
  jboolean auto_flush;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_PrintStream__
