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

#ifndef __java_util_zip_ZipFile__
#define __java_util_zip_ZipFile__

#pragma interface

#include <java/lang/Object.h>

class java::util::zip::ZipFile : public ::java::lang::Object
{

  ::java::io::RandomAccessFile * openFile(::java::lang::String *, ::java::io::File *);
public:
  ZipFile(::java::lang::String *);
  ZipFile(::java::io::File *);
  ZipFile(::java::io::File *, jint);
private:
  void checkZipFile();
  void checkClosed();
  void readEntries();
public:
  virtual void close();
public: // actually protected
  virtual void finalize();
public:
  virtual ::java::util::Enumeration * entries();
private:
  ::java::util::LinkedHashMap * getEntries();
public:
  virtual ::java::util::zip::ZipEntry * getEntry(::java::lang::String *);
  virtual ::java::io::InputStream * getInputStream(::java::util::zip::ZipEntry *);
  virtual ::java::lang::String * getName();
  virtual jint size();
  static const jint OPEN_READ = 1;
  static const jint OPEN_DELETE = 4;
public: // actually package-private
  static const jint ENDNRD = 4;
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
  ::java::io::RandomAccessFile * raf;
  ::java::util::LinkedHashMap * entries__;
  jboolean closed;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_zip_ZipFile__
