summaryrefslogtreecommitdiff
path: root/include/rtl
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2020-08-28 16:05:56 +0200
committerStephan Bergmann <sbergman@redhat.com>2020-08-29 08:12:33 +0200
commita1570b6052ae9c9349282027c9007b071589bce6 (patch)
treea9dac1f01e6dd7e23772d020294efaab33eb762d /include/rtl
parent927fad8d2407e6ffd34b843549271140c3abd1b2 (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.hxx73
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.
*