From patchwork Mon Feb 14 10:04:14 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 83054 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 85D00B710B for ; Mon, 14 Feb 2011 21:04:28 +1100 (EST) Received: (qmail 18277 invoked by alias); 14 Feb 2011 10:04:24 -0000 Received: (qmail 18108 invoked by uid 22791); 14 Feb 2011 10:04:22 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-iy0-f175.google.com (HELO mail-iy0-f175.google.com) (209.85.210.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 Feb 2011 10:04:16 +0000 Received: by iyj8 with SMTP id 8so4790615iyj.20 for ; Mon, 14 Feb 2011 02:04:15 -0800 (PST) MIME-Version: 1.0 Received: by 10.42.165.130 with SMTP id k2mr3895049icy.258.1297677855005; Mon, 14 Feb 2011 02:04:15 -0800 (PST) Received: by 10.42.230.68 with HTTP; Mon, 14 Feb 2011 02:04:14 -0800 (PST) Date: Mon, 14 Feb 2011 10:04:14 +0000 Message-ID: Subject: [v3] simplify std::regex NFA From: Jonathan Wakely To: "libstdc++" , gcc-patches Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org I noticed these redundant uses of std::function and std::bind while looking into PR 47724. 2011-02-14 Jonathan Wakely * 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 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 struct _StartTagger - : public _Tagger { explicit _StartTagger(int __i) @@ -98,7 +97,6 @@ namespace __regex template struct _EndTagger - : public _Tagger { explicit _EndTagger(int __i) @@ -123,7 +121,6 @@ namespace __regex // Matches a single character template struct _CharMatcher - : public _Matcher { typedef typename _TraitsT::char_type char_type; @@ -147,7 +144,6 @@ namespace __regex // Matches a character range (bracket expression) template 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_*