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

#ifndef __org_omg_DynamicAny_DynAnySeqHelper__
#define __org_omg_DynamicAny_DynAnySeqHelper__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
      namespace DynamicAny
      {
          class DynAny;
          class DynAnySeqHelper;
      }
    }
  }
}

class org::omg::DynamicAny::DynAnySeqHelper : public ::java::lang::Object
{

public:
  DynAnySeqHelper();
  static ::org::omg::CORBA::TypeCode * type();
  static void insert(::org::omg::CORBA::Any *, JArray< ::org::omg::DynamicAny::DynAny * > *);
  static JArray< ::org::omg::DynamicAny::DynAny * > * extract(::org::omg::CORBA::Any *);
  static ::java::lang::String * id();
  static JArray< ::org::omg::DynamicAny::DynAny * > * read(::org::omg::CORBA::portable::InputStream *);
  static void write(::org::omg::CORBA::portable::OutputStream *, JArray< ::org::omg::DynamicAny::DynAny * > *);
  static ::java::lang::Class class$;
};

#endif // __org_omg_DynamicAny_DynAnySeqHelper__
