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

#ifndef __gnu_java_security_x509_ext_IssuerAlternativeNames__
#define __gnu_java_security_x509_ext_IssuerAlternativeNames__

#pragma interface

#include <gnu/java/security/x509/ext/Extension$Value.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class OID;
        namespace x509
        {
          namespace ext
          {
              class GeneralNames;
              class IssuerAlternativeNames;
          }
        }
      }
    }
  }
}

class gnu::java::security::x509::ext::IssuerAlternativeNames : public ::gnu::java::security::x509::ext::Extension$Value
{

public:
  IssuerAlternativeNames(JArray< jbyte > *);
  virtual ::java::util::List * getNames();
  virtual ::java::lang::String * toString();
  static ::gnu::java::security::OID * ID;
private:
  ::gnu::java::security::x509::ext::GeneralNames * __attribute__((aligned(__alignof__( ::gnu::java::security::x509::ext::Extension$Value)))) names;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_x509_ext_IssuerAlternativeNames__
