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

#ifndef __gnu_classpath_jdwp_event_EventManager__
#define __gnu_classpath_jdwp_event_EventManager__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace classpath
    {
      namespace jdwp
      {
        namespace event
        {
            class Event;
            class EventManager;
            class EventRequest;
        }
      }
    }
  }
}

class gnu::classpath::jdwp::event::EventManager : public ::java::lang::Object
{

public:
  static ::gnu::classpath::jdwp::event::EventManager * getDefault();
private:
  EventManager();
public:
  virtual JArray< ::gnu::classpath::jdwp::event::EventRequest * > * getEventRequests(::gnu::classpath::jdwp::event::Event *);
  virtual void requestEvent(::gnu::classpath::jdwp::event::EventRequest *);
  virtual void deleteRequest(jbyte, jint);
  virtual void clearRequests(jbyte);
  virtual ::gnu::classpath::jdwp::event::EventRequest * getRequest(jbyte, jint);
  virtual ::java::util::Collection * getRequests(jbyte);
private:
  static ::gnu::classpath::jdwp::event::EventManager * _instance;
  ::java::util::Hashtable * __attribute__((aligned(__alignof__( ::java::lang::Object)))) _requests;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_classpath_jdwp_event_EventManager__
