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

#ifndef __gnu_java_util_WeakIdentityHashMap$1__
#define __gnu_java_util_WeakIdentityHashMap$1__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace util
      {
          class WeakIdentityHashMap$1;
          class WeakIdentityHashMap$WeakBucket$WeakEntry;
          class WeakIdentityHashMap$WeakEntrySet;
      }
    }
  }
}

class gnu::java::util::WeakIdentityHashMap$1 : public ::java::lang::Object
{

public: // actually package-private
  WeakIdentityHashMap$1(::gnu::java::util::WeakIdentityHashMap$WeakEntrySet *);
private:
  void checkMod();
  ::gnu::java::util::WeakIdentityHashMap$WeakBucket$WeakEntry * findNext(::gnu::java::util::WeakIdentityHashMap$WeakBucket$WeakEntry *);
public:
  jboolean hasNext();
  ::java::lang::Object * next();
  void remove();
public: // actually package-private
  ::gnu::java::util::WeakIdentityHashMap$WeakBucket$WeakEntry * __attribute__((aligned(__alignof__( ::java::lang::Object)))) lastEntry;
  ::gnu::java::util::WeakIdentityHashMap$WeakBucket$WeakEntry * nextEntry;
  jint knownMod;
  ::gnu::java::util::WeakIdentityHashMap$WeakEntrySet * this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_WeakIdentityHashMap$1__
