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

#ifndef __gnu_java_awt_java2d_PolyEdge__
#define __gnu_java_awt_java2d_PolyEdge__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace java2d
        {
            class PolyEdge;
        }
      }
    }
  }
}

class gnu::java::awt::java2d::PolyEdge : public ::java::lang::Object
{

public: // actually package-private
  PolyEdge();
  PolyEdge(jint, jint, jint, jint, jint, jboolean);
  void init(jint, jint, jint, jint, jint, jboolean);
public:
  jint compareTo(::java::lang::Object *);
public: // actually package-private
  void intersect(jint, jint);
public:
  ::java::lang::String * toString();
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) x0;
  jint y0;
  jint x1;
  jint y1;
private:
  jint slope;
public: // actually package-private
  jint xIntersection;
  jboolean isClip;
  ::gnu::java::awt::java2d::PolyEdge * poolNext;
  ::gnu::java::awt::java2d::PolyEdge * scanlineNext;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_java2d_PolyEdge__
