1 #ifndef REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66
4 #if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
16 enum REGEX_OP
{ REGEX_EMPTY
, REGEX_MATCH
, REGEX_RANGE
, REGEX_OR
, REGEX_AND
, REGEX_NOT
, REGEX_SEQ
};
18 // simplified regular expressions
19 // . Only straightforward matches (no repeated characters)
20 // . Only matches from start of string
26 RegEx(char a
, char z
);
27 RegEx(const std::string
& str
, REGEX_OP op
= REGEX_SEQ
);
30 friend RegEx
operator ! (const RegEx
& ex
);
31 friend RegEx
operator || (const RegEx
& ex1
, const RegEx
& ex2
);
32 friend RegEx
operator && (const RegEx
& ex1
, const RegEx
& ex2
);
33 friend RegEx
operator + (const RegEx
& ex1
, const RegEx
& ex2
);
35 bool Matches(char ch
) const;
36 bool Matches(const std::string
& str
) const;
37 bool Matches(const Stream
& in
) const;
38 template <typename Source
> bool Matches(const Source
& source
) const;
40 int Match(const std::string
& str
) const;
41 int Match(const Stream
& in
) const;
42 template <typename Source
> int Match(const Source
& source
) const;
47 template <typename Source
> bool IsValidSource(const Source
& source
) const;
48 template <typename Source
> int MatchUnchecked(const Source
& source
) const;
50 template <typename Source
> int MatchOpEmpty(const Source
& source
) const;
51 template <typename Source
> int MatchOpMatch(const Source
& source
) const;
52 template <typename Source
> int MatchOpRange(const Source
& source
) const;
53 template <typename Source
> int MatchOpOr(const Source
& source
) const;
54 template <typename Source
> int MatchOpAnd(const Source
& source
) const;
55 template <typename Source
> int MatchOpNot(const Source
& source
) const;
56 template <typename Source
> int MatchOpSeq(const Source
& source
) const;
61 std::vector
<RegEx
> m_params
;
65 #include "regeximpl.h"
67 #endif // REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66