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

#ifndef __org_omg_PortableServer_ImplicitActivationPolicyValue__
#define __org_omg_PortableServer_ImplicitActivationPolicyValue__

#pragma interface

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

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

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

public: // actually protected
  ImplicitActivationPolicyValue(jint);
public:
  static ::org::omg::PortableServer::ImplicitActivationPolicyValue * from_int(jint);
  virtual ::java::lang::String * toString();
  virtual jint value();
private:
  static const jlong serialVersionUID = 3826572456602949295LL;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) _value;
public:
  static const jint _IMPLICIT_ACTIVATION = 0;
  static ::org::omg::PortableServer::ImplicitActivationPolicyValue * IMPLICIT_ACTIVATION;
  static const jint _NO_IMPLICIT_ACTIVATION = 1;
  static ::org::omg::PortableServer::ImplicitActivationPolicyValue * NO_IMPLICIT_ACTIVATION;
private:
  static JArray< ::org::omg::PortableServer::ImplicitActivationPolicyValue * > * enume;
  static JArray< ::java::lang::String * > * state_names;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_PortableServer_ImplicitActivationPolicyValue__
