STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
regex_nfa.tcc File Reference
#include <regex>

Functions

namespace std _GLIBCXX_VISIBILITY (default)
 

Detailed Description

This is an internal header file, included by other library headers. Do not attempt to use it directly. {regex}

Function Documentation

namespace std _GLIBCXX_VISIBILITY ( default  )
33 {
34 namespace __detail
35 {
36 _GLIBCXX_BEGIN_NAMESPACE_VERSION
37 
38 #ifdef _GLIBCXX_DEBUG
39 inline std::ostream& _State::
40 _M_print(std::ostream& ostr) const
41 {
42  switch (_M_opcode)
43  {
44  case _S_opcode_alternative:
45  ostr << "alt next=" << _M_next << " alt=" << _M_alt;
46  break;
47  case _S_opcode_subexpr_begin:
48  ostr << "subexpr begin next=" << _M_next << " index=" << _M_subexpr;
49  break;
50  case _S_opcode_subexpr_end:
51  ostr << "subexpr end next=" << _M_next << " index=" << _M_subexpr;
52  break;
53  case _S_opcode_match:
54  ostr << "match next=" << _M_next;
55  break;
56  case _S_opcode_accept:
57  ostr << "accept next=" << _M_next;
58  break;
59  default:
60  ostr << "unknown next=" << _M_next;
61  break;
62  }
63  return ostr;
64 }
65 
66 // Prints graphviz dot commands for state.
67 inline std::ostream& _State::
68 _M_dot(std::ostream& __ostr, _StateIdT __id) const
69 {
70  switch (_M_opcode)
71  {
72  case _S_opcode_alternative:
73  __ostr << __id << " [label=\"" << __id << "\\nALT\"];\n"
74  << __id << " -> " << _M_next
75  << " [label=\"epsilon\", tailport=\"s\"];\n"
76  << __id << " -> " << _M_alt
77  << " [label=\"epsilon\", tailport=\"n\"];\n";
78  break;
79  case _S_opcode_subexpr_begin:
80  __ostr << __id << " [label=\"" << __id << "\\nSBEGIN "
81  << _M_subexpr << "\"];\n"
82  << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
83  break;
84  case _S_opcode_subexpr_end:
85  __ostr << __id << " [label=\"" << __id << "\\nSEND "
86  << _M_subexpr << "\"];\n"
87  << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
88  break;
89  case _S_opcode_match:
90  __ostr << __id << " [label=\"" << __id << "\\nMATCH\"];\n"
91  << __id << " -> " << _M_next << " [label=\"<match>\"];\n";
92  break;
93  case _S_opcode_accept:
94  __ostr << __id << " [label=\"" << __id << "\\nACC\"];\n" ;
95  break;
96  default:
97  __ostr << __id << " [label=\"" << __id << "\\nUNK\"];\n"
98  << __id << " -> " << _M_next << " [label=\"?\"];\n";
99  break;
100  }
101  return __ostr;
102 }
103 
104 inline std::ostream& _Nfa::
105 _M_dot(std::ostream& __ostr) const
106 {
107  __ostr << "digraph _Nfa {\n"
108  << " rankdir=LR;\n";
109  for (unsigned int __i = 0; __i < this->size(); ++__i)
110  { this->at(__i)._M_dot(__ostr, __i); }
111  __ostr << "}\n";
112  return __ostr;
113 }
114 #endif
115 
116 inline _StateSeq& _StateSeq::
117 operator=(const _StateSeq& __rhs)
118 {
119  _M_start = __rhs._M_start;
120  _M_end1 = __rhs._M_end1;
121  _M_end2 = __rhs._M_end2;
122  return *this;
123 }
124 
125 inline void _StateSeq::
126 _M_push_back(_StateIdT __id)
127 {
128  if (_M_end1 != _S_invalid_state_id)
129  _M_nfa[_M_end1]._M_next = __id;
130  _M_end1 = __id;
131 }
132 
133 inline void _StateSeq::
134 _M_append(_StateIdT __id)
135 {
136  if (_M_end2 != _S_invalid_state_id)
137  {
138  if (_M_end2 == _M_end1)
139  _M_nfa[_M_end2]._M_alt = __id;
140  else
141  _M_nfa[_M_end2]._M_next = __id;
142  _M_end2 = _S_invalid_state_id;
143  }
144  if (_M_end1 != _S_invalid_state_id)
145  _M_nfa[_M_end1]._M_next = __id;
146  _M_end1 = __id;
147 }
148 
149 inline void _StateSeq::
150 _M_append(_StateSeq& __rhs)
151 {
152  if (_M_end2 != _S_invalid_state_id)
153  {
154  if (_M_end2 == _M_end1)
155  _M_nfa[_M_end2]._M_alt = __rhs._M_start;
156  else
157  _M_nfa[_M_end2]._M_next = __rhs._M_start;
158  _M_end2 = _S_invalid_state_id;
159  }
160  if (__rhs._M_end2 != _S_invalid_state_id)
161  _M_end2 = __rhs._M_end2;
162  if (_M_end1 != _S_invalid_state_id)
163  _M_nfa[_M_end1]._M_next = __rhs._M_start;
164  _M_end1 = __rhs._M_end1;
165 }
166 
167 // @todo implement this function.
168 inline _StateIdT _StateSeq::
169 _M_clone()
170 { return 0; }
171 
172 _GLIBCXX_END_NAMESPACE_VERSION
173 } // namespace __detail
174 } // namespace