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

#ifndef __gnu_java_rmi_server_RMIClassLoaderImpl$CacheKey__
#define __gnu_java_rmi_server_RMIClassLoaderImpl$CacheKey__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace server
        {
            class RMIClassLoaderImpl$CacheKey;
        }
      }
    }
  }
}

class gnu::java::rmi::server::RMIClassLoaderImpl$CacheKey : public ::java::lang::Object
{

public:
  RMIClassLoaderImpl$CacheKey(::java::lang::String *, ::java::lang::ClassLoader *);
  virtual jboolean equals(::java::lang::Object *);
private:
  jboolean equals(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) mCodeBase;
  ::java::lang::ClassLoader * mContextClassLoader;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_server_RMIClassLoaderImpl$CacheKey__
