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

#ifndef __gnu_java_security_x509_ext_Extension__
#define __gnu_java_security_x509_ext_Extension__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace der
        {
            class DERValue;
        }
        namespace x509
        {
          namespace ext
          {
              class Extension;
              class Extension$Value;
          }
        }
      }
    }
  }
}

class gnu::java::security::x509::ext::Extension : public ::java::lang::Object
{

public:
  Extension(JArray< jbyte > *);
  Extension(::gnu::java::security::OID *, ::gnu::java::security::x509::ext::Extension$Value *, jboolean);
  virtual ::gnu::java::security::OID * getOid();
  virtual jboolean isCritical();
  virtual jboolean isSupported();
  virtual ::gnu::java::security::x509::ext::Extension$Value * getValue();
  virtual JArray< jbyte > * getEncoded();
  virtual ::java::lang::String * toString();
  virtual ::gnu::java::security::der::DERValue * getDerValue();
private:
  void encode();
  static ::java::util::logging::Logger * log;
public: // actually protected
  ::gnu::java::security::OID * __attribute__((aligned(__alignof__( ::java::lang::Object)))) oid;
  jboolean critical;
  jboolean isSupported__;
  ::gnu::java::security::x509::ext::Extension$Value * value;
  JArray< jbyte > * encoded;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_x509_ext_Extension__
