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

#ifndef __java_util_zip_ZipFile$PartialInputStream__
#define __java_util_zip_ZipFile$PartialInputStream__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace nio
    {
      namespace charset
      {
          class Charset;
          class CharsetDecoder;
      }
    }
  }
}

class java::util::zip::ZipFile$PartialInputStream : public ::java::io::InputStream
{

public:
  ZipFile$PartialInputStream(::java::io::RandomAccessFile *, jint);
public: // actually package-private
  void setLength(jlong);
private:
  void fillBuffer();
public:
  jint available();
  jint read();
  jint read(JArray< jbyte > *, jint, jint);
  jlong skip(jlong);
public: // actually package-private
  void seek(jlong);
  void readFully(JArray< jbyte > *);
  void readFully(JArray< jbyte > *, jint, jint);
  jint readLeShort();
  jint readLeInt();
private:
  ::java::lang::String * decodeChars(JArray< jbyte > *, jint, jint);
public: // actually package-private
  ::java::lang::String * readString(jint);
public:
  void addDummyByte();
private:
  static ::java::nio::charset::Charset * UTF8CHARSET;
  ::java::nio::charset::CharsetDecoder * __attribute__((aligned(__alignof__( ::java::io::InputStream)))) utf8Decoder;
  ::java::io::RandomAccessFile * raf;
  JArray< jbyte > * buffer;
  jlong bufferOffset;
  jint pos;
  jlong end;
  jint dummyByteCount;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_zip_ZipFile$PartialInputStream__
