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

#ifndef __gnu_java_lang_InstrumentationImpl__
#define __gnu_java_lang_InstrumentationImpl__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
          class InstrumentationImpl;
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class ProtectionDomain;
    }
  }
}

class gnu::java::lang::InstrumentationImpl : public ::java::lang::Object
{

public: // actually package-private
  InstrumentationImpl();
public:
  void addTransformer(::java::lang::instrument::ClassFileTransformer *);
  jboolean removeTransformer(::java::lang::instrument::ClassFileTransformer *);
  jboolean isRedefineClassesSupported();
  void redefineClasses(JArray< ::java::lang::instrument::ClassDefinition * > *);
  JArray< ::java::lang::Class * > * getAllLoadedClasses();
  JArray< ::java::lang::Class * > * getInitiatedClasses(::java::lang::ClassLoader *);
  jlong getObjectSize(::java::lang::Object *);
  JArray< jbyte > * callTransformers(::java::lang::ClassLoader *, ::java::lang::String *, ::java::lang::Class *, ::java::security::ProtectionDomain *, JArray< jbyte > *);
private:
  ::java::util::ArrayList * __attribute__((aligned(__alignof__( ::java::lang::Object)))) transformers;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_lang_InstrumentationImpl__
