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

#ifndef __java_io_Reader__
#define __java_io_Reader__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace nio
    {
        class CharBuffer;
    }
  }
}

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

public: // actually protected
  Reader();
  Reader(::java::lang::Object *);
public:
  virtual jint read(JArray< jchar > *, jint, jint) = 0;
  virtual jint read(JArray< jchar > *);
  virtual jint read();
  virtual jint read(::java::nio::CharBuffer *);
  virtual void close() = 0;
  virtual jboolean markSupported();
  virtual void mark(jint);
  virtual void reset();
  virtual jboolean ready();
  virtual jlong skip(jlong);
public: // actually protected
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) lock;
public:
  static ::java::lang::Class class$;
};

#endif // __java_io_Reader__
