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

#ifndef __gnu_gcj_runtime_SharedLibHelper__
#define __gnu_gcj_runtime_SharedLibHelper__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
        class Core;
        class RawData;
      namespace runtime
      {
          class SharedLibHelper;
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class URL;
    }
    namespace security
    {
        class CodeSource;
        class ProtectionDomain;
    }
  }
}

class gnu::gcj::runtime::SharedLibHelper : public ::java::lang::Object
{

public: // actually package-private
  SharedLibHelper(::java::lang::String *, ::java::lang::ClassLoader *, ::java::security::CodeSource *, ::java::security::ProtectionDomain *, jint);
public:
  static ::gnu::gcj::runtime::SharedLibHelper * findHelper(::java::lang::String *);
public: // actually package-private
  static void copyFile(::java::io::File *, ::java::io::File *);
public:
  static ::gnu::gcj::runtime::SharedLibHelper * findHelper(::java::lang::ClassLoader *, ::java::lang::String *, ::java::security::CodeSource *, jboolean);
  static ::gnu::gcj::runtime::SharedLibHelper * findHelper(::java::lang::ClassLoader *, ::java::lang::String *, ::java::security::CodeSource *, ::java::security::ProtectionDomain *, jboolean);
  virtual void finalize();
  virtual ::java::lang::Class * findClass(::java::lang::String *);
  virtual ::java::net::URL * findResource(::java::lang::String *);
  virtual ::gnu::gcj::Core * findCore(::java::lang::String *);
public: // actually package-private
  virtual void ensureInit();
  virtual jboolean hasResource(::java::lang::String *);
  virtual void init();
  virtual void ensureSupersLinked(::java::lang::Class *);
public:
  virtual ::java::lang::String * toString();
public: // actually package-private
  virtual void registerClass(::java::lang::String *, ::java::lang::Class *);
  ::gnu::gcj::RawData * __attribute__((aligned(__alignof__( ::java::lang::Object)))) handler;
  ::gnu::gcj::RawData * core_chain;
  ::java::util::HashMap * classMap;
  ::java::lang::ClassLoader * loader;
  ::java::lang::String * baseName;
  ::java::security::ProtectionDomain * domain;
  jint flags;
  jboolean initialized;
  static ::java::util::HashMap * map;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_gcj_runtime_SharedLibHelper__
