Optimize std::advance for single increments

* include/bits/stl_iterator_base_funcs.h
	(__advance<_RandomAccessIterator, _Distance>): Optimize for next/prev
	cases where incrementing or decrementing a single step.

From-SVN: r248875
This commit is contained in:
Jonathan Wakely 2017-06-05 11:34:13 +01:00 committed by Jonathan Wakely
parent d08606ce6c
commit 6c24177862
2 changed files with 10 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2017-06-05 Jonathan Wakely <jwakely@redhat.com>
* include/bits/stl_iterator_base_funcs.h
(__advance<_RandomAccessIterator, _Distance>): Optimize for next/prev
cases where incrementing or decrementing a single step.
* include/bits/shared_ptr_base.h (__shared_ptr::owner_before)
(__weak_ptr::owner_before, _Sp_owner_less::operator()): Add noexcept
specifiers as per LWG 2873 and LWG 2942.

View File

@ -177,7 +177,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// concept requirements
__glibcxx_function_requires(_RandomAccessIteratorConcept<
_RandomAccessIterator>)
__i += __n;
if (__builtin_constant_p(__n) && __n == 1)
++__i;
else if (__builtin_constant_p(__n) && __n == -1)
--__i;
else
__i += __n;
}
/**