stl_algobase.h (__equal<true>::equal): Check length instead of checking for null pointers.

* include/bits/stl_algobase.h (__equal<true>::equal): Check length
	instead of checking for null pointers.
	(__lexicographical_compare<true>::__lc): Only check shorter length.

From-SVN: r223886
This commit is contained in:
Jonathan Wakely 2015-05-30 12:44:02 +01:00 committed by Jonathan Wakely
parent 7d21a61eb5
commit 12fc64ac3a
2 changed files with 12 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2015-05-30 Jonathan Wakely <jwakely@redhat.com>
* include/bits/stl_algobase.h (__equal<true>::equal): Check length
instead of checking for null pointers.
(__lexicographical_compare<true>::__lc): Only check shorter length.
2015-05-29 François Dumont fdumont@gcc.gnu.org> 2015-05-29 François Dumont fdumont@gcc.gnu.org>
* include/debug/debug.h (_GLIBCXX_DEBUG_ASSERT, * include/debug/debug.h (_GLIBCXX_DEBUG_ASSERT,

View File

@ -812,11 +812,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static bool static bool
equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
{ {
if (__first1 == 0 || __first2 == 0) if (const size_t __len = (__last1 - __first1))
return __first1 == __last1; return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
return true;
return !__builtin_memcmp(__first1, __first2, sizeof(_Tp)
* (__last1 - __first1));
} }
}; };
@ -920,14 +918,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
const size_t __len1 = __last1 - __first1; const size_t __len1 = __last1 - __first1;
const size_t __len2 = __last2 - __first2; const size_t __len2 = __last2 - __first2;
if (__len1 && __len2) if (const size_t __len = std::min(__len1, __len2))
{ if (int __result = __builtin_memcmp(__first1, __first2, __len))
if (int __result = __builtin_memcmp(__first1, __first2,
std::min(__len1, __len2)))
{
return __result < 0; return __result < 0;
}
}
return __len1 < __len2; return __len1 < __len2;
} }
}; };