scide: implement selectionLength for openDocument
[supercollider.git] / external_libraries / yaml-cpp-0.3.0 / src / regex.h
blob8722e62666bdfdb44e666a732da4a845bf7d3573
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
5 #pragma once
6 #endif
9 #include <vector>
10 #include <string>
12 namespace YAML
14 class Stream;
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
21 class RegEx
23 public:
24 RegEx();
25 RegEx(char ch);
26 RegEx(char a, char z);
27 RegEx(const std::string& str, REGEX_OP op = REGEX_SEQ);
28 ~RegEx() {}
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;
44 private:
45 RegEx(REGEX_OP op);
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;
58 private:
59 REGEX_OP m_op;
60 char m_a, m_z;
61 std::vector <RegEx> m_params;
65 #include "regeximpl.h"
67 #endif // REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66