Optimize std::sub_match comparisons using string_view-like type
authorJonathan Wakely <jwakely@redhat.com>
Mon, 2 Jul 2018 20:31:11 +0000 (21:31 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 2 Jul 2018 20:31:11 +0000 (21:31 +0100)
commite112d53acae3d4ce8783d8fd5f396cc45443c010
tree0ce793bb9ddf0b5a31d715e478ac9641fd822081
parentdbf96d49454d608b5cb9e39e341e13b60ec7965e
Optimize std::sub_match comparisons using string_view-like type

Avoid creation of unnecessary basic_string objects by using a simplified
string_view type and performing comparisons on that type instead. A
temporary basic_string object is still used when the sub_match's
iterators are not contiguous, in order to get an object that the
__string_view can reference.

* include/bits/regex.h (sub_match::operator string_type): Call str().
(sub_match::compare): Use _M_str() instead of str().
(sub_match::_M_compare): New public function.
(sub_match::__string_view): New helper type.
(sub_match::_M_str): New overloaded functions to avoid creating a
string_type object when not needed.
(operator==, operator!=, operator<, operator>, operator<=, operator>=):
Use sub_match::_M_compare instead of creating string_type objects.
Fix Doxygen comments.
* include/bits/regex_compiler.h (__has_contiguous_iter): Remove.
(__is_contiguous_normal_iter): Rename to __is_contiguous_iter and
simplify.
(__enable_if_contiguous_iter, __disable_if_contiguous_iter): Use
__enable_if_t.
* include/std/type_traits (__enable_if_t): Define for C++11.
* testsuite/28_regex/sub_match/compare.cc: New.
* testsuite/util/testsuite_iterators.h (remove_cv): Add transformation
trait.
(input_iterator_wrapper): Use remove_cv for value_type argument of
std::iterator base class.

From-SVN: r262318
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/regex.h
libstdc++-v3/include/bits/regex_compiler.h
libstdc++-v3/include/std/type_traits
libstdc++-v3/testsuite/28_regex/sub_match/compare.cc [new file with mode: 0644]
libstdc++-v3/testsuite/util/testsuite_iterators.h