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

#ifndef __gnu_gcj_runtime_PersistentByteMap__
#define __gnu_gcj_runtime_PersistentByteMap__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
      namespace runtime
      {
          class PersistentByteMap;
          class PersistentByteMap$AccessMode;
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class MappedByteBuffer;
      namespace channels
      {
          class FileChannel;
      }
    }
  }
}

class gnu::gcj::runtime::PersistentByteMap : public ::java::lang::Object
{

  PersistentByteMap(::java::io::File *);
public:
  PersistentByteMap(::java::lang::String *, ::gnu::gcj::runtime::PersistentByteMap$AccessMode *);
  PersistentByteMap(::java::io::File *, ::gnu::gcj::runtime::PersistentByteMap$AccessMode *);
private:
  void init(::gnu::gcj::runtime::PersistentByteMap *, ::java::io::File *, jint, jint);
public:
  static ::gnu::gcj::runtime::PersistentByteMap * emptyPersistentByteMap(::java::io::File *, jint, jint);
private:
  jint getWord(jint);
  void putWord(jint, jint);
public:
  virtual ::java::util::Set * entrySet();
private:
  jint getBucket(jint);
  jint getKeyPos(jint);
  jint getValuePos(jint);
  void putKeyPos(jint, jint);
  void putValuePos(jint, jint);
  JArray< jbyte > * getBytes(jint);
  jint hash(JArray< jbyte > *);
public:
  virtual JArray< jbyte > * get(JArray< jbyte > *);
  virtual void put(JArray< jbyte > *, JArray< jbyte > *);
private:
  jint addBytes(JArray< jbyte > *);
public:
  virtual ::java::util::Iterator * iterator(jint);
  virtual jint size();
  virtual jint stringTableSize();
  virtual jint capacity();
  virtual void force();
  virtual ::java::io::File * getFile();
  virtual void close();
  virtual void putAll(::gnu::gcj::runtime::PersistentByteMap *);
public: // actually package-private
  static jint access$0(::gnu::gcj::runtime::PersistentByteMap *);
  static jint access$1(::gnu::gcj::runtime::PersistentByteMap *);
  static jint access$2(::gnu::gcj::runtime::PersistentByteMap *, jint);
  static jint access$3(::gnu::gcj::runtime::PersistentByteMap *, jint);
  static JArray< jbyte > * access$4(::gnu::gcj::runtime::PersistentByteMap *, jint);
private:
  ::java::nio::MappedByteBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buf;
  static const jint MAGIC = 0;
  static const jint VERSION = 4;
  static const jint CAPACITY = 8;
  static const jint TABLE_BASE = 12;
  static const jint STRING_BASE = 16;
  static const jint STRING_SIZE = 20;
  static const jint FILE_SIZE = 24;
  static const jint ELEMENTS = 28;
  static const jint INT_SIZE = 4;
  static const jint TABLE_ENTRY_SIZE = 8;
  jint capacity__;
  jint table_base;
  jint string_base;
  jint string_size;
  jint file_size;
  jint elements;
  jlong length;
  ::java::io::File * name;
  static const jint UNUSED_ENTRY = -1;
public:
  static const jint KEYS = 0;
  static const jint VALUES = 1;
  static const jint ENTRIES = 2;
private:
  ::java::util::HashMap * values;
public: // actually package-private
  ::java::nio::channels::FileChannel * fc;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_gcj_runtime_PersistentByteMap__
