diff options
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 < /** |