diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-27 17:25:04 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-27 17:25:04 +0000 |
commit | 08264865ba7668822c1ab7ab0fc99fd81f355177 (patch) | |
tree | 44b5ce6b12e7d56639fbe7683c39b8fc421dae62 /libstdc++-v3/include | |
parent | 4f409e20c24eaf3f94c9b1a86d8948f68675eb94 (diff) | |
download | ppe42-gcc-08264865ba7668822c1ab7ab0fc99fd81f355177.tar.gz ppe42-gcc-08264865ba7668822c1ab7ab0fc99fd81f355177.zip |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126988 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/bits/basic_string.h | 15 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/sso_string_base.h | 24 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/vstring.h | 17 |
3 files changed, 26 insertions, 30 deletions
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 6317b17cab3..2dc3b37253e 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -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 < /** diff --git a/libstdc++-v3/include/ext/sso_string_base.h b/libstdc++-v3/include/ext/sso_string_base.h index 3b87879c4ca..0b576ba35b1 100644 --- a/libstdc++-v3/include/ext/sso_string_base.h +++ b/libstdc++-v3/include/ext/sso_string_base.h @@ -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 */ diff --git a/libstdc++-v3/include/ext/vstring.h b/libstdc++-v3/include/ext/vstring.h index b46a6bec607..bafa0449b23 100644 --- a/libstdc++-v3/include/ext/vstring.h +++ b/libstdc++-v3/include/ext/vstring.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 < /** |