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

#ifndef __java_util_zip_ZipInputStream__
#define __java_util_zip_ZipInputStream__

#pragma interface

#include <java/util/zip/InflaterInputStream.h>
#include <gcj/array.h>


class java::util::zip::ZipInputStream : public ::java::util::zip::InflaterInputStream
{

public:
  ZipInputStream(::java::io::InputStream *);
private:
  void fillBuf();
  jint readBuf(JArray< jbyte > *, jint, jint);
  void readFully(JArray< jbyte > *);
  jint readLeByte();
  jint readLeShort();
  jint readLeInt();
public:
  virtual ::java::util::zip::ZipEntry * getNextEntry();
private:
  void readDataDescr();
public:
  virtual void closeEntry();
  virtual jint available();
  virtual jint read();
  virtual jint read(JArray< jbyte > *, jint, jint);
  virtual void close();
public: // actually protected
  virtual ::java::util::zip::ZipEntry * createZipEntry(::java::lang::String *);
private:
  ::java::util::zip::CRC32 * __attribute__((aligned(__alignof__( ::java::util::zip::InflaterInputStream)))) crc;
  ::java::util::zip::ZipEntry * entry;
  jint csize;
  jint size;
  jint method;
  jint flags;
  jint avail;
  jboolean entryAtEOF;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_zip_ZipInputStream__
