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

#ifndef __java_text_AttributedCharacterIterator$Attribute__
#define __java_text_AttributedCharacterIterator$Attribute__

#pragma interface

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

class java::text::AttributedCharacterIterator$Attribute : public ::java::lang::Object
{

public: // actually protected
  AttributedCharacterIterator$Attribute(::java::lang::String *);
  virtual ::java::lang::String * getName();
  virtual ::java::lang::Object * readResolve();
public:
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -9142742483513960612LL;
public:
  static ::java::text::AttributedCharacterIterator$Attribute * LANGUAGE;
  static ::java::text::AttributedCharacterIterator$Attribute * READING;
  static ::java::text::AttributedCharacterIterator$Attribute * INPUT_METHOD_SEGMENT;
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
public:
  static ::java::lang::Class class$;
};

#endif // __java_text_AttributedCharacterIterator$Attribute__
