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

#ifndef __org_omg_PortableServer_ThreadPolicyValue__
#define __org_omg_PortableServer_ThreadPolicyValue__

#pragma interface

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

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace PortableServer
      {
          class ThreadPolicyValue;
      }
    }
  }
}

class org::omg::PortableServer::ThreadPolicyValue : public ::java::lang::Object
{

public: // actually protected
  ThreadPolicyValue(jint);
public:
  static ::org::omg::PortableServer::ThreadPolicyValue * from_int(jint);
  virtual ::java::lang::String * toString();
  virtual jint value();
private:
  static const jlong serialVersionUID = -8874988828297141512LL;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) _value;
public:
  static const jint _ORB_CTRL_MODEL = 0;
  static ::org::omg::PortableServer::ThreadPolicyValue * ORB_CTRL_MODEL;
  static const jint _SINGLE_THREAD_MODEL = 1;
  static ::org::omg::PortableServer::ThreadPolicyValue * SINGLE_THREAD_MODEL;
private:
  static JArray< ::org::omg::PortableServer::ThreadPolicyValue * > * enume;
  static JArray< ::java::lang::String * > * state_names;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_PortableServer_ThreadPolicyValue__
