OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [bits/] [regex_grep_matcher.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// class template regex -*- C++ -*-
2
 
3
// Copyright (C) 2010, 2011, 2012 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
 
31
namespace 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
 
43
namespace __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>

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.