From 90c590812eecb3a0eb2748a132e304fa6c0ea0ad Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 5 Apr 2023 07:22:35 +0300 Subject: Simplify O(U)String::number implementation Change-Id: I059f0324597a90aee01c95170a48ac5578f3caee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150037 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- compilerplugins/clang/stringview.cxx | 4 +- compilerplugins/clang/test/stringview.cxx | 4 +- include/com/sun/star/uno/Any.h | 4 +- include/com/sun/star/uno/Any.hxx | 16 ++-- include/rtl/strbuf.hxx | 12 +-- include/rtl/string.hxx | 47 +++++----- include/rtl/stringconcat.hxx | 132 ++++------------------------ include/rtl/ustrbuf.hxx | 16 ++-- include/rtl/ustring.hxx | 51 ++++++----- sal/qa/rtl/strings/test_ostring_concat.cxx | 10 +-- sal/qa/rtl/strings/test_oustring_concat.cxx | 10 +-- 11 files changed, 105 insertions(+), 201 deletions(-) diff --git a/compilerplugins/clang/stringview.cxx b/compilerplugins/clang/stringview.cxx index 7d6d38ba3b60..4978c802c55b 100644 --- a/compilerplugins/clang/stringview.cxx +++ b/compilerplugins/clang/stringview.cxx @@ -196,9 +196,7 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr const* expr) break; } loplugin::TypeCheck tc(t); - if (tc.RvalueReference().Struct("StringNumberBase").Namespace("rtl").GlobalNamespace() - || tc.RvalueReference().Struct("OStringNumber").Namespace("rtl").GlobalNamespace() - || tc.RvalueReference().Struct("OUStringNumber").Namespace("rtl").GlobalNamespace() + if (tc.RvalueReference().Struct("StringNumber").Namespace("rtl").GlobalNamespace() || tc.ClassOrStruct("basic_string_view").StdNamespace()) { argType = expr->getArg(0)->IgnoreImplicit()->getType(); diff --git a/compilerplugins/clang/test/stringview.cxx b/compilerplugins/clang/test/stringview.cxx index f1a63a058bdf..d9e0508c0835 100644 --- a/compilerplugins/clang/test/stringview.cxx +++ b/compilerplugins/clang/test/stringview.cxx @@ -164,7 +164,7 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, OString call_view(OString(l1)); // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'std::string_view' (aka 'basic_string_view'), pass a 'std::string_view' [loplugin:stringview]}} call_view(OString(std::string_view("foo"))); - // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'OStringNumber', pass a 'std::string_view' [loplugin:stringview]}} + // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a '{{(rtl::)?}}StringNumber', pass a 'std::string_view' [loplugin:stringview]}} call_view(OString(OString::number(0))); // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'OStringConcat<{{(rtl::)?}}OString, {{(rtl::)?}}OString>' (aka 'StringConcat'), pass a 'std::string_view' via 'rtl::Concat2View' [loplugin:stringview]}} call_view(OString(s3 + s3)); @@ -188,7 +188,7 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, OString call_view(OUString(l2)); // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'std::u16string_view' (aka 'basic_string_view'), pass a 'std::u16string_view' [loplugin:stringview]}} call_view(OUString(std::u16string_view(u"foo"))); - // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'OUStringNumber', pass a 'std::u16string_view' [loplugin:stringview]}} + // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a '{{(rtl::)?}}StringNumber', pass a 'std::u16string_view' [loplugin:stringview]}} call_view(OUString(OUString::number(0))); // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'OUStringConcat<{{(rtl::)?}}OUString, {{(rtl::)?}}OUString>' (aka 'StringConcat'), pass a 'std::u16string_view' via 'rtl::Concat2View' [loplugin:stringview]}} call_view(OUString(s4 + s4)); diff --git a/include/com/sun/star/uno/Any.h b/include/com/sun/star/uno/Any.h index 181b58ae4b4a..14eb9035495f 100644 --- a/include/com/sun/star/uno/Any.h +++ b/include/com/sun/star/uno/Any.h @@ -87,8 +87,8 @@ public: explicit inline Any(rtl::OUStringConcat && value); template explicit Any(rtl::OUStringConcat const &) = delete; - template explicit inline Any(rtl::OUStringNumber && value); - template explicit Any(rtl::OUStringNumber const &) = delete; + template explicit inline Any(rtl::StringNumber && value); + template explicit Any(rtl::StringNumber const &) = delete; template explicit inline Any(const rtl::OUStringLiteral& value); #endif diff --git a/include/com/sun/star/uno/Any.hxx b/include/com/sun/star/uno/Any.hxx index 6267d41e733c..7909f1cb239e 100644 --- a/include/com/sun/star/uno/Any.hxx +++ b/include/com/sun/star/uno/Any.hxx @@ -84,8 +84,8 @@ template Any::Any(rtl::OUStringConcat && value): Any(rtl::OUString(std::move(value))) {} -template -Any::Any(rtl::OUStringNumber && value): Any(rtl::OUString(std::move(value))) {} +template +Any::Any(rtl::StringNumber && value): Any(rtl::OUString(std::move(value))) {} template Any::Any(const rtl::OUStringLiteral& value): Any(rtl::OUString(value)) {} #endif @@ -254,8 +254,8 @@ template Any toAny(rtl::OUStringConcat && value) { return Any(std::move(value)); } -template -Any toAny(rtl::OUStringNumber && value) +template +Any toAny(rtl::StringNumber && value) { return Any(std::move(value)); } template bool fromAny(Any const & any, T * value) { @@ -304,8 +304,8 @@ inline void operator <<= ( Any & rAny, rtl::OUStringConcat< C1, C2 >&& value ) } template void operator <<=(Any &, rtl::OUStringConcat const &) = delete; -template< class C > -inline void operator <<= ( Any & rAny, rtl::OUStringNumber< C >&& value ) +template< std::size_t nBufSize > +inline void operator <<= ( Any & rAny, rtl::StringNumber< sal_Unicode, nBufSize >&& value ) { const rtl::OUString str( std::move(value) ); const Type & rType = ::cppu::getTypeFavourUnsigned(&str); @@ -313,8 +313,8 @@ inline void operator <<= ( Any & rAny, rtl::OUStringNumber< C >&& value ) &rAny, const_cast< rtl::OUString * >( &str ), rType.getTypeLibType(), cpp_acquire, cpp_release ); } -template -void operator <<=(Any &, rtl::OUStringNumber const &) = delete; +template +void operator <<=(Any &, rtl::StringNumber const &) = delete; #endif #if defined LIBO_INTERNAL_ONLY diff --git a/include/rtl/strbuf.hxx b/include/rtl/strbuf.hxx index 97368ce3ca4d..b448228d6053 100644 --- a/include/rtl/strbuf.hxx +++ b/include/rtl/strbuf.hxx @@ -257,8 +257,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OStringBuffer( StringNumberBase< char, T, N >&& n ) + template< std::size_t N > + OStringBuffer( OStringNumber< N >&& n ) : OStringBuffer( n.buf, n.length) {} #endif @@ -345,8 +345,8 @@ public: } /** @overload @internal */ - template - OStringBuffer & operator =(StringNumberBase && n) + template + OStringBuffer & operator =(OStringNumber && n) { *this = OStringBuffer( std::move ( n )); return *this; @@ -629,8 +629,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OStringBuffer& append( StringNumberBase< char, T, N >&& c ) + template< std::size_t N > + OStringBuffer& append( OStringNumber< N >&& c ) { return append( c.buf, c.length ); } diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx index 9c2c6ae61f60..5b01df33e71f 100644 --- a/include/rtl/string.hxx +++ b/include/rtl/string.hxx @@ -439,8 +439,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OString( StringNumberBase< char, T, N >&& n ) + template< std::size_t N > + OString( OStringNumber< N >&& n ) : OString( n.buf, n.length ) {} #endif @@ -622,12 +622,12 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OString& operator+=( StringNumberBase< char, T, N >&& n ) & { + template< std::size_t N > + OString& operator+=( OStringNumber< N >&& n ) & { return operator +=(std::string_view(n.buf, n.length)); } - template void operator +=( - StringNumberBase &&) && = delete; + template void operator +=( + OStringNumber &&) && = delete; #endif /** @@ -1997,37 +1997,37 @@ public: #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" - static OStringNumber< int > number( int i, sal_Int16 radix = 10 ) + static auto number( int i, sal_Int16 radix = 10 ) { - return OStringNumber< int >( i, radix ); + return OStringNumber(rtl_str_valueOfInt32, i, radix); } - static OStringNumber< long long > number( long long ll, sal_Int16 radix = 10 ) + static auto number( long long ll, sal_Int16 radix = 10 ) { - return OStringNumber< long long >( ll, radix ); + return OStringNumber(rtl_str_valueOfInt64, ll, radix); } - static OStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 ) + static auto number( unsigned long long ll, sal_Int16 radix = 10 ) { - return OStringNumber< unsigned long long >( ll, radix ); + return OStringNumber(rtl_str_valueOfUInt64, ll, radix); } - static OStringNumber< unsigned long long > number( unsigned int i, sal_Int16 radix = 10 ) + static auto number( unsigned int i, sal_Int16 radix = 10 ) { return number( static_cast< unsigned long long >( i ), radix ); } - static OStringNumber< long long > number( long i, sal_Int16 radix = 10) + static auto number( long i, sal_Int16 radix = 10) { return number( static_cast< long long >( i ), radix ); } - static OStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 ) + static auto number( unsigned long i, sal_Int16 radix = 10 ) { return number( static_cast< unsigned long long >( i ), radix ); } - static OStringNumber< float > number( float f ) + static auto number( float f ) { - return OStringNumber< float >( f ); + return OStringNumber(rtl_str_valueOfFloat, f); } - static OStringNumber< double > number( double d ) + static auto number( double d ) { - return OStringNumber< double >( d ); + return OStringNumber(rtl_str_valueOfDouble, d); } #else /** @@ -2109,6 +2109,12 @@ public: } #endif +#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" + static auto boolean(bool b) + { + return OStringNumber(rtl_str_valueOfBoolean, b); + } +#else /** Returns the string representation of the sal_Bool argument. @@ -2125,9 +2131,6 @@ public: return boolean(b); } -#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" - static OStringNumber boolean(bool b) { return OStringNumber(b); } -#else /** Returns the string representation of the boolean argument. diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx index 118d93df5007..fd9a6f7a938a 100644 --- a/include/rtl/stringconcat.hxx +++ b/include/rtl/stringconcat.hxx @@ -324,17 +324,23 @@ template auto Concat2View(OUStringConcat cons /** * O(U)StringNumber implementation + +Objects returned by O(U)String::number(), instead of O(U)String. These objects keep a representation of the number() operation. + +If you get a build error related to this class, you most probably need to explicitly convert the result of calling +O(U)String::number() to O(U)String. */ -template struct StringNumberBase +template struct StringNumber { - using number_t = Number; - using base_t = StringNumberBase; + template , int> = 0> + StringNumber(Func func, Args... args) { length = func(buf, args...); } // O(U)String::number(value).getStr() is very common (writing xml code, ...), // so implement that one also here, to avoid having to explicitly convert // to O(U)String in all such places const C* getStr() const SAL_RETURNS_NONNULL { return buf; } - StringNumberBase&& toAsciiUpperCase() && + StringNumber&& toAsciiUpperCase() && { if constexpr (sizeof(C) == sizeof(char)) rtl_str_toAsciiUpperCase_WithLength(buf, length); @@ -347,122 +353,16 @@ template struct StringNumber sal_Int32 length; }; -/** - @internal - -Objects returned by OString::number(), instead of OString. These objects keep a representation of the number() operation. - -If you get a build error related to this class, you most probably need to explicitly convert the result of calling -OString::number() to OString. -*/ -template< typename T > -struct OStringNumber; +template using OStringNumber = StringNumber; +template using OUStringNumber = StringNumber; -template<> -struct OStringNumber< int > - : public StringNumberBase -{ - OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt32(buf, i, radix); } -}; - -template<> -struct OStringNumber< long long > - : public StringNumberBase +template< typename C, std::size_t nBufSize > +struct ToStringHelper< StringNumber< C, nBufSize > > { - OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt64(buf, i, radix); } + static std::size_t length( const StringNumber< C, nBufSize >& n ) { return n.length; } + C* operator()( C* buffer, const StringNumber< C, nBufSize >& n ) const SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); } }; -template<> -struct OStringNumber< unsigned long long > - : public StringNumberBase -{ - OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfUInt64(buf, i, radix); } -}; - -template<> -struct OStringNumber< float > - : public StringNumberBase -{ - OStringNumber(number_t f) { length = rtl_str_valueOfFloat(buf, f); } -}; - -template<> -struct OStringNumber< double > - : public StringNumberBase -{ - OStringNumber(number_t d) { length = rtl_str_valueOfDouble(buf, d); } -}; - -template<> -struct OStringNumber< bool > - : public StringNumberBase -{ - OStringNumber(number_t b) { length = rtl_str_valueOfBoolean(buf, b); } -}; - -/** - @internal - -Objects returned by OUString::number(), instead of OUString. These objects keep a representation of the number() operation. - -If you get a build error related to this class, you most probably need to explicitly convert the result of calling -OUString::number() to OUString. -*/ -template< typename T > -struct OUStringNumber; - -template<> -struct OUStringNumber< int > - : public StringNumberBase -{ - OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt32(buf, i, radix); } -}; - -template<> -struct OUStringNumber< long long > - : public StringNumberBase -{ - OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt64(buf, i, radix); } -}; - -template<> -struct OUStringNumber< unsigned long long > - : public StringNumberBase -{ - OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfUInt64(buf, i, radix); } -}; - -template<> -struct OUStringNumber< float > - : public StringNumberBase -{ - OUStringNumber(number_t f) { length = rtl_ustr_valueOfFloat(buf, f); } -}; - -template<> -struct OUStringNumber< double > - : public StringNumberBase -{ - OUStringNumber(number_t d) { length = rtl_ustr_valueOfDouble(buf, d); } -}; - -template<> -struct OUStringNumber< bool > - : public StringNumberBase -{ - OUStringNumber(number_t b) { length = rtl_ustr_valueOfBoolean(buf, b); } -}; - -template< typename C, typename T, std::size_t nBufSize > -struct ToStringHelper< StringNumberBase< C, T, nBufSize > > -{ - static std::size_t length( const StringNumberBase< C, T, nBufSize >& n ) { return n.length; } - C* operator()( C* buffer, const StringNumberBase< C, T, nBufSize >& n ) const SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); } -}; - -template struct ToStringHelper> : public ToStringHelper::base_t> {}; -template struct ToStringHelper> : public ToStringHelper::base_t> {}; - template struct ToStringHelper> { static constexpr std::size_t length(std::basic_string_view s) { return s.size(); } diff --git a/include/rtl/ustrbuf.hxx b/include/rtl/ustrbuf.hxx index cdfb28ab556c..578df163d819 100644 --- a/include/rtl/ustrbuf.hxx +++ b/include/rtl/ustrbuf.hxx @@ -243,8 +243,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OUStringBuffer( StringNumberBase< sal_Unicode, T, N >&& n ) + template< std::size_t N > + OUStringBuffer( OUStringNumber< N >&& n ) : pData(NULL) , nCapacity( n.length + 16 ) { @@ -381,8 +381,8 @@ public: } /** @overload @internal */ - template - OUStringBuffer & operator =(StringNumberBase && n) + template + OUStringBuffer & operator =(OUStringNumber && n) { *this = OUStringBuffer( std::move( n ) ); return *this; @@ -723,8 +723,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OUStringBuffer& append( StringNumberBase< sal_Unicode, T, N >&& c ) + template< std::size_t N > + OUStringBuffer& append( OUStringNumber< N >&& c ) { return append( c.buf, c.length ); } @@ -1041,8 +1041,8 @@ public: @overload @internal */ - template - OUStringBuffer& insert(sal_Int32 offset, StringNumberBase&& c) + template + OUStringBuffer& insert(sal_Int32 offset, OUStringNumber&& c) { return insert(offset, c.buf, c.length); } diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx index 36d122c1fe5a..a87082aacfff 100644 --- a/include/rtl/ustring.hxx +++ b/include/rtl/ustring.hxx @@ -509,8 +509,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OUString( StringNumberBase< sal_Unicode, T, N >&& n ) + template< std::size_t N > + OUString( OUStringNumber< N >&& n ) : OUString( n.buf, n.length ) {} #endif @@ -656,8 +656,8 @@ public: } template OUString & operator =(OUStringLiteral &&) = delete; - template - OUString & operator =(StringNumberBase && n) { + template + OUString & operator =(OUStringNumber && n) { // n.length should never be zero, so no need to add an optimization for that case rtl_uString_newFromStr_WithLength(&pData, n.buf, n.length); return *this; @@ -788,8 +788,8 @@ public: @overload @internal */ - template< typename T, std::size_t N > - OUString& operator+=( StringNumberBase< sal_Unicode, T, N >&& n ) & { + template< std::size_t N > + OUString& operator+=( OUStringNumber< N >&& n ) & { sal_Int32 l = n.length; if( l == 0 ) return *this; @@ -800,8 +800,8 @@ public: pData->length = l; return *this; } - template void operator +=( - StringNumberBase &&) && = delete; + template void operator +=( + OUStringNumber &&) && = delete; #endif /** @@ -3058,37 +3058,37 @@ public: #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" - static OUStringNumber< int > number( int i, sal_Int16 radix = 10 ) + static auto number( int i, sal_Int16 radix = 10 ) { - return OUStringNumber< int >( i, radix ); + return OUStringNumber(rtl_ustr_valueOfInt32, i, radix); } - static OUStringNumber< long long > number( long long ll, sal_Int16 radix = 10 ) + static auto number( long long ll, sal_Int16 radix = 10 ) { - return OUStringNumber< long long >( ll, radix ); + return OUStringNumber(rtl_ustr_valueOfInt64, ll, radix); } - static OUStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 ) + static auto number( unsigned long long ll, sal_Int16 radix = 10 ) { - return OUStringNumber< unsigned long long >( ll, radix ); + return OUStringNumber(rtl_ustr_valueOfUInt64, ll, radix); } - static OUStringNumber< unsigned long long > number( unsigned int i, sal_Int16 radix = 10 ) + static auto number( unsigned int i, sal_Int16 radix = 10 ) { return number( static_cast< unsigned long long >( i ), radix ); } - static OUStringNumber< long long > number( long i, sal_Int16 radix = 10) + static auto number( long i, sal_Int16 radix = 10) { return number( static_cast< long long >( i ), radix ); } - static OUStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 ) + static auto number( unsigned long i, sal_Int16 radix = 10 ) { return number( static_cast< unsigned long long >( i ), radix ); } - static OUStringNumber< float > number( float f ) + static auto number( float f ) { - return OUStringNumber< float >( f ); + return OUStringNumber(rtl_ustr_valueOfFloat, f); } - static OUStringNumber< double > number( double d ) + static auto number( double d ) { - return OUStringNumber< double >( d ); + return OUStringNumber(rtl_ustr_valueOfDouble, d); } #else /** @@ -3170,6 +3170,12 @@ public: } #endif +#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" + static auto boolean(bool b) + { + return OUStringNumber(rtl_ustr_valueOfBoolean, b); + } +#else /** Returns the string representation of the sal_Bool argument. @@ -3186,9 +3192,6 @@ public: return boolean(b); } -#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" - static OUStringNumber boolean(bool b) { return OUStringNumber(b); } -#else /** Returns the string representation of the boolean argument. diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx index 4dfe945db295..0ad7842d56ba 100644 --- a/sal/qa/rtl/strings/test_ostring_concat.cxx +++ b/sal/qa/rtl/strings/test_ostring_concat.cxx @@ -107,15 +107,15 @@ void test::ostring::StringConcat::checkConcat() CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char* >, const char[ 4 ] > )), typeid( OString::Concat( d4 ) + "bar" )); CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10 ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< int > > )), typeid( OString( "num" ) + OString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFINT32 > > )), typeid( OString( "num" ) + OString::number( 10 ))); CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10L ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< long long > > )), typeid( OString( "num" ) + OString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFINT64 > > )), typeid( OString( "num" ) + OString::number( 10L ))); CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10ULL ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< unsigned long long > > )), typeid( OString( "num" ) + OString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFUINT64 > > )), typeid( OString( "num" ) + OString::number( 10ULL ))); CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5f ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< float > > )), typeid( OString( "num" ) + OString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFFLOAT > > )), typeid( OString( "num" ) + OString::number( 10.5f ))); CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5 ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< double > > )), typeid( OString( "num" ) + OString::number( 10.5 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFDOUBLE > > )), typeid( OString( "num" ) + OString::number( 10.5 ))); } void test::ostring::StringConcat::checkEnsureCapacity() diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx index 104814fd865d..6c2ee435e31a 100644 --- a/sal/qa/rtl/strings/test_oustring_concat.cxx +++ b/sal/qa/rtl/strings/test_oustring_concat.cxx @@ -92,15 +92,15 @@ void test::oustring::StringConcat::checkConcat() CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d3 ) + "bar" )); CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10 ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< int > > )), typeid( OUString( "num" ) + OUString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFINT32 > > )), typeid( OUString( "num" ) + OUString::number( 10 ))); CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10L ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< long long > > )), typeid( OUString( "num" ) + OUString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFINT64 > > )), typeid( OUString( "num" ) + OUString::number( 10L ))); CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10ULL ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< unsigned long long > > )), typeid( OUString( "num" ) + OUString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFUINT64 > > )), typeid( OUString( "num" ) + OUString::number( 10ULL ))); CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5f ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< float > > )), typeid( OUString( "num" ) + OUString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFFLOAT > > )), typeid( OUString( "num" ) + OUString::number( 10.5f ))); CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5 ))); - CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< double > > )), typeid( OUString( "num" ) + OUString::number( 10.5 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFDOUBLE > > )), typeid( OUString( "num" ) + OUString::number( 10.5 ))); } void test::oustring::StringConcat::checkConcatAsciiL() -- cgit