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

#ifndef __org_omg_PortableServer_POAManagerPackage_State__
#define __org_omg_PortableServer_POAManagerPackage_State__

#pragma interface

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

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace PortableServer
      {
        namespace POAManagerPackage
        {
            class State;
        }
      }
    }
  }
}

class org::omg::PortableServer::POAManagerPackage::State : public ::java::lang::Object
{

public: // actually protected
  State(jint);
public:
  static ::org::omg::PortableServer::POAManagerPackage::State * from_int(jint);
  virtual ::java::lang::String * toString();
  virtual jint value();
private:
  static const jlong serialVersionUID = -2451866258678193271LL;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) _value;
public:
  static const jint _HOLDING = 0;
  static ::org::omg::PortableServer::POAManagerPackage::State * HOLDING;
  static const jint _ACTIVE = 1;
  static ::org::omg::PortableServer::POAManagerPackage::State * ACTIVE;
  static const jint _DISCARDING = 2;
  static ::org::omg::PortableServer::POAManagerPackage::State * DISCARDING;
  static const jint _INACTIVE = 3;
  static ::org::omg::PortableServer::POAManagerPackage::State * INACTIVE;
private:
  static JArray< ::org::omg::PortableServer::POAManagerPackage::State * > * enume;
  static JArray< ::java::lang::String * > * state_names;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_PortableServer_POAManagerPackage_State__
