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

#ifndef __java_io_PipedReader__
#define __java_io_PipedReader__

#pragma interface

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


class java::io::PipedReader : public ::java::io::Reader
{

public:
  PipedReader();
  PipedReader(::java::io::PipedWriter *);
  virtual void connect(::java::io::PipedWriter *);
public: // actually package-private
  virtual void receive(JArray< jchar > *, jint, jint);
public:
  virtual jint read();
  virtual jint read(JArray< jchar > *, jint, jint);
  virtual jboolean ready();
  virtual void close();
public: // actually package-private
  ::java::io::PipedWriter * __attribute__((aligned(__alignof__( ::java::io::Reader)))) source;
  jboolean closed;
  static const jint PIPE_SIZE = 2048;
  JArray< jchar > * buffer;
  jint in;
  jint out;
  JArray< jchar > * read_buf;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_PipedReader__
