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

#ifndef __gnu_java_util_regex_RESyntax__
#define __gnu_java_util_regex_RESyntax__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace util
      {
        namespace regex
        {
            class RESyntax;
        }
      }
    }
  }
}

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

public:
  RESyntax();
  ::gnu::java::util::regex::RESyntax * makeFinal();
  RESyntax(::gnu::java::util::regex::RESyntax *);
  jboolean get(jint);
  ::gnu::java::util::regex::RESyntax * set(jint);
  ::gnu::java::util::regex::RESyntax * clear(jint);
  ::gnu::java::util::regex::RESyntax * setLineSeparator(::java::lang::String *);
  ::java::lang::String * getLineSeparator();
public: // actually package-private
  static ::java::lang::String * DEFAULT_LINE_SEPARATOR;
private:
  ::java::util::BitSet * __attribute__((aligned(__alignof__( ::java::lang::Object)))) bits;
  jboolean isFinal;
  ::java::lang::String * lineSeparator;
public:
  static const jint RE_BACKSLASH_ESCAPE_IN_LISTS = 0;
  static const jint RE_BK_PLUS_QM = 1;
  static const jint RE_CHAR_CLASSES = 2;
  static const jint RE_CONTEXT_INDEP_ANCHORS = 3;
  static const jint RE_CONTEXT_INDEP_OPS = 4;
  static const jint RE_CONTEXT_INVALID_OPS = 5;
  static const jint RE_DOT_NEWLINE = 6;
  static const jint RE_DOT_NOT_NULL = 7;
  static const jint RE_INTERVALS = 8;
  static const jint RE_LIMITED_OPS = 9;
  static const jint RE_NEWLINE_ALT = 10;
  static const jint RE_NO_BK_BRACES = 11;
  static const jint RE_NO_BK_PARENS = 12;
  static const jint RE_NO_BK_REFS = 13;
  static const jint RE_NO_BK_VBAR = 14;
  static const jint RE_NO_EMPTY_RANGES = 15;
  static const jint RE_UNMATCHED_RIGHT_PAREN_ORD = 16;
  static const jint RE_HAT_LISTS_NOT_NEWLINE = 17;
  static const jint RE_STINGY_OPS = 18;
  static const jint RE_CHAR_CLASS_ESCAPES = 19;
  static const jint RE_PURE_GROUPING = 20;
  static const jint RE_LOOKAHEAD = 21;
  static const jint RE_STRING_ANCHORS = 22;
  static const jint RE_COMMENTS = 23;
  static const jint RE_CHAR_CLASS_ESC_IN_LISTS = 24;
  static const jint RE_POSSESSIVE_OPS = 25;
  static const jint RE_EMBEDDED_FLAGS = 26;
  static const jint RE_OCTAL_CHAR = 27;
  static const jint RE_HEX_CHAR = 28;
  static const jint RE_UNICODE_CHAR = 29;
  static const jint RE_NAMED_PROPERTY = 30;
  static const jint RE_NESTED_CHARCLASS = 31;
private:
  static const jint BIT_TOTAL = 32;
public:
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_AWK;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_ED;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_EGREP;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_EMACS;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_GREP;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_AWK;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_BASIC;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_EGREP;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_EXTENDED;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_MINIMAL_BASIC;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_POSIX_MINIMAL_EXTENDED;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_SED;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_PERL4;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_PERL4_S;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_PERL5;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_PERL5_S;
  static ::gnu::java::util::regex::RESyntax * RE_SYNTAX_JAVA_1_4;
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_regex_RESyntax__
