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

#ifndef __org_ietf_jgss_Oid__
#define __org_ietf_jgss_Oid__

#pragma interface

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

extern "Java"
{
  namespace org
  {
    namespace ietf
    {
      namespace jgss
      {
          class Oid;
      }
    }
  }
}

class org::ietf::jgss::Oid : public ::java::lang::Object
{

public:
  Oid(::java::lang::String *);
  Oid(::java::io::InputStream *);
  Oid(JArray< jbyte > *);
public: // actually package-private
  Oid(JArray< jint > *);
public:
  virtual ::java::lang::String * toString();
  virtual JArray< jbyte > * getDER();
  virtual jboolean containedIn(JArray< ::org::ietf::jgss::Oid * > *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
private:
  static void encodeSubId(::java::io::OutputStream *, jint);
  static const jint OBJECT_IDENTIFIER = 6;
  static const jint RELATIVE_OID = 13;
  JArray< jint > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) components;
  JArray< jbyte > * derOid;
  ::java::lang::String * strOid;
  jboolean relative;
public:
  static ::java::lang::Class class$;
};

#endif // __org_ietf_jgss_Oid__
