re PR libstdc++/32907 (Inefficient operator== in std::string)
2007-07-27 Paolo Carlini <pcarlini@suse.de> PR libstdc++/32907 * include/bits/basic_string.h (operator==(const basic_string<_CharT>&, const basic_string<_CharT>&)): Add. (operator!=): Forward to operator==. * include/ext/vstring.h(operator==(const __versa_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT>, _Base>&, const __versa_string<_CharT, std::char_traits<_CharT>, std::allocator<_CharT>, _Base>&)): Add. (operator!=): Forward to operator==. * include/ext/sso_string_base.h (_M_compare): Remove. From-SVN: r126988
This commit is contained in:
parent
e4142b7c1b
commit
bd12160ab8
4 changed files with 47 additions and 35 deletions
|
@ -1,8 +1,22 @@
|
|||
2007-07-27 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR libstdc++/32907
|
||||
* include/bits/basic_string.h (operator==(const basic_string<_CharT>&,
|
||||
const basic_string<_CharT>&)): Add.
|
||||
(operator!=): Forward to operator==.
|
||||
* include/ext/vstring.h(operator==(const __versa_string<_CharT,
|
||||
std::char_traits<_CharT>, std::allocator<_CharT>, _Base>&,
|
||||
const __versa_string<_CharT, std::char_traits<_CharT>,
|
||||
std::allocator<_CharT>, _Base>&)): Add.
|
||||
(operator!=): Forward to operator==.
|
||||
|
||||
* include/ext/sso_string_base.h (_M_compare): Remove.
|
||||
|
||||
2007-07-25 Stephen M. Webb <stephenw@xandros.com>
|
||||
|
||||
Fixed abi_check for missing symbol size changes.
|
||||
* testsuite/util/testsuite_abi.cc: Changed local variable name to prevent
|
||||
member variable hiding.
|
||||
Fixed abi_check for missing symbol size changes.
|
||||
* testsuite/util/testsuite_abi.cc: Changed local variable name to
|
||||
prevent member variable hiding.
|
||||
|
||||
2007-07-25 John Davind Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
|
@ -26,8 +40,10 @@
|
|||
* testsuite/thread/pthread5.cc: Likewise.
|
||||
* testsuite/thread/pthread6.cc: Likewise.
|
||||
* testsuite/thread/pthread7-rope.cc: Likewise.
|
||||
* testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: Likewise.
|
||||
* testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: Likewise.
|
||||
* testsuite/tr1/2_general_utilities/shared_ptr/thread/
|
||||
default_weaktoshared.cc: Likewise.
|
||||
* testsuite/tr1/2_general_utilities/shared_ptr/thread/
|
||||
mutex_weaktoshared.cc: Likewise.
|
||||
|
||||
2007-07-16 Danny Smith <dannysmith@users.sourceforge.net>
|
||||
|
||||
|
|
|
@ -2157,6 +2157,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
|
||||
{ return __lhs.compare(__rhs) == 0; }
|
||||
|
||||
template<typename _CharT>
|
||||
inline
|
||||
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
|
||||
operator==(const basic_string<_CharT>& __lhs,
|
||||
const basic_string<_CharT>& __rhs)
|
||||
{ return (__lhs.size() == __rhs.size()
|
||||
&& !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
|
||||
__lhs.size())); }
|
||||
|
||||
/**
|
||||
* @brief Test equivalence of C string and string.
|
||||
* @param lhs C string.
|
||||
|
@ -2192,7 +2201,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
inline bool
|
||||
operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
|
||||
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
|
||||
{ return __rhs.compare(__lhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
/**
|
||||
* @brief Test difference of C string and string.
|
||||
|
@ -2204,7 +2213,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
inline bool
|
||||
operator!=(const _CharT* __lhs,
|
||||
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
|
||||
{ return __rhs.compare(__lhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
/**
|
||||
* @brief Test difference of string and C string.
|
||||
|
@ -2216,7 +2225,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
inline bool
|
||||
operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
|
||||
const _CharT* __rhs)
|
||||
{ return __lhs.compare(__rhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
// operator <
|
||||
/**
|
||||
|
|
|
@ -540,30 +540,6 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
_M_set_length(_M_length() - __n);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline bool
|
||||
__sso_string_base<char, std::char_traits<char>,
|
||||
std::allocator<char> >::
|
||||
_M_compare(const __sso_string_base& __rcs) const
|
||||
{
|
||||
if (this == &__rcs)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
template<>
|
||||
inline bool
|
||||
__sso_string_base<wchar_t, std::char_traits<wchar_t>,
|
||||
std::allocator<wchar_t> >::
|
||||
_M_compare(const __sso_string_base& __rcs) const
|
||||
{
|
||||
if (this == &__rcs)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif /* _SSO_STRING_BASE_H */
|
||||
|
|
|
@ -1867,6 +1867,17 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs)
|
||||
{ return __lhs.compare(__rhs) == 0; }
|
||||
|
||||
template<typename _CharT,
|
||||
template <typename, typename, typename> class _Base>
|
||||
inline typename __enable_if<std::__is_char<_CharT>::__value, bool>::__type
|
||||
operator==(const __versa_string<_CharT, std::char_traits<_CharT>,
|
||||
std::allocator<_CharT>, _Base>& __lhs,
|
||||
const __versa_string<_CharT, std::char_traits<_CharT>,
|
||||
std::allocator<_CharT>, _Base>& __rhs)
|
||||
{ return (__lhs.size() == __rhs.size()
|
||||
&& !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
|
||||
__lhs.size())); }
|
||||
|
||||
/**
|
||||
* @brief Test equivalence of C string and string.
|
||||
* @param lhs C string.
|
||||
|
@ -1905,7 +1916,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
inline bool
|
||||
operator!=(const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
|
||||
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs)
|
||||
{ return __rhs.compare(__lhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
/**
|
||||
* @brief Test difference of C string and string.
|
||||
|
@ -1918,7 +1929,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
inline bool
|
||||
operator!=(const _CharT* __lhs,
|
||||
const __versa_string<_CharT, _Traits, _Alloc, _Base>& __rhs)
|
||||
{ return __rhs.compare(__lhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
/**
|
||||
* @brief Test difference of string and C string.
|
||||
|
@ -1931,7 +1942,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
inline bool
|
||||
operator!=(const __versa_string<_CharT, _Traits, _Alloc, _Base>& __lhs,
|
||||
const _CharT* __rhs)
|
||||
{ return __lhs.compare(__rhs) != 0; }
|
||||
{ return !(__lhs == __rhs); }
|
||||
|
||||
// operator <
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue