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

#ifndef __gnu_java_util_regex_CharIndexedInputStream__
#define __gnu_java_util_regex_CharIndexedInputStream__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace util
      {
        namespace regex
        {
            class CharIndexed;
            class CharIndexedInputStream;
            class REMatch;
        }
      }
    }
  }
}

class gnu::java::util::regex::CharIndexedInputStream : public ::java::lang::Object
{

public: // actually package-private
  CharIndexedInputStream(::java::io::InputStream *, jint);
private:
  jboolean next();
public:
  virtual jchar charAt(jint);
  virtual jboolean move(jint);
  virtual jboolean isValid();
  virtual ::gnu::java::util::regex::CharIndexed * lookBehind(jint, jint);
  virtual jint length();
  virtual void setLastMatch(::gnu::java::util::regex::REMatch *);
  virtual ::gnu::java::util::regex::REMatch * getLastMatch();
  virtual void setHitEnd(::gnu::java::util::regex::REMatch *);
  virtual jboolean hitEnd();
  virtual jint getAnchor();
  virtual void setAnchor(jint);
  virtual jboolean move1(jint);
private:
  static const jint BUFFER_INCREMENT = 1024;
  static const jint UNKNOWN = 2147483647;
  ::java::io::BufferedInputStream * __attribute__((aligned(__alignof__( ::java::lang::Object)))) br;
  jint index;
  jint bufsize;
  jint end;
  jchar cached;
  JArray< jchar > * lookBehind__;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_regex_CharIndexedInputStream__
