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

#ifndef __gnu_java_util_regex_RETokenWordBoundary__
#define __gnu_java_util_regex_RETokenWordBoundary__

#pragma interface

#include <gnu/java/util/regex/REToken.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
          class CPStringBuilder;
      }
      namespace util
      {
        namespace regex
        {
            class CharIndexed;
            class REMatch;
            class RETokenWordBoundary;
        }
      }
    }
  }
}

class gnu::java::util::regex::RETokenWordBoundary : public ::gnu::java::util::regex::REToken
{

public: // actually package-private
  RETokenWordBoundary(jint, jint, jboolean);
  jint getMaximumLength();
  ::gnu::java::util::regex::REMatch * matchThis(::gnu::java::util::regex::CharIndexed *, ::gnu::java::util::regex::REMatch *);
  jboolean returnsFixedLengthMatches();
  jint findFixedLengthMatches(::gnu::java::util::regex::CharIndexed *, ::gnu::java::util::regex::REMatch *, jint);
  void dump(::gnu::java::lang::CPStringBuilder *);
private:
  jboolean __attribute__((aligned(__alignof__( ::gnu::java::util::regex::REToken)))) negated;
  jint where;
public: // actually package-private
  static const jint BEGIN = 1;
  static const jint END = 2;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_regex_RETokenWordBoundary__
