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

#ifndef __gnu_CORBA_DynAn_AbstractAny__
#define __gnu_CORBA_DynAn_AbstractAny__

#pragma interface

#include <org/omg/CORBA/LocalObject.h>
extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace DynAn
      {
          class AbstractAny;
          class ValueChangeListener;
          class gnuDynAnyFactory;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class ORB;
          class TypeCode;
      }
    }
  }
}

class gnu::CORBA::DynAn::AbstractAny : public ::org::omg::CORBA::LocalObject
{

public:
  AbstractAny(::org::omg::CORBA::TypeCode *, ::org::omg::CORBA::TypeCode *, ::gnu::CORBA::DynAn::gnuDynAnyFactory *, ::org::omg::CORBA::ORB *);
  virtual ::org::omg::CORBA::TypeCode * type();
  virtual ::org::omg::CORBA::Any * createAny();
public: // actually protected
  virtual void valueChanged();
public: // actually package-private
  virtual void checkType(::org::omg::CORBA::TypeCode *, ::org::omg::CORBA::TypeCode *);
  virtual ::java::lang::String * typeMismatch(::org::omg::CORBA::TypeCode *, ::org::omg::CORBA::TypeCode *);
  virtual ::java::lang::String * sizeMismatch(jint, jint);
private:
  static const jlong serialVersionUID = 1LL;
public:
  ::org::omg::CORBA::TypeCode * __attribute__((aligned(__alignof__( ::org::omg::CORBA::LocalObject)))) official_type;
  ::org::omg::CORBA::TypeCode * final_type;
  ::gnu::CORBA::DynAn::gnuDynAnyFactory * factory;
  ::org::omg::CORBA::ORB * orb;
public: // actually package-private
  jshort MINOR;
  static ::java::lang::String * EMPTY;
  static ::java::lang::String * SIZE;
  static ::java::lang::String * ISNULL;
  ::gnu::CORBA::DynAn::ValueChangeListener * listener;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_DynAn_AbstractAny__
