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

#ifndef __gnu_CORBA_Poa_LocalDelegate__
#define __gnu_CORBA_Poa_LocalDelegate__

#pragma interface

#include <org/omg/CORBA_2_3/portable/Delegate.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
        class IOR;
      namespace Poa
      {
          class LocalDelegate;
          class gnuPOA;
          class gnuServantObject;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Context;
          class ContextList;
          class ExceptionList;
          class NVList;
          class NamedValue;
          class ORB;
          class Object;
          class Request;
        namespace portable
        {
            class InputStream;
            class InvokeHandler;
            class OutputStream;
        }
      }
      namespace PortableServer
      {
        namespace ServantLocatorPackage
        {
            class CookieHolder;
        }
      }
    }
  }
}

class gnu::CORBA::Poa::LocalDelegate : public ::org::omg::CORBA_2_3::portable::Delegate
{

public:
  LocalDelegate(::gnu::CORBA::Poa::gnuServantObject *, ::gnu::CORBA::Poa::gnuPOA *, JArray< jbyte > *);
  virtual ::gnu::CORBA::IOR * getIor();
  virtual ::org::omg::CORBA::Request * request(::org::omg::CORBA::Object *, ::java::lang::String *);
  virtual void release(::org::omg::CORBA::Object *);
  virtual jboolean is_equivalent(::org::omg::CORBA::Object *, ::org::omg::CORBA::Object *);
  virtual jboolean non_existent(::org::omg::CORBA::Object *);
  virtual jint hash(::org::omg::CORBA::Object *, jint);
  virtual jboolean is_a(::org::omg::CORBA::Object *, ::java::lang::String *);
  virtual ::org::omg::CORBA::Object * duplicate(::org::omg::CORBA::Object *);
  virtual ::org::omg::CORBA::Request * create_request(::org::omg::CORBA::Object *, ::org::omg::CORBA::Context *, ::java::lang::String *, ::org::omg::CORBA::NVList *, ::org::omg::CORBA::NamedValue *, ::org::omg::CORBA::ExceptionList *, ::org::omg::CORBA::ContextList *);
  virtual ::org::omg::CORBA::Request * create_request(::org::omg::CORBA::Object *, ::org::omg::CORBA::Context *, ::java::lang::String *, ::org::omg::CORBA::NVList *, ::org::omg::CORBA::NamedValue *);
  virtual ::org::omg::CORBA::Object * get_interface_def(::org::omg::CORBA::Object *);
  virtual ::org::omg::CORBA::portable::OutputStream * request(::org::omg::CORBA::Object *, ::java::lang::String *, jboolean);
  virtual ::org::omg::CORBA::portable::InvokeHandler * getHandler(::java::lang::String *, ::org::omg::PortableServer::ServantLocatorPackage::CookieHolder *);
  virtual ::org::omg::CORBA::ORB * orb(::org::omg::CORBA::Object *);
  virtual ::org::omg::CORBA::portable::InputStream * invoke(::org::omg::CORBA::Object *, ::org::omg::CORBA::portable::OutputStream *);
  virtual void releaseReply(::org::omg::CORBA::Object *, ::org::omg::CORBA::portable::InputStream *);
public: // actually package-private
  ::gnu::CORBA::Poa::gnuServantObject * __attribute__((aligned(__alignof__( ::org::omg::CORBA_2_3::portable::Delegate)))) object;
  ::java::lang::String * operation;
public:
  ::gnu::CORBA::Poa::gnuPOA * poa;
public: // actually package-private
  JArray< jbyte > * Id;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_Poa_LocalDelegate__
