* [v3] simplify std::regex NFA
@ 2011-02-14 10:41 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2011-02-14 10:41 UTC (permalink / raw)
To: libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 333 bytes --]
I noticed these redundant uses of std::function and std::bind while
looking into PR 47724.
2011-02-14 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/bits/regex_compiler.h: Remove unnecessary bind() calls.
* include/bits/regex_nfa.h: Remove unnecessary base classes.
tested x86_64-linux and committed to trunk
[-- Attachment #2: re-func.txt --]
[-- Type: text/plain, Size: 6158 bytes --]
Index: include/bits/regex_compiler.h
===================================================================
--- include/bits/regex_compiler.h (revision 169994)
+++ include/bits/regex_compiler.h (working copy)
@@ -1,6 +1,6 @@
// class template regex -*- C++ -*-
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -714,23 +714,18 @@ namespace __regex
: _M_traits(__traits), _M_scanner(__b, __e, __flags, _M_traits.getloc()),
_M_state_store(__flags)
{
- using std::bind;
- using std::placeholders::_1;
- using std::placeholders::_2;
typedef _StartTagger<_InIter, _TraitsT> _Start;
typedef _EndTagger<_InIter, _TraitsT> _End;
_StateSeq __r(_M_state_store,
- _M_state_store._M_insert_subexpr_begin(
- bind(_Start(0), _1, _2)));
+ _M_state_store._M_insert_subexpr_begin(_Start(0)));
_M_disjunction();
if (!_M_stack.empty())
{
__r._M_append(_M_stack.top());
_M_stack.pop();
}
- __r._M_append(_M_state_store.
- _M_insert_subexpr_end(0, bind(_End(0), _1, _2)));
+ __r._M_append(_M_state_store._M_insert_subexpr_end(0, _End(0)));
__r._M_append(_M_state_store._M_insert_accept());
}
@@ -905,9 +900,6 @@ namespace __regex
_Compiler<_InIter, _TraitsT>::
_M_atom()
{
- using std::bind;
- using std::placeholders::_1;
- using std::placeholders::_2;
typedef _CharMatcher<_InIter, _TraitsT> _CMatcher;
typedef _StartTagger<_InIter, _TraitsT> _Start;
typedef _EndTagger<_InIter, _TraitsT> _End;
@@ -915,26 +907,23 @@ namespace __regex
if (_M_match_token(_ScannerT::_S_token_anychar))
{
_M_stack.push(_StateSeq(_M_state_store,
- _M_state_store.
- _M_insert_matcher(bind(_AnyMatcher, _1))));
+ _M_state_store._M_insert_matcher
+ (_AnyMatcher)));
return true;
}
if (_M_match_token(_ScannerT::_S_token_ord_char))
{
- _M_stack.push(_StateSeq
- (_M_state_store, _M_state_store.
- _M_insert_matcher
- (bind(_CMatcher(_M_cur_value[0], _M_traits), _1))));
+ _M_stack.push(_StateSeq(_M_state_store,
+ _M_state_store._M_insert_matcher
+ (_CMatcher(_M_cur_value[0], _M_traits))));
return true;
}
if (_M_match_token(_ScannerT::_S_token_quoted_char))
{
// note that in the ECMA grammar, this case covers backrefs.
_M_stack.push(_StateSeq(_M_state_store,
- _M_state_store.
- _M_insert_matcher
- (bind(_CMatcher(_M_cur_value[0], _M_traits),
- _1))));
+ _M_state_store._M_insert_matcher
+ (_CMatcher(_M_cur_value[0], _M_traits))));
return true;
}
if (_M_match_token(_ScannerT::_S_token_backref))
@@ -947,7 +936,7 @@ namespace __regex
int __mark = _M_state_store._M_sub_count();
_StateSeq __r(_M_state_store,
_M_state_store.
- _M_insert_subexpr_begin(bind(_Start(__mark), _1, _2)));
+ _M_insert_subexpr_begin(_Start(__mark)));
this->_M_disjunction();
if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
__throw_regex_error(regex_constants::error_paren);
@@ -957,7 +946,7 @@ namespace __regex
_M_stack.pop();
}
__r._M_append(_M_state_store._M_insert_subexpr_end
- (__mark, bind(_End(__mark), _1, _2)));
+ (__mark, _End(__mark)));
_M_stack.push(__r);
return true;
}
@@ -969,8 +958,6 @@ namespace __regex
_Compiler<_InIter, _TraitsT>::
_M_bracket_expression()
{
- using std::bind;
- using std::placeholders::_1;
if (_M_match_token(_ScannerT::_S_token_bracket_begin))
{
_RMatcherT __matcher(_M_match_token(_ScannerT::_S_token_line_begin),
@@ -979,8 +966,7 @@ namespace __regex
|| !_M_match_token(_ScannerT::_S_token_bracket_end))
__throw_regex_error(regex_constants::error_brack);
_M_stack.push(_StateSeq(_M_state_store,
- _M_state_store._M_insert_matcher
- (bind(__matcher, _1))));
+ _M_state_store._M_insert_matcher(__matcher)));
return true;
}
return false;
Index: include/bits/regex_nfa.h
===================================================================
--- include/bits/regex_nfa.h (revision 169994)
+++ include/bits/regex_nfa.h (working copy)
@@ -1,6 +1,6 @@
// class template regex -*- C++ -*-
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -82,7 +82,6 @@ namespace __regex
template<typename _FwdIterT, typename _TraitsT>
struct _StartTagger
- : public _Tagger
{
explicit
_StartTagger(int __i)
@@ -98,7 +97,6 @@ namespace __regex
template<typename _FwdIterT, typename _TraitsT>
struct _EndTagger
- : public _Tagger
{
explicit
_EndTagger(int __i)
@@ -123,7 +121,6 @@ namespace __regex
// Matches a single character
template<typename _InIterT, typename _TraitsT>
struct _CharMatcher
- : public _Matcher
{
typedef typename _TraitsT::char_type char_type;
@@ -147,7 +144,6 @@ namespace __regex
// Matches a character range (bracket expression)
template<typename _InIterT, typename _TraitsT>
struct _RangeMatcher
- : public _Matcher
{
typedef typename _TraitsT::char_type _CharT;
typedef std::basic_string<_CharT> _StringT;
@@ -208,7 +204,7 @@ namespace __regex
typedef int _OpcodeT;
_OpcodeT _M_opcode; // type of outgoing transition
- _StateIdT _M_next; // outgoing tranition
+ _StateIdT _M_next; // outgoing transition
_StateIdT _M_alt; // for _S_opcode_alternative
unsigned int _M_subexpr; // for _S_opcode_subexpr_*
_Tagger _M_tagger; // for _S_opcode_subexpr_*
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-02-14 10:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-14 10:41 [v3] simplify std::regex NFA Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).