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

#ifndef __java_awt_geom_Area$AreaIterator__
#define __java_awt_geom_Area$AreaIterator__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace geom
      {
          class AffineTransform;
          class Area;
          class Area$AreaIterator;
      }
    }
  }
}

class java::awt::geom::Area$AreaIterator : public ::java::lang::Object
{

public:
  Area$AreaIterator(::java::awt::geom::Area *, ::java::awt::geom::AffineTransform *);
  virtual jint currentSegment(JArray< jdouble > *);
  virtual jint currentSegment(JArray< jfloat > *);
  virtual jint getWindingRule();
  virtual jboolean isDone();
  virtual void next();
private:
  ::java::util::Vector * __attribute__((aligned(__alignof__( ::java::lang::Object)))) segments;
  jint index;
  ::java::awt::geom::AffineTransform * at;
public: // actually package-private
  ::java::awt::geom::Area * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_Area$AreaIterator__
