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

#ifndef __java_awt_font_TextHitInfo__
#define __java_awt_font_TextHitInfo__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace font
      {
          class TextHitInfo;
      }
    }
  }
}

class java::awt::font::TextHitInfo : public ::java::lang::Object
{

public: // actually package-private
  TextHitInfo(jint, jboolean);
public:
  jint getCharIndex();
  jboolean isLeadingEdge();
  jint getInsertionIndex();
  jint hashCode();
  jboolean equals(::java::lang::Object *);
  jboolean equals(::java::awt::font::TextHitInfo *);
  static ::java::awt::font::TextHitInfo * leading(jint);
  static ::java::awt::font::TextHitInfo * trailing(jint);
  static ::java::awt::font::TextHitInfo * beforeOffset(jint);
  static ::java::awt::font::TextHitInfo * afterOffset(jint);
  ::java::awt::font::TextHitInfo * getOtherHit();
  ::java::awt::font::TextHitInfo * getOffsetHit(jint);
  ::java::lang::String * toString();
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) charIndex;
  jboolean leadingEdge;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_font_TextHitInfo__
