• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2013.11/arm-none-eabi/include/c++/4.8.1/bits/
1// class template regex -*- C++ -*-
2
3// Copyright (C) 2010-2013 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23// <http://www.gnu.org/licenses/>.
24
25/**
26 *  @file bits/regex_grep_matcher.h
27 *  This is an internal header file, included by other library headers.
28 *  Do not attempt to use it directly. @headername{regex}
29 */
30
31namespace std _GLIBCXX_VISIBILITY(default)
32{
33_GLIBCXX_BEGIN_NAMESPACE_VERSION
34
35  template<typename _BiIter>
36    class sub_match;
37
38  template<typename _Bi_iter, typename _Allocator>
39    class match_results;
40
41_GLIBCXX_END_NAMESPACE_VERSION
42
43namespace __detail
44{
45_GLIBCXX_BEGIN_NAMESPACE_VERSION
46
47  /**
48   *  @defgroup regex-detail Base and Implementation Classes
49   *  @ingroup regex
50   *  @{
51   */
52
53  /// A _Results facade specialized for wrapping a templated match_results.
54  template<typename _FwdIterT, typename _Alloc>
55    class _SpecializedResults
56    : public _Results
57    {
58    public:
59      _SpecializedResults(const _Automaton::_SizeT __size,
60			  const _SpecializedCursor<_FwdIterT>& __cursor,
61			  match_results<_FwdIterT, _Alloc>& __m);
62
63      void
64      _M_set_pos(int __i, int __j, const _PatternCursor& __pc);
65
66      void
67      _M_set_matched(int __i, bool __is_matched)
68      { _M_results.at(__i).matched = __is_matched; }
69
70    private:
71      match_results<_FwdIterT, _Alloc>& _M_results;
72    };
73
74  template<typename _FwdIterT, typename _Alloc>
75    _SpecializedResults<_FwdIterT, _Alloc>::
76    _SpecializedResults(const _Automaton::_SizeT __size,
77    			const _SpecializedCursor<_FwdIterT>& __cursor,
78                        match_results<_FwdIterT, _Alloc>& __m)
79    : _M_results(__m)
80    {
81      _M_results.clear();
82      _M_results.reserve(__size + 2);
83      _M_results.resize(__size);
84      typename match_results<_FwdIterT, _Alloc>::value_type __sm;
85      __sm.first = __sm.second = __cursor._M_begin();
86      _M_results.push_back(__sm);
87      __sm.first = __sm.second = __cursor._M_end();
88      _M_results.push_back(__sm);
89    }
90
91  template<typename _FwdIterT, typename _Alloc>
92    void
93    _SpecializedResults<_FwdIterT, _Alloc>::
94    _M_set_pos(int __i, int __j, const _PatternCursor& __pc)
95    {
96      typedef const _SpecializedCursor<_FwdIterT>& _CursorT;
97      _CursorT __c = static_cast<_CursorT>(__pc);
98      if (__j == 0)
99	_M_results.at(__i).first = __c._M_pos();
100      else
101	_M_results.at(__i).second = __c._M_pos()+1;
102    }
103
104  /// A stack of states used in evaluating the NFA.
105  typedef std::stack<_StateIdT, std::vector<_StateIdT> > _StateStack;
106
107  /// Executes a regular expression NFA/DFA over a range using a
108  /// variant of the parallel execution algorithm featured in the grep
109  /// utility, modified to use Laurikari tags.
110  class _Grep_matcher
111  {
112  public:
113    _Grep_matcher(_PatternCursor&                   __p,
114		  _Results&                         __r,
115		  const _AutomatonPtr&              __automaton,
116		  regex_constants::match_flag_type  __flags);
117
118  private:
119    _StateSet
120    _M_e_closure(_StateIdT __i);
121
122    _StateSet
123    _M_e_closure(const _StateSet& __s);
124
125    _StateSet
126    _M_e_closure(_StateStack& __stack, const _StateSet& __s);
127
128    const std::shared_ptr<_Nfa>        _M_nfa;
129    _PatternCursor&                    _M_pattern;
130    _Results&                          _M_results;
131  };
132
133 //@} regex-detail
134_GLIBCXX_END_NAMESPACE_VERSION
135} // namespace __detail
136} // namespace std
137
138#include <bits/regex_grep_matcher.tcc>
139