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

#ifndef __java_text_FieldPosition__
#define __java_text_FieldPosition__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace text
    {
        class FieldPosition;
        class Format$Field;
    }
  }
}

class java::text::FieldPosition : public ::java::lang::Object
{

public:
  FieldPosition(::java::text::Format$Field *);
  FieldPosition(::java::text::Format$Field *, jint);
  FieldPosition(jint);
  virtual jint getField();
  virtual ::java::text::Format$Field * getFieldAttribute();
  virtual jint getBeginIndex();
  virtual void setBeginIndex(jint);
  virtual jint getEndIndex();
  virtual void setEndIndex(jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) field_id;
  jint begin;
  jint end;
  ::java::text::Format$Field * field_attribute;
public:
  static ::java::lang::Class class$;
};

#endif // __java_text_FieldPosition__
