diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2020-08-28 16:05:56 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2020-08-29 08:12:33 +0200 |
commit | a1570b6052ae9c9349282027c9007b071589bce6 (patch) | |
tree | a9dac1f01e6dd7e23772d020294efaab33eb762d /include/rtl | |
parent | 927fad8d2407e6ffd34b843549271140c3abd1b2 (diff) |
Make the OUString ConstCharArrayDetector::TypeUtf16 overloads are actually used
0c8fa58a2d73702770687ed15b98822d09f96ac3 "Support ConstCharArrayDetector also
for UTF-16 arrays" had introduced those LIBO_INTERNAL_ONLY ctor and operator ==
overloads, but they never got called because the existing 'sal_Unicode const *'
overloads always won.
(The other function overloads introduced with
0c8fa58a2d73702770687ed15b98822d09f96ac3 should be unproblematic, as they do not
have any 'sal_Unicode const *' overload counterparts.)
Also fix the resulting loplugin:elidestringvar and loplugin:stringconstant
fallout. For one, those plugins look at the actual ctor overloads being used,
so had missed those cases that accidentally had used an unexpected overload.
And for another, the heuristic the plugins used to detect the
ConstCharArrayDetector overloads turned out to be too simplistic now and would
have started to cause false positives.
Change-Id: I4426890979fb832d53f391c7e1b62bc1ad501a65
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101582
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include/rtl')
-rw-r--r-- | include/rtl/ustring.hxx | 73 |
1 files changed, 65 insertions, 8 deletions
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx index 2f9518029be1..229ed22aeb45 100644 --- a/include/rtl/ustring.hxx +++ b/include/rtl/ustring.hxx @@ -211,6 +211,25 @@ public: /// @endcond #endif +#if defined LIBO_INTERNAL_ONLY + + template<typename T> OUString( + T const & value, + typename libreoffice_internal::CharPtrDetector<T, libreoffice_internal::Dummy>::TypeUtf16 + = libreoffice_internal::Dummy()): + pData(nullptr) + { rtl_uString_newFromStr(&pData, value); } + + template<typename T> OUString( + T & value, + typename + libreoffice_internal::NonConstCharArrayDetector<T, libreoffice_internal::Dummy>::TypeUtf16 + = libreoffice_internal::Dummy()): + pData(nullptr) + { rtl_uString_newFromStr(&pData, value); } + +#else + /** New string from a Unicode character buffer array. @@ -222,6 +241,8 @@ public: rtl_uString_newFromStr( &pData, value ); } +#endif + /** New string from a Unicode character buffer array. @@ -1744,17 +1765,9 @@ public: friend bool operator == ( const OUString& rStr1, const OUString& rStr2 ) { return rStr1.equals(rStr2); } - friend bool operator == ( const OUString& rStr1, const sal_Unicode * pStr2 ) - { return rStr1.compareTo( pStr2 ) == 0; } - friend bool operator == ( const sal_Unicode * pStr1, const OUString& rStr2 ) - { return OUString( pStr1 ).compareTo( rStr2 ) == 0; } friend bool operator != ( const OUString& rStr1, const OUString& rStr2 ) { return !(operator == ( rStr1, rStr2 )); } - friend bool operator != ( const OUString& rStr1, const sal_Unicode * pStr2 ) - { return !(operator == ( rStr1, pStr2 )); } - friend bool operator != ( const sal_Unicode * pStr1, const OUString& rStr2 ) - { return !(operator == ( pStr1, rStr2 )); } friend bool operator < ( const OUString& rStr1, const OUString& rStr2 ) { return rStr1.compareTo( rStr2 ) < 0; } @@ -1765,6 +1778,50 @@ public: friend bool operator >= ( const OUString& rStr1, const OUString& rStr2 ) { return rStr1.compareTo( rStr2 ) >= 0; } +#if defined LIBO_INTERNAL_ONLY + + template<typename T> friend typename libreoffice_internal::CharPtrDetector<T, bool>::TypeUtf16 + operator ==(OUString const & s1, T const & s2) { return s1.compareTo(s2) == 0; } + + template<typename T> + friend typename libreoffice_internal::NonConstCharArrayDetector<T, bool>::TypeUtf16 + operator ==(OUString const & s1, T & s2) { return s1.compareTo(s2) == 0; } + + template<typename T> friend typename libreoffice_internal::CharPtrDetector<T, bool>::TypeUtf16 + operator ==(T const & s1, OUString const & s2) { return s2.compareTo(s1) == 0; } + + template<typename T> + friend typename libreoffice_internal::NonConstCharArrayDetector<T, bool>::TypeUtf16 + operator ==(T & s1, OUString const & s2) { return s2.compareTo(s1) == 0; } + + template<typename T> friend typename libreoffice_internal::CharPtrDetector<T, bool>::TypeUtf16 + operator !=(OUString const & s1, T const & s2) { return !(s1 == s2); } + + template<typename T> + friend typename libreoffice_internal::NonConstCharArrayDetector<T, bool>::TypeUtf16 + operator !=(OUString const & s1, T & s2) { return !(s1 == s2); } + + template<typename T> friend typename libreoffice_internal::CharPtrDetector<T, bool>::TypeUtf16 + operator !=(T const & s1, OUString const & s2) { return !(s1 == s2); } + + template<typename T> + friend typename libreoffice_internal::NonConstCharArrayDetector<T, bool>::TypeUtf16 + operator !=(T & s1, OUString const & s2) { return !(s1 == s2); } + +#else + + friend bool operator == ( const OUString& rStr1, const sal_Unicode * pStr2 ) + { return rStr1.compareTo( pStr2 ) == 0; } + friend bool operator == ( const sal_Unicode * pStr1, const OUString& rStr2 ) + { return OUString( pStr1 ).compareTo( rStr2 ) == 0; } + + friend bool operator != ( const OUString& rStr1, const sal_Unicode * pStr2 ) + { return !(operator == ( rStr1, pStr2 )); } + friend bool operator != ( const sal_Unicode * pStr1, const OUString& rStr2 ) + { return !(operator == ( pStr1, rStr2 )); } + +#endif + /** * Compare string to an ASCII string literal. * |