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

#ifndef __gnu_classpath_jdwp_VMIdManager__
#define __gnu_classpath_jdwp_VMIdManager__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace classpath
    {
      namespace jdwp
      {
          class VMIdManager;
        namespace id
        {
            class ObjectId;
            class ReferenceTypeId;
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
  }
}

class gnu::classpath::jdwp::VMIdManager : public ::java::lang::Object
{

public:
  static ::gnu::classpath::jdwp::VMIdManager * getDefault();
private:
  VMIdManager();
  void _update();
public:
  virtual ::gnu::classpath::jdwp::id::ObjectId * getObjectId(::java::lang::Object *);
  virtual ::gnu::classpath::jdwp::id::ObjectId * get(jlong);
  virtual ::gnu::classpath::jdwp::id::ObjectId * readObjectId(::java::nio::ByteBuffer *);
  virtual ::gnu::classpath::jdwp::id::ReferenceTypeId * getReferenceTypeId(::java::lang::Class *);
  virtual ::gnu::classpath::jdwp::id::ReferenceTypeId * getReferenceType(jlong);
  virtual ::gnu::classpath::jdwp::id::ReferenceTypeId * readReferenceTypeId(::java::nio::ByteBuffer *);
private:
  static ::gnu::classpath::jdwp::VMIdManager * _idm;
  ::java::lang::ref::ReferenceQueue * __attribute__((aligned(__alignof__( ::java::lang::Object)))) _refQueue;
  ::java::util::Hashtable * _oidTable;
  ::java::util::Hashtable * _idTable;
  ::java::util::Hashtable * _classTable;
  ::java::util::Hashtable * _ridTable;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_classpath_jdwp_VMIdManager__
