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

#ifndef __org_omg_CORBA_DefinitionKind__
#define __org_omg_CORBA_DefinitionKind__

#pragma interface

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

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class DefinitionKind;
      }
    }
  }
}

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

public: // actually protected
  DefinitionKind(jint);
public:
  virtual jint value();
  static ::org::omg::CORBA::DefinitionKind * from_int(jint);
private:
  static void fill_table();
  static const jlong serialVersionUID = -8601167576704143376LL;
public:
  static const jint _dk_none = 0;
  static const jint _dk_all = 1;
  static const jint _dk_Attribute = 2;
  static const jint _dk_Constant = 3;
  static const jint _dk_Exception = 4;
  static const jint _dk_Interface = 5;
  static const jint _dk_Module = 6;
  static const jint _dk_Operation = 7;
  static const jint _dk_Typedef = 8;
  static const jint _dk_Alias = 9;
  static const jint _dk_Struct = 10;
  static const jint _dk_Union = 11;
  static const jint _dk_Enum = 12;
  static const jint _dk_Primitive = 13;
  static const jint _dk_String = 14;
  static const jint _dk_Sequence = 15;
  static const jint _dk_Array = 16;
  static const jint _dk_Repository = 17;
  static const jint _dk_Wstring = 18;
  static const jint _dk_Fixed = 19;
  static const jint _dk_Value = 20;
  static const jint _dk_ValueBox = 21;
  static const jint _dk_ValueMember = 22;
  static const jint _dk_Native = 23;
  static const jint _dk_AbstractInterface = 24;
  static ::org::omg::CORBA::DefinitionKind * dk_none;
  static ::org::omg::CORBA::DefinitionKind * dk_all;
  static ::org::omg::CORBA::DefinitionKind * dk_Attribute;
  static ::org::omg::CORBA::DefinitionKind * dk_Constant;
  static ::org::omg::CORBA::DefinitionKind * dk_Exception;
  static ::org::omg::CORBA::DefinitionKind * dk_Interface;
  static ::org::omg::CORBA::DefinitionKind * dk_Module;
  static ::org::omg::CORBA::DefinitionKind * dk_Operation;
  static ::org::omg::CORBA::DefinitionKind * dk_Typedef;
  static ::org::omg::CORBA::DefinitionKind * dk_Alias;
  static ::org::omg::CORBA::DefinitionKind * dk_Struct;
  static ::org::omg::CORBA::DefinitionKind * dk_Union;
  static ::org::omg::CORBA::DefinitionKind * dk_Enum;
  static ::org::omg::CORBA::DefinitionKind * dk_Primitive;
  static ::org::omg::CORBA::DefinitionKind * dk_String;
  static ::org::omg::CORBA::DefinitionKind * dk_Sequence;
  static ::org::omg::CORBA::DefinitionKind * dk_Array;
  static ::org::omg::CORBA::DefinitionKind * dk_Repository;
  static ::org::omg::CORBA::DefinitionKind * dk_Wstring;
  static ::org::omg::CORBA::DefinitionKind * dk_Fixed;
  static ::org::omg::CORBA::DefinitionKind * dk_Value;
  static ::org::omg::CORBA::DefinitionKind * dk_ValueBox;
  static ::org::omg::CORBA::DefinitionKind * dk_ValueMember;
  static ::org::omg::CORBA::DefinitionKind * dk_Native;
  static ::org::omg::CORBA::DefinitionKind * dk_AbstractInterface;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) kind;
  static JArray< ::org::omg::CORBA::DefinitionKind * > * table;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_CORBA_DefinitionKind__
