Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 namespace std _GLIBCXX_VISIBILITY(default)
00032 {
00033 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00034
00035 template<typename _BiIter>
00036 class sub_match;
00037
00038 template<typename _Bi_iter, typename _Allocator>
00039 class match_results;
00040
00041 namespace __regex
00042 {
00043
00044 template<typename _FwdIterT, typename _Alloc>
00045 class _SpecializedResults
00046 : public _Results
00047 {
00048 public:
00049 _SpecializedResults(const _Automaton::_SizeT __size,
00050 const _SpecializedCursor<_FwdIterT>& __cursor,
00051 match_results<_FwdIterT, _Alloc>& __m);
00052
00053 void
00054 _M_set_pos(int __i, int __j, const _PatternCursor& __pc);
00055
00056 void
00057 _M_set_matched(int __i, bool __is_matched)
00058 { _M_results.at(__i).matched = __is_matched; }
00059
00060 private:
00061 match_results<_FwdIterT, _Alloc>& _M_results;
00062 };
00063
00064 template<typename _FwdIterT, typename _Alloc>
00065 _SpecializedResults<_FwdIterT, _Alloc>::
00066 _SpecializedResults(const _Automaton::_SizeT __size,
00067 const _SpecializedCursor<_FwdIterT>& __cursor,
00068 match_results<_FwdIterT, _Alloc>& __m)
00069 : _M_results(__m)
00070 {
00071 _M_results.clear();
00072 _M_results.reserve(__size + 2);
00073 _M_results.resize(__size);
00074 typename match_results<_FwdIterT, _Alloc>::value_type __sm;
00075 __sm.first = __sm.second = __cursor._M_begin();
00076 _M_results.push_back(__sm);
00077 __sm.first = __sm.second = __cursor._M_end();
00078 _M_results.push_back(__sm);
00079 }
00080
00081 template<typename _FwdIterT, typename _Alloc>
00082 void
00083 _SpecializedResults<_FwdIterT, _Alloc>::
00084 _M_set_pos(int __i, int __j, const _PatternCursor& __pc)
00085 {
00086 typedef const _SpecializedCursor<_FwdIterT>& _CursorT;
00087 _CursorT __c = static_cast<_CursorT>(__pc);
00088 if (__j == 0)
00089 _M_results.at(__i).first = __c._M_pos();
00090 else
00091 _M_results.at(__i).second = __c._M_pos()+1;
00092 }
00093
00094
00095 typedef std::stack<_StateIdT, std::vector<_StateIdT> > _StateStack;
00096
00097
00098
00099
00100 class _Grep_matcher
00101 {
00102 public:
00103 _Grep_matcher(_PatternCursor& __p,
00104 _Results& __r,
00105 const _AutomatonPtr& __automaton,
00106 regex_constants::match_flag_type __flags);
00107
00108 private:
00109 _StateSet
00110 _M_e_closure(_StateIdT __i);
00111
00112 _StateSet
00113 _M_e_closure(const _StateSet& __s);
00114
00115 _StateSet
00116 _M_e_closure(_StateStack& __stack, const _StateSet& __s);
00117
00118 private:
00119 const std::shared_ptr<_Nfa> _M_nfa;
00120 _PatternCursor& _M_pattern;
00121 _Results& _M_results;
00122 };
00123
00124 }
00125
00126 _GLIBCXX_END_NAMESPACE_VERSION
00127 }
00128
00129 #include <bits/regex_grep_matcher.tcc>