summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-07-27 17:25:04 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-07-27 17:25:04 +0000
commit08264865ba7668822c1ab7ab0fc99fd81f355177 (patch)
tree44b5ce6b12e7d56639fbe7683c39b8fc421dae62 /libstdc++-v3/include
parent4f409e20c24eaf3f94c9b1a86d8948f68675eb94 (diff)
downloadppe42-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.h15
-rw-r--r--libstdc++-v3/include/ext/sso_string_base.h24
-rw-r--r--libstdc++-v3/include/ext/vstring.h17
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 <
/**
OpenPOWER on IntegriCloud