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

#ifndef __gnu_java_awt_AWTUtilities$VisibleComponentList$VisibleComponentIterator__
#define __gnu_java_awt_AWTUtilities$VisibleComponentList$VisibleComponentIterator__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
          class AWTUtilities$VisibleComponentList;
          class AWTUtilities$VisibleComponentList$VisibleComponentIterator;
      }
    }
  }
}

class gnu::java::awt::AWTUtilities$VisibleComponentList$VisibleComponentIterator : public ::java::lang::Object
{

public: // actually package-private
  AWTUtilities$VisibleComponentList$VisibleComponentIterator(::gnu::java::awt::AWTUtilities$VisibleComponentList *, jint);
public:
  virtual jboolean hasNext();
  virtual ::java::lang::Object * next();
  virtual jboolean hasPrevious();
  virtual ::java::lang::Object * previous();
  virtual jint nextIndex();
  virtual jint previousIndex();
  virtual void remove();
  virtual void set(::java::lang::Object *);
  virtual void add(::java::lang::Object *);
public: // actually package-private
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) index;
  jint listIndex;
  ::gnu::java::awt::AWTUtilities$VisibleComponentList * this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_AWTUtilities$VisibleComponentList$VisibleComponentIterator__
