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

#ifndef __org_omg_CosNaming_NamingContextExtPackage_InvalidAddressHolder__
#define __org_omg_CosNaming_NamingContextExtPackage_InvalidAddressHolder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace CosNaming
      {
        namespace NamingContextExtPackage
        {
            class InvalidAddress;
            class InvalidAddressHolder;
        }
      }
    }
  }
}

class org::omg::CosNaming::NamingContextExtPackage::InvalidAddressHolder : public ::java::lang::Object
{

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

#endif // __org_omg_CosNaming_NamingContextExtPackage_InvalidAddressHolder__
