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

#ifndef __java_lang_ThreadLocalMap__
#define __java_lang_ThreadLocalMap__

#pragma interface

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


class java::lang::ThreadLocalMap : public ::java::lang::Object
{

public: // actually package-private
  ThreadLocalMap();
private:
  void newEntryArray(jint);
  void overflow();
public:
  ::java::lang::Object * get(::java::lang::ThreadLocal *);
  void set(::java::lang::ThreadLocal *, ::java::lang::Object *);
  void remove(::java::lang::ThreadLocal *);
public: // actually package-private
  void clear();
public:
  void inherit(::java::lang::ThreadLocalMap *);
private:
  static const jint LOG_INITIAL_SIZE = 3;
  static jfloat MAX_OCCUPANCY;
  static jfloat TARGET_OCCUPANCY;
  static ::java::lang::ThreadLocalMap$Entry * deletedEntry;
  JArray< ::java::lang::ThreadLocalMap$Entry * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) entries;
  jint hashMask;
  jint count;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_ThreadLocalMap__
