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

#ifndef __gnu_CORBA_DynAn_gnuDynSequence__
#define __gnu_CORBA_DynAn_gnuDynSequence__

#pragma interface

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

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

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

public:
  gnuDynSequence(::org::omg::CORBA::TypeCode *, ::org::omg::CORBA::TypeCode *, ::gnu::CORBA::DynAn::gnuDynAnyFactory *, ::org::omg::CORBA::ORB *);
  virtual jint get_length();
  virtual void set_length(jint);
  virtual void assign(::org::omg::DynamicAny::DynAny *);
  virtual void set_elements_as_dyn_any(JArray< ::org::omg::DynamicAny::DynAny * > *);
  virtual void set_elements(JArray< ::org::omg::CORBA::Any * > *);
  virtual ::org::omg::DynamicAny::DynAny * copy();
public: // actually package-private
  virtual void checkBound(jint);
public: // actually protected
  virtual void checkArrayValid(::java::lang::Object *);
private:
  static const jlong serialVersionUID = 1LL;
public: // actually package-private
  jint __attribute__((aligned(__alignof__( ::gnu::CORBA::DynAn::gnuDynArray)))) bound;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_DynAn_gnuDynSequence__
