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

#ifndef __org_omg_DynamicAny_DynAnyFactoryPackage_InconsistentTypeCodeHelper__
#define __org_omg_DynamicAny_DynAnyFactoryPackage_InconsistentTypeCodeHelper__

#pragma interface

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

class org::omg::DynamicAny::DynAnyFactoryPackage::InconsistentTypeCodeHelper : public ::java::lang::Object
{

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

#endif // __org_omg_DynamicAny_DynAnyFactoryPackage_InconsistentTypeCodeHelper__
