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

#ifndef __gnu_javax_net_ssl_provider_SimpleSessionContext$1__
#define __gnu_javax_net_ssl_provider_SimpleSessionContext$1__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class SimpleSessionContext;
              class SimpleSessionContext$1;
          }
        }
      }
    }
  }
}

class gnu::javax::net::ssl::provider::SimpleSessionContext$1 : public ::java::lang::Object
{

public: // actually package-private
  SimpleSessionContext$1(::gnu::javax::net::ssl::provider::SimpleSessionContext *);
public:
  jboolean hasMoreElements();
  ::java::lang::Object * nextElement();
public: // actually package-private
  ::java::util::Iterator * __attribute__((aligned(__alignof__( ::java::lang::Object)))) it;
  ::gnu::javax::net::ssl::provider::SimpleSessionContext * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_SimpleSessionContext$1__
