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

#ifndef __org_omg_CORBA_PolicyErrorHelper__
#define __org_omg_CORBA_PolicyErrorHelper__

#pragma interface

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

class org::omg::CORBA::PolicyErrorHelper : public ::java::lang::Object
{

public:
  PolicyErrorHelper();
  static ::org::omg::CORBA::TypeCode * type();
  static void insert(::org::omg::CORBA::Any *, ::org::omg::CORBA::PolicyError *);
  static ::org::omg::CORBA::PolicyError * extract(::org::omg::CORBA::Any *);
  static ::java::lang::String * id();
  static ::org::omg::CORBA::PolicyError * read(::org::omg::CORBA::portable::InputStream *);
  static void write(::org::omg::CORBA::portable::OutputStream *, ::org::omg::CORBA::PolicyError *);
  static ::java::lang::Class class$;
};

#endif // __org_omg_CORBA_PolicyErrorHelper__
