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

#ifndef __gnu_CORBA_Poa_InvalidPolicyHolder__
#define __gnu_CORBA_Poa_InvalidPolicyHolder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace Poa
      {
          class InvalidPolicyHolder;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace PortableServer
      {
        namespace POAPackage
        {
            class InvalidPolicy;
        }
      }
    }
  }
}

class gnu::CORBA::Poa::InvalidPolicyHolder : public ::java::lang::Object
{

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

#endif // __gnu_CORBA_Poa_InvalidPolicyHolder__
