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

#ifndef __gnu_CORBA_Interceptor_ForwardRequestHolder__
#define __gnu_CORBA_Interceptor_ForwardRequestHolder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace Interceptor
      {
          class ForwardRequestHolder;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace PortableInterceptor
      {
          class ForwardRequest;
      }
    }
  }
}

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

public:
  ForwardRequestHolder();
  ForwardRequestHolder(::org::omg::PortableInterceptor::ForwardRequest *);
  virtual void _read(::org::omg::CORBA::portable::InputStream *);
  virtual void _write(::org::omg::CORBA::portable::OutputStream *);
  virtual ::org::omg::CORBA::TypeCode * _type();
  ::org::omg::PortableInterceptor::ForwardRequest * __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_Interceptor_ForwardRequestHolder__
