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

#ifndef __gnu_java_util_regex_RETokenStart__
#define __gnu_java_util_regex_RETokenStart__

#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 RETokenStart;
        }
      }
    }
  }
}

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

public: // actually package-private
  RETokenStart(jint, ::java::lang::String *);
  RETokenStart(jint, ::java::lang::String *, jboolean);
  virtual jint getMaximumLength();
  virtual ::gnu::java::util::regex::REMatch * matchThis(::gnu::java::util::regex::CharIndexed *, ::gnu::java::util::regex::REMatch *);
  virtual jboolean returnsFixedLengthMatches();
  virtual jint findFixedLengthMatches(::gnu::java::util::regex::CharIndexed *, ::gnu::java::util::regex::REMatch *, jint);
  virtual void dump(::gnu::java::lang::CPStringBuilder *);
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::java::util::regex::REToken)))) newline;
  jboolean check_java_line_terminators;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_regex_RETokenStart__
