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

#ifndef __gnu_javax_net_ssl_provider_TrustedAuthorities$AuthoritiesIterator__
#define __gnu_javax_net_ssl_provider_TrustedAuthorities$AuthoritiesIterator__

#pragma interface

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

class gnu::javax::net::ssl::provider::TrustedAuthorities$AuthoritiesIterator : public ::java::lang::Object
{

public:
  TrustedAuthorities$AuthoritiesIterator(::gnu::javax::net::ssl::provider::TrustedAuthorities *);
  virtual ::gnu::javax::net::ssl::provider::TrustedAuthorities$TrustedAuthority * TrustedAuthorities$AuthoritiesIterator$next();
  virtual jboolean hasNext();
  virtual void remove();
  virtual ::java::lang::Object * next();
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) index;
public: // actually package-private
  ::gnu::javax::net::ssl::provider::TrustedAuthorities * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_TrustedAuthorities$AuthoritiesIterator__
