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

#ifndef __org_omg_PortableServer_ServantActivatorHelper__
#define __org_omg_PortableServer_ServantActivatorHelper__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class Object;
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace PortableServer
      {
          class ServantActivator;
          class ServantActivatorHelper;
      }
    }
  }
}

class org::omg::PortableServer::ServantActivatorHelper : public ::java::lang::Object
{

public:
  ServantActivatorHelper();
  static ::org::omg::CORBA::TypeCode * type();
  static void insert(::org::omg::CORBA::Any *, ::org::omg::PortableServer::ServantActivator *);
  static ::org::omg::PortableServer::ServantActivator * extract(::org::omg::CORBA::Any *);
  static ::java::lang::String * id();
  static ::org::omg::PortableServer::ServantActivator * narrow(::org::omg::CORBA::Object *);
  static ::org::omg::PortableServer::ServantActivator * unchecked_narrow(::org::omg::CORBA::Object *);
  static ::org::omg::PortableServer::ServantActivator * read(::org::omg::CORBA::portable::InputStream *);
  static void write(::org::omg::CORBA::portable::OutputStream *, ::org::omg::PortableServer::ServantActivator *);
  static ::java::lang::Class class$;
};

#endif // __org_omg_PortableServer_ServantActivatorHelper__
