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

#ifndef __org_omg_IOP_ServiceContextHolder__
#define __org_omg_IOP_ServiceContextHolder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace IOP
      {
          class ServiceContext;
          class ServiceContextHolder;
      }
    }
  }
}

class org::omg::IOP::ServiceContextHolder : public ::java::lang::Object
{

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

#endif // __org_omg_IOP_ServiceContextHolder__
