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

#ifndef __gnu_CORBA_DynAn_gnuDynArray__
#define __gnu_CORBA_DynAn_gnuDynArray__

#pragma interface

#include <gnu/CORBA/DynAn/DivideableAny.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace DynAn
      {
          class gnuDynAnyFactory;
          class gnuDynArray;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class ORB;
          class TypeCode;
      }
      namespace DynamicAny
      {
          class DynAny;
      }
    }
  }
}

class gnu::CORBA::DynAn::gnuDynArray : public ::gnu::CORBA::DynAn::DivideableAny
{

public:
  gnuDynArray(::org::omg::CORBA::TypeCode *, ::org::omg::CORBA::TypeCode *, ::gnu::CORBA::DynAn::gnuDynAnyFactory *, ::org::omg::CORBA::ORB *, jboolean);
  virtual void assign(::org::omg::DynamicAny::DynAny *);
  virtual ::org::omg::DynamicAny::DynAny * copy();
  virtual JArray< ::org::omg::CORBA::Any * > * get_elements();
  virtual JArray< ::org::omg::DynamicAny::DynAny * > * get_elements_as_dyn_any();
  virtual void set_elements_as_dyn_any(JArray< ::org::omg::DynamicAny::DynAny * > *);
  virtual void set_elements(JArray< ::org::omg::CORBA::Any * > *);
  virtual ::org::omg::CORBA::Any * to_any();
  virtual void from_any(::org::omg::CORBA::Any *);
public: // actually protected
  virtual void checkArrayValid(::java::lang::Object *);
private:
  static const jlong serialVersionUID = 1LL;
public: // actually package-private
  ::org::omg::CORBA::TypeCode * __attribute__((aligned(__alignof__( ::gnu::CORBA::DynAn::DivideableAny)))) official_components;
  ::org::omg::CORBA::TypeCode * final_components;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_DynAn_gnuDynArray__
