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

#ifndef __gnu_javax_net_ssl_provider_ProtocolVersion__
#define __gnu_javax_net_ssl_provider_ProtocolVersion__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class ProtocolVersion;
          }
        }
      }
    }
  }
}

class gnu::javax::net::ssl::provider::ProtocolVersion : public ::java::lang::Object
{

  ProtocolVersion(jint, jint);
public:
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * read(::java::io::InputStream *);
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * forName(::java::lang::String *);
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * getInstance(jint, jint);
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * getInstance(jshort);
  jint length();
  JArray< jbyte > * getEncoded();
  jint major();
  jint minor();
  jint rawValue();
  jboolean equals(::java::lang::Object *);
  jint hashCode();
  jint ProtocolVersion$compareTo(::gnu::javax::net::ssl::provider::ProtocolVersion *);
  ::java::lang::String * toString(::java::lang::String *);
  ::java::lang::String * toString();
  jint compareTo(::java::lang::Object *);
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * SSL_3;
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * TLS_1;
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * TLS_1_1;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) major__;
  jint minor__;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_ProtocolVersion__
