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

#ifndef __gnu_java_rmi_server_UnicastRef__
#define __gnu_java_rmi_server_UnicastRef__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace rmi
      {
        namespace server
        {
            class UnicastConnection;
            class UnicastConnectionManager;
            class UnicastRef;
        }
      }
    }
  }
  namespace java
  {
    namespace rmi
    {
        class Remote;
      namespace dgc
      {
          class Lease;
      }
      namespace server
      {
          class ObjID;
          class Operation;
          class RMIClientSocketFactory;
          class RemoteCall;
          class RemoteObject;
          class RemoteRef;
      }
    }
  }
}

class gnu::java::rmi::server::UnicastRef : public ::java::lang::Object
{

public:
  UnicastRef();
  UnicastRef(::java::rmi::server::ObjID *, ::java::lang::String *, jint, ::java::rmi::server::RMIClientSocketFactory *);
  UnicastRef(::java::rmi::server::ObjID *);
  virtual ::java::lang::Object * invoke(::java::rmi::Remote *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *, jlong);
  virtual ::java::rmi::dgc::Lease * notifyDGC(::java::rmi::dgc::Lease *);
public: // actually protected
  virtual ::java::lang::Object * invokeCommon(::java::rmi::Remote *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *, jint, jlong);
  virtual ::java::lang::Object * invokeCommon(::gnu::java::rmi::server::UnicastConnection *, ::java::rmi::Remote *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *, jint, jlong);
public:
  virtual ::java::rmi::server::RemoteCall * newCall(::java::rmi::server::RemoteObject *, JArray< ::java::rmi::server::Operation * > *, jint, jlong);
  virtual void invoke(::java::rmi::server::RemoteCall *);
  virtual void done(::java::rmi::server::RemoteCall *);
  virtual void writeExternal(::java::io::ObjectOutput *);
  virtual void readExternal(::java::io::ObjectInput *);
  virtual jboolean remoteEquals(::java::rmi::server::RemoteRef *);
  virtual jint remoteHashCode();
  virtual ::java::lang::String * getRefClass(::java::io::ObjectOutput *);
  virtual ::java::lang::String * remoteToString();
  virtual void dump(::gnu::java::rmi::server::UnicastConnection *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
private:
  static const jlong serialVersionUID = 1LL;
public:
  ::java::rmi::server::ObjID * __attribute__((aligned(__alignof__( ::java::lang::Object)))) objid;
public: // actually package-private
  ::gnu::java::rmi::server::UnicastConnectionManager * manager;
  static jlong dgcSequence;
  static ::java::rmi::server::ObjID * dgcId;
  JArray< ::java::rmi::server::ObjID * > * this_id;
  static jint DIRTY;
  static const jlong dgcInterfaceHash = -669196253586618813LL;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_rmi_server_UnicastRef__
