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

#ifndef __java_rmi_activation_ActivationID__
#define __java_rmi_activation_ActivationID__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace rmi
    {
        class Remote;
      namespace activation
      {
          class ActivationGroup;
          class ActivationID;
          class Activator;
      }
      namespace server
      {
          class UID;
      }
    }
  }
}

class java::rmi::activation::ActivationID : public ::java::lang::Object
{

public:
  ActivationID(::java::rmi::activation::Activator *);
  virtual ::java::rmi::Remote * activate(jboolean);
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
private:
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
public: // actually package-private
  static jboolean eq(::java::lang::Object *, ::java::lang::Object *);
public:
  virtual ::java::lang::String * toString();
public: // actually package-private
  static const jlong serialVersionUID = -4608673054848209235LL;
  ::java::rmi::activation::Activator * __attribute__((aligned(__alignof__( ::java::lang::Object)))) activator;
  ::java::rmi::server::UID * uid;
  ::java::rmi::activation::ActivationGroup * group;
public:
  static ::java::lang::Class class$;
};

#endif // __java_rmi_activation_ActivationID__
