summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2023-04-05 07:22:35 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2023-04-05 09:57:04 +0200
commit90c590812eecb3a0eb2748a132e304fa6c0ea0ad (patch)
treed7747887c767c2b5a6b8cc4c60fc9f8f856c49a7
parenttdf#132112 excessive stretch of braces can trigger freetype into an error (diff)
downloadcore-90c590812eecb3a0eb2748a132e304fa6c0ea0ad.tar.gz
core-90c590812eecb3a0eb2748a132e304fa6c0ea0ad.zip
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 <mike.kaganski@collabora.com>
-rw-r--r--compilerplugins/clang/stringview.cxx4
-rw-r--r--compilerplugins/clang/test/stringview.cxx4
-rw-r--r--include/com/sun/star/uno/Any.h4
-rw-r--r--include/com/sun/star/uno/Any.hxx16
-rw-r--r--include/rtl/strbuf.hxx12
-rw-r--r--include/rtl/string.hxx47
-rw-r--r--include/rtl/stringconcat.hxx132
-rw-r--r--include/rtl/ustrbuf.hxx16
-rw-r--r--include/rtl/ustring.hxx51
-rw-r--r--sal/qa/rtl/strings/test_ostring_concat.cxx10
-rw-r--r--sal/qa/rtl/strings/test_oustring_concat.cxx10
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<char>'), 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<int>', pass a 'std::string_view' [loplugin:stringview]}}
+ // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a '{{(rtl::)?}}StringNumber<char, 33>', 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<char, rtl::OString, rtl::OString>'), 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<char16_t>'), 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<int>', pass a 'std::u16string_view' [loplugin:stringview]}}
+ // expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a '{{(rtl::)?}}StringNumber<char16_t, 33>', 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<char16_t, rtl::OUString, rtl::OUString>'), 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<T1, T2> && value);
template<typename T1, typename T2>
explicit Any(rtl::OUStringConcat<T1, T2> const &) = delete;
- template<typename T> explicit inline Any(rtl::OUStringNumber<T> && value);
- template<typename T> explicit Any(rtl::OUStringNumber<T> const &) = delete;
+ template<std::size_t nBufSize> explicit inline Any(rtl::StringNumber<sal_Unicode, nBufSize> && value);
+ template<std::size_t nBufSize> explicit Any(rtl::StringNumber<sal_Unicode, nBufSize> const &) = delete;
template <std::size_t N> explicit inline Any(const rtl::OUStringLiteral<N>& 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<typename T1, typename T2>
Any::Any(rtl::OUStringConcat<T1, T2> && value):
Any(rtl::OUString(std::move(value)))
{}
-template<typename T>
-Any::Any(rtl::OUStringNumber<T> && value): Any(rtl::OUString(std::move(value))) {}
+template<std::size_t nBufSize>
+Any::Any(rtl::StringNumber<sal_Unicode, nBufSize> && value): Any(rtl::OUString(std::move(value))) {}
template <std::size_t N>
Any::Any(const rtl::OUStringLiteral<N>& value): Any(rtl::OUString(value)) {}
#endif
@@ -254,8 +254,8 @@ template<typename T1, typename T2>
Any toAny(rtl::OUStringConcat<T1, T2> && value)
{ return Any(std::move(value)); }
-template<typename T>
-Any toAny(rtl::OUStringNumber<T> && value)
+template<std::size_t nBufSize>
+Any toAny(rtl::StringNumber<sal_Unicode, nBufSize> && value)
{ return Any(std::move(value)); }
template<typename T> bool fromAny(Any const & any, T * value) {
@@ -304,8 +304,8 @@ inline void operator <<= ( Any & rAny, rtl::OUStringConcat< C1, C2 >&& value )
}
template<typename T1, typename T2>
void operator <<=(Any &, rtl::OUStringConcat<T1, T2> 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<typename T>
-void operator <<=(Any &, rtl::OUStringNumber<T> const &) = delete;
+template<std::size_t nBufSize>
+void operator <<=(Any &, rtl::StringNumber<sal_Unicode, nBufSize> 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<typename T, std::size_t N>
- OStringBuffer & operator =(StringNumberBase<char, T, N> && n)
+ template<std::size_t N>
+ OStringBuffer & operator =(OStringNumber<N> && 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<typename T, std::size_t N> void operator +=(
- StringNumberBase<char, T, N> &&) && = delete;
+ template<std::size_t N> void operator +=(
+ OStringNumber<N> &&) && = 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_MAX_VALUEOFINT32>(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_MAX_VALUEOFINT64>(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_MAX_VALUEOFUINT64>(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_MAX_VALUEOFFLOAT>(rtl_str_valueOfFloat, f);
}
- static OStringNumber< double > number( double d )
+ static auto number( double d )
{
- return OStringNumber< double >( d );
+ return OStringNumber<RTL_STR_MAX_VALUEOFDOUBLE>(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_MAX_VALUEOFBOOLEAN>(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<bool> boolean(bool b) { return OStringNumber<bool>(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 <typename T1, typename T2> auto Concat2View(OUStringConcat<T1, T2> 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 <typename C, typename Number, std::size_t nBufSize> struct StringNumberBase
+template <typename C, std::size_t nBufSize> struct StringNumber
{
- using number_t = Number;
- using base_t = StringNumberBase;
+ template <typename Func, typename... Args,
+ std::enable_if_t<std::is_invocable_r_v<sal_Int32, Func, C*, Args...>, 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 <typename C, typename Number, std::size_t nBufSize> 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<std::size_t nBufSize> using OStringNumber = StringNumber<char, nBufSize>;
+template<std::size_t nBufSize> using OUStringNumber = StringNumber<sal_Unicode, nBufSize>;
-template<>
-struct OStringNumber< int >
- : public StringNumberBase<char, int, RTL_STR_MAX_VALUEOFINT32>
-{
- OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt32(buf, i, radix); }
-};
-
-template<>
-struct OStringNumber< long long >
- : public StringNumberBase<char, long long, RTL_STR_MAX_VALUEOFINT64>
+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<char, unsigned long long, RTL_STR_MAX_VALUEOFUINT64>
-{
- OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfUInt64(buf, i, radix); }
-};
-
-template<>
-struct OStringNumber< float >
- : public StringNumberBase<char, float, RTL_STR_MAX_VALUEOFFLOAT>
-{
- OStringNumber(number_t f) { length = rtl_str_valueOfFloat(buf, f); }
-};
-
-template<>
-struct OStringNumber< double >
- : public StringNumberBase<char, double, RTL_STR_MAX_VALUEOFDOUBLE>
-{
- OStringNumber(number_t d) { length = rtl_str_valueOfDouble(buf, d); }
-};
-
-template<>
-struct OStringNumber< bool >
- : public StringNumberBase<char, bool, RTL_STR_MAX_VALUEOFBOOLEAN>
-{
- 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<sal_Unicode, int, RTL_USTR_MAX_VALUEOFINT32>
-{
- OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt32(buf, i, radix); }
-};
-
-template<>
-struct OUStringNumber< long long >
- : public StringNumberBase<sal_Unicode, long long, RTL_USTR_MAX_VALUEOFINT64>
-{
- OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt64(buf, i, radix); }
-};
-
-template<>
-struct OUStringNumber< unsigned long long >
- : public StringNumberBase<sal_Unicode, unsigned long long, RTL_USTR_MAX_VALUEOFUINT64>
-{
- OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfUInt64(buf, i, radix); }
-};
-
-template<>
-struct OUStringNumber< float >
- : public StringNumberBase<sal_Unicode, float, RTL_USTR_MAX_VALUEOFFLOAT>
-{
- OUStringNumber(number_t f) { length = rtl_ustr_valueOfFloat(buf, f); }
-};
-
-template<>
-struct OUStringNumber< double >
- : public StringNumberBase<sal_Unicode, double, RTL_USTR_MAX_VALUEOFDOUBLE>
-{
- OUStringNumber(number_t d) { length = rtl_ustr_valueOfDouble(buf, d); }
-};
-
-template<>
-struct OUStringNumber< bool >
- : public StringNumberBase<sal_Unicode, bool, RTL_USTR_MAX_VALUEOFBOOLEAN>
-{
- 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<typename T> struct ToStringHelper<OStringNumber<T>> : public ToStringHelper<typename OStringNumber<T>::base_t> {};
-template<typename T> struct ToStringHelper<OUStringNumber<T>> : public ToStringHelper<typename OUStringNumber<T>::base_t> {};
-
template<typename C> struct ToStringHelper<std::basic_string_view<C>> {
static constexpr std::size_t length(std::basic_string_view<C> 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<typename T, std::size_t N>
- OUStringBuffer & operator =(StringNumberBase<sal_Unicode, T, N> && n)
+ template<std::size_t N>
+ OUStringBuffer & operator =(OUStringNumber<N> && 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 <typename T, std::size_t N>
- OUStringBuffer& insert(sal_Int32 offset, StringNumberBase<sal_Unicode, T, N>&& c)
+ template <std::size_t N>
+ OUStringBuffer& insert(sal_Int32 offset, OUStringNumber<N>&& 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<std::size_t N> OUString & operator =(OUStringLiteral<N> &&) = delete;
- 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) {
// 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<typename T, std::size_t N> void operator +=(
- StringNumberBase<sal_Unicode, T, N> &&) && = delete;
+ template<std::size_t N> void operator +=(
+ OUStringNumber<N> &&) && = 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_MAX_VALUEOFINT32>(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_MAX_VALUEOFINT64>(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_MAX_VALUEOFUINT64>(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_MAX_VALUEOFFLOAT>(rtl_ustr_valueOfFloat, f);
}
- static OUStringNumber< double > number( double d )
+ static auto number( double d )
{
- return OUStringNumber< double >( d );
+ return OUStringNumber<RTL_USTR_MAX_VALUEOFDOUBLE>(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_MAX_VALUEOFBOOLEAN>(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<bool> boolean(bool b) { return OUStringNumber<bool>(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()