/* jvmti_md.h
   Copyright (C) 2006 Free Software Foundation, Inc.

This file is part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
 
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.

As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */

#ifndef __GCJ_JVMTI_MD_H__
#define __GCJ_JVMTI_MD_H__

#ifdef __GCJ_JNI_IMPL__

/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building
   libgcj itself, and we include functions which should not be exposed
   to JVMTI users. */

/* The number of event slots needed to keep track of event reporting
   constraints for an environment. This will only work if the order of
   events listed in jvmtiEvent and jvmtiEventCallbacks is kept the same
   (which should not be a problem). */
#define EVENT_SLOTS \
  (int)(JVMTI_EVENT_VM_OBJECT_ALLOC - JVMTI_EVENT_VM_INIT + 1)

/* Contents of the jvmtiEnv; but only inside the implementation. */
#define _CLASSPATH_JVMTIENV_CONTENTS					\
  /* Event handlers registered via SetEventCallbacks */			\
  jvmtiEventCallbacks callbacks;					\
									\
  /* Array of event thread for which to report event. */		\
  /* NULL means all threads. One for each callback.   */		\
  jthread thread[EVENT_SLOTS];						\
  									\
  /* Array of notification modes for callbacks. */			\
  /* One for each callback.                     */			\
  bool enabled[EVENT_SLOTS];

#endif /* __GCJ_JNI_IMPL__ */

#endif /* __GCJ_JVMTI_MD_H__ */
