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

#ifndef __org_omg_CORBA_ULongLongSeqHolder__
#define __org_omg_CORBA_ULongLongSeqHolder__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace typecodes
      {
          class ArrayTypeCode;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
          class ULongLongSeqHolder;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
    }
  }
}

class org::omg::CORBA::ULongLongSeqHolder : public ::java::lang::Object
{

public:
  ULongLongSeqHolder();
  ULongLongSeqHolder(JArray< jlong > *);
  void _read(::org::omg::CORBA::portable::InputStream *);
  ::org::omg::CORBA::TypeCode * _type();
  void _write(::org::omg::CORBA::portable::OutputStream *);
  JArray< jlong > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
private:
  ::gnu::CORBA::typecodes::ArrayTypeCode * typecode;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_CORBA_ULongLongSeqHolder__
