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

#ifndef __java_text_BreakIterator__
#define __java_text_BreakIterator__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace text
    {
        class BreakIterator;
        class CharacterIterator;
    }
  }
}

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

public: // actually protected
  BreakIterator();
public:
  virtual ::java::lang::Object * clone();
  virtual jint current() = 0;
  virtual jint first() = 0;
  virtual jint following(jint) = 0;
  static JArray< ::java::util::Locale * > * getAvailableLocales();
private:
  static ::java::text::BreakIterator * getInstance(::java::lang::String *, ::java::util::Locale *);
public:
  static ::java::text::BreakIterator * getCharacterInstance();
  static ::java::text::BreakIterator * getCharacterInstance(::java::util::Locale *);
  static ::java::text::BreakIterator * getLineInstance();
  static ::java::text::BreakIterator * getLineInstance(::java::util::Locale *);
  static ::java::text::BreakIterator * getSentenceInstance();
  static ::java::text::BreakIterator * getSentenceInstance(::java::util::Locale *);
  virtual ::java::text::CharacterIterator * getText() = 0;
  static ::java::text::BreakIterator * getWordInstance();
  static ::java::text::BreakIterator * getWordInstance(::java::util::Locale *);
  virtual jboolean isBoundary(jint);
  virtual jint last() = 0;
  virtual jint next() = 0;
  virtual jint next(jint) = 0;
  virtual jint preceding(jint);
  virtual jint previous() = 0;
  virtual void setText(::java::lang::String *);
  virtual void setText(::java::text::CharacterIterator *) = 0;
  static const jint DONE = -1;
  static ::java::lang::Class class$;
};

#endif // __java_text_BreakIterator__
