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

#ifndef __gnu_java_rmi_registry_RegistryImpl__
#define __gnu_java_rmi_registry_RegistryImpl__

#pragma interface

#include <java/rmi/server/UnicastRemoteObject.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace registry
        {
            class RegistryImpl;
        }
      }
    }
  }
  namespace java
  {
    namespace rmi
    {
        class Remote;
      namespace server
      {
          class RMIClientSocketFactory;
          class RMIServerSocketFactory;
      }
    }
  }
}

class gnu::java::rmi::registry::RegistryImpl : public ::java::rmi::server::UnicastRemoteObject
{

public:
  RegistryImpl(jint);
  RegistryImpl(jint, ::java::rmi::server::RMIClientSocketFactory *, ::java::rmi::server::RMIServerSocketFactory *);
  virtual ::java::rmi::Remote * lookup(::java::lang::String *);
  virtual void bind(::java::lang::String *, ::java::rmi::Remote *);
  virtual void unbind(::java::lang::String *);
  virtual void rebind(::java::lang::String *, ::java::rmi::Remote *);
  virtual JArray< ::java::lang::String * > * list();
  static void version();
  static void help();
  static void main(JArray< ::java::lang::String * > *);
private:
  ::java::util::Hashtable * __attribute__((aligned(__alignof__( ::java::rmi::server::UnicastRemoteObject)))) bindings;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_registry_RegistryImpl__
