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

#ifndef __gnu_java_text_BaseBreakIterator__
#define __gnu_java_text_BaseBreakIterator__

#pragma interface

#include <java/text/BreakIterator.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace text
      {
          class BaseBreakIterator;
      }
    }
  }
  namespace java
  {
    namespace text
    {
        class CharacterIterator;
    }
  }
}

class gnu::java::text::BaseBreakIterator : public ::java::text::BreakIterator
{

public:
  BaseBreakIterator();
  virtual jint current();
  virtual jint first();
  virtual jint following(jint);
  virtual ::java::text::CharacterIterator * getText();
  virtual jint last();
  virtual jint next(jint);
  virtual void setText(::java::text::CharacterIterator *);
public: // actually protected
  ::java::text::CharacterIterator * __attribute__((aligned(__alignof__( ::java::text::BreakIterator)))) iter;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_text_BaseBreakIterator__
