Optimize std::sub_match comparisons using string_view-like type
commit7b4c9af9cc399946501c29f2f22af30545d0f132
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Jul 2018 20:31:11 +0000 (2 20:31 +0000)
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Jul 2018 20:31:11 +0000 (2 20:31 +0000)
tree0ce793bb9ddf0b5a31d715e478ac9641fd822081
parent00f7ba0313c2e368e1d3763e8c42f9d1c2fe888e
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@262318 138bc75d-0d04-0410-961f-82ee72b054a4
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