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

#ifndef __gnu_CORBA_Interceptor_ClientRequestInterceptors__
#define __gnu_CORBA_Interceptor_ClientRequestInterceptors__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace Interceptor
      {
          class ClientRequestInterceptors;
          class Registrator;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace PortableInterceptor
      {
          class ClientRequestInfo;
          class ClientRequestInterceptor;
      }
    }
  }
}

class gnu::CORBA::Interceptor::ClientRequestInterceptors : public ::java::lang::Object
{

public:
  ClientRequestInterceptors(::gnu::CORBA::Interceptor::Registrator *);
  virtual void receive_exception(::org::omg::PortableInterceptor::ClientRequestInfo *);
  virtual void receive_other(::org::omg::PortableInterceptor::ClientRequestInfo *);
  virtual void receive_reply(::org::omg::PortableInterceptor::ClientRequestInfo *);
  virtual void send_poll(::org::omg::PortableInterceptor::ClientRequestInfo *);
  virtual void send_request(::org::omg::PortableInterceptor::ClientRequestInfo *);
  virtual void destroy();
  virtual ::java::lang::String * name();
private:
  JArray< ::org::omg::PortableInterceptor::ClientRequestInterceptor * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) interceptors;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_Interceptor_ClientRequestInterceptors__
