summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/qa/extras/chart2dump/chart2dump.cxx2
-rw-r--r--compilerplugins/clang/stringconcatauto.cxx4
-rw-r--r--compilerplugins/clang/test/stringconcatauto.cxx10
-rw-r--r--configmgr/source/writemodfile.cxx10
-rw-r--r--connectivity/source/drivers/file/FStringFunctions.cxx2
-rw-r--r--connectivity/source/drivers/flat/ETable.cxx2
-rw-r--r--cui/source/dialogs/cuicharmap.cxx6
-rw-r--r--desktop/source/lib/init.cxx3
-rw-r--r--editeng/source/items/numitem.cxx10
-rw-r--r--framework/source/uielement/spinfieldtoolbarcontroller.cxx30
-rw-r--r--include/com/sun/star/uno/Any.hxx19
-rw-r--r--include/rtl/strbuf.hxx27
-rw-r--r--include/rtl/string.hxx64
-rw-r--r--include/rtl/stringconcat.hxx158
-rw-r--r--include/rtl/ustrbuf.hxx29
-rw-r--r--include/rtl/ustring.h2
-rw-r--r--include/rtl/ustring.hxx64
-rw-r--r--oox/source/export/chartexport.cxx2
-rw-r--r--sal/qa/rtl/oustring/rtl_OUString2.cxx4
-rw-r--r--sal/qa/rtl/strings/test_ostring_concat.cxx15
-rw-r--r--sal/qa/rtl/strings/test_oustring_concat.cxx13
-rw-r--r--sal/qa/rtl/strings/test_strings_valuex.cxx42
-rw-r--r--sc/source/core/tool/interpr7.cxx2
-rw-r--r--sc/source/filter/excel/xepage.cxx4
-rw-r--r--sc/source/filter/inc/xestream.hxx6
-rw-r--r--scaddins/source/analysis/analysishelper.cxx2
-rw-r--r--sd/source/ui/unoidl/unomodel.cxx2
-rw-r--r--sfx2/source/appl/fileobj.cxx2
-rw-r--r--starmath/source/dialog.cxx2
-rw-r--r--svl/source/numbers/zforlist.cxx2
-rw-r--r--svl/source/numbers/zformat.cxx4
-rw-r--r--tools/qa/cppunit/test_xmlwalker.cxx3
-rw-r--r--unoidl/source/sourceprovider-scanner.l2
-rw-r--r--vcl/source/control/field.cxx4
-rw-r--r--winaccessibility/source/UAccCOM/AccTextBase.cxx2
-rw-r--r--xmloff/source/style/xmlnumfi.cxx4
36 files changed, 483 insertions, 76 deletions
diff --git a/chart2/qa/extras/chart2dump/chart2dump.cxx b/chart2/qa/extras/chart2dump/chart2dump.cxx
index d8b48d3ce3bf..a03f98a0527d 100644
--- a/chart2/qa/extras/chart2dump/chart2dump.cxx
+++ b/chart2/qa/extras/chart2dump/chart2dump.cxx
@@ -50,7 +50,7 @@
else \
{ \
OString sTestFileName = OUStringToOString(getTestFileName(), RTL_TEXTENCODING_UTF8); \
- CPPUNIT_ASSERT_EQUAL_MESSAGE(OString("Failing test file is: " + sTestFileName).getStr(), readExpected(#aActual), OUString::number(aActual)); \
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OString("Failing test file is: " + sTestFileName).getStr(), readExpected(#aActual), OUString(OUString::number(aActual))); \
}
#define CPPUNIT_DUMP_ASSERT_DOUBLES_EQUAL(aActual, EPS_) \
diff --git a/compilerplugins/clang/stringconcatauto.cxx b/compilerplugins/clang/stringconcatauto.cxx
index 1437b7537323..7eac4965b3ee 100644
--- a/compilerplugins/clang/stringconcatauto.cxx
+++ b/compilerplugins/clang/stringconcatauto.cxx
@@ -87,6 +87,10 @@ bool StringConcatAuto::checkDecl( const DeclaratorDecl* decl, QualType type, con
typeString = "OUString";
else if( tc.Struct("OStringConcat").Namespace("rtl").GlobalNamespace())
typeString = "OString";
+ else if( tc.Struct("OUStringNumber").Namespace("rtl").GlobalNamespace())
+ typeString = "OUString";
+ else if( tc.Struct("OStringNumber").Namespace("rtl").GlobalNamespace())
+ typeString = "OString";
else
return true;
report( DiagnosticsEngine::Warning,
diff --git a/compilerplugins/clang/test/stringconcatauto.cxx b/compilerplugins/clang/test/stringconcatauto.cxx
index 777da46e84a4..6c9a72c293b3 100644
--- a/compilerplugins/clang/test/stringconcatauto.cxx
+++ b/compilerplugins/clang/test/stringconcatauto.cxx
@@ -23,10 +23,14 @@ void foo()
const auto str4 = "str4" + OString::number( 40 );
// expected-error-re@-1 {{creating a variable of type 'const rtl::OStringConcat<{{.*}}>' will make it reference temporaries}}
// expected-note@-2 {{use OString instead}}
+ auto str5 = OUString::number( 50 );
+ // expected-error-re@-1 {{creating a variable of type 'rtl::OUStringNumber<{{.*}}>' will make it reference temporaries}}
+ // expected-note@-2 {{use OUString instead}}
(void) str1;
(void) str2;
(void) str3;
(void) str4;
+ (void) str5;
}
struct A
@@ -37,6 +41,12 @@ struct A
{
return "bar" + OString::number( 110 );
}
+ auto baz()
+ // expected-error-re@-1 {{returning a variable of type 'rtl::OStringNumber<{{.*}}>' will make it reference temporaries}}
+ // expected-note@-2 {{use OString instead}}
+ {
+ return OString::number( 120 );
+ }
};
template< typename T >
diff --git a/configmgr/source/writemodfile.cxx b/configmgr/source/writemodfile.cxx
index 017e925dee48..d7fba8264b80 100644
--- a/configmgr/source/writemodfile.cxx
+++ b/configmgr/source/writemodfile.cxx
@@ -155,19 +155,19 @@ void writeValueContent_(TempFile &handle, sal_Bool value) {
}
void writeValueContent_(TempFile &handle, sal_Int16 value) {
- handle.writeString(OString::number(value));
+ handle.writeString(OString(OString::number(value)));
}
void writeValueContent_(TempFile &handle, sal_Int32 value) {
- handle.writeString(OString::number(value));
+ handle.writeString(OString(OString::number(value)));
}
void writeValueContent_(TempFile &handle, sal_Int64 value) {
- handle.writeString(OString::number(value));
+ handle.writeString(OString(OString::number(value)));
}
void writeValueContent_(TempFile &handle, double value) {
- handle.writeString(OString::number(value));
+ handle.writeString(OString(OString::number(value)));
}
void writeValueContent_(TempFile &handle, const OUString& value) {
@@ -530,7 +530,7 @@ void writeValueContent(TempFile &handle, std::u16string_view value) {
{
handle.writeString(convertToUtf8(value.substr(i, j - i)));
handle.writeString("<unicode oor:scalar=\"");
- handle.writeString(OString::number(c));
+ handle.writeString(OString(OString::number(c)));
handle.writeString("\"/>");
i = j + 1;
} else if (c == '\x0D') {
diff --git a/connectivity/source/drivers/file/FStringFunctions.cxx b/connectivity/source/drivers/file/FStringFunctions.cxx
index c8d9977472a6..06e62a1a4cc2 100644
--- a/connectivity/source/drivers/file/FStringFunctions.cxx
+++ b/connectivity/source/drivers/file/FStringFunctions.cxx
@@ -103,7 +103,7 @@ ORowSetValue OOp_Locate::operate(const std::vector<ORowSetValue>& lhs) const
return ORowSetValue();
if ( lhs.size() == 2 )
- return OUString::number(lhs[0].getString().indexOf(lhs[1].getString())+1);
+ return OUString(OUString::number(lhs[0].getString().indexOf(lhs[1].getString())+1));
else if ( lhs.size() != 3 )
return ORowSetValue();
diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx
index bc978bcc3599..0e2290dddc91 100644
--- a/connectivity/source/drivers/flat/ETable.cxx
+++ b/connectivity/source/drivers/flat/ETable.cxx
@@ -681,7 +681,7 @@ bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
// #99178# OJ
if ( DataType::DECIMAL == nType || DataType::NUMERIC == nType )
- *(_rRow->get())[i] = OUString::number(nVal);
+ *(_rRow->get())[i] = OUString(OUString::number(nVal));
else
*(_rRow->get())[i] = nVal;
} break;
diff --git a/cui/source/dialogs/cuicharmap.cxx b/cui/source/dialogs/cuicharmap.cxx
index dba595d5dd21..3f0ace55a9b4 100644
--- a/cui/source/dialogs/cuicharmap.cxx
+++ b/cui/source/dialogs/cuicharmap.cxx
@@ -873,7 +873,7 @@ IMPL_LINK(SvxCharacterMap, CharClickHdl, SvxCharView*, rView, void)
OUString charValue = rView->GetText();
sal_Int32 tmp = 1;
sal_UCS4 cChar = charValue.iterateCodePoints(&tmp, -1);
- OUString aHexText = OUString::number(cChar, 16).toAsciiUpperCase();
+ OUString aHexText = OUString(OUString::number(cChar, 16)).toAsciiUpperCase();
// Get the decimal code
OUString aDecimalText = OUString::number(cChar);
@@ -961,7 +961,7 @@ IMPL_LINK_NOARG(SvxCharacterMap, CharHighlightHdl, SvxShowCharSet*, void)
// using the new UCS4 constructor
aText = OUString( &cChar, 1 );
// Get the hexadecimal code
- aHexText = OUString::number(cChar, 16).toAsciiUpperCase();
+ aHexText = OUString(OUString::number(cChar, 16)).toAsciiUpperCase();
// Get the decimal code
aDecimalText = OUString::number(cChar);
setCharName(cChar);
@@ -1001,7 +1001,7 @@ IMPL_LINK_NOARG(SvxCharacterMap, SearchCharHighlightHdl, SvxShowCharSet*, void)
{
aText = OUString( &cChar, 1 );
// Get the hexadecimal code
- aHexText = OUString::number(cChar, 16).toAsciiUpperCase();
+ aHexText = OUString(OUString::number(cChar, 16)).toAsciiUpperCase();
// Get the decimal code
aDecimalText = OUString::number(cChar);
setCharName(cChar);
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index d26bfaa896cb..400e0e7f82d9 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -5162,7 +5162,8 @@ static void lo_status_indicator_callback(void *data, comphelper::LibreOfficeKit:
pLib->mpCallback(LOK_CALLBACK_STATUS_INDICATOR_START, nullptr, pLib->mpCallbackData);
break;
case comphelper::LibreOfficeKit::statusIndicatorCallbackType::SetValue:
- pLib->mpCallback(LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE, OUString::number(percent).toUtf8().getStr(), pLib->mpCallbackData);
+ pLib->mpCallback(LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE,
+ OUString(OUString::number(percent)).toUtf8().getStr(), pLib->mpCallbackData);
break;
case comphelper::LibreOfficeKit::statusIndicatorCallbackType::Finish:
pLib->mpCallback(LOK_CALLBACK_STATUS_INDICATOR_FINISH, nullptr, pLib->mpCallbackData);
diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx
index b9d90c64f764..d83ef10cc3da 100644
--- a/editeng/source/items/numitem.cxx
+++ b/editeng/source/items/numitem.cxx
@@ -701,16 +701,16 @@ void SvxNumRule::Store( SvStream &rStream )
void SvxNumRule::dumpAsXml(xmlTextWriterPtr pWriter) const
{
xmlTextWriterStartElement(pWriter, BAD_CAST("SvxNumRule"));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("levelCount"), BAD_CAST(OUString::number(nLevelCount).getStr()));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("continuousNumbering"), BAD_CAST(OUString::boolean(bContinuousNumbering).getStr()));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("numberingType"), BAD_CAST(OUString::number(static_cast<int>(eNumberingType)).getStr()));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("featureFlags"), BAD_CAST(OUString::number(static_cast<int>(nFeatureFlags)).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("levelCount"), BAD_CAST(OString::number(nLevelCount).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("continuousNumbering"), BAD_CAST(OString::boolean(bContinuousNumbering).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("numberingType"), BAD_CAST(OString::number(static_cast<int>(eNumberingType)).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("featureFlags"), BAD_CAST(OString::number(static_cast<int>(nFeatureFlags)).getStr()));
for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++)
{
if(aFmts[i])
{
xmlTextWriterStartElement(pWriter, BAD_CAST("aFmts"));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("i"), BAD_CAST(OUString::number(i).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("i"), BAD_CAST(OString::number(i).getStr()));
xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", aFmts[i].get());
xmlTextWriterEndElement(pWriter);
}
diff --git a/framework/source/uielement/spinfieldtoolbarcontroller.cxx b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
index 6abf26102e31..3ad582a464ae 100644
--- a/framework/source/uielement/spinfieldtoolbarcontroller.cxx
+++ b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
@@ -299,8 +299,8 @@ void SpinfieldToolbarController::executeControlCommand( const css::frame::Contro
double fValue;
bool bFloat( false );
if ( impl_getValue( rControlCommand.Arguments[i].Value, nValue, fValue, bFloat ))
- aStep = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aStep = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
break;
}
}
@@ -317,7 +317,8 @@ void SpinfieldToolbarController::executeControlCommand( const css::frame::Contro
if ( impl_getValue( rControlCommand.Arguments[i].Value, nValue, fValue, bFloat ))
{
- aValue = bFloat ? OUString::number( fValue ) : OUString::number( nValue );
+ aValue = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
bFloatValue = bFloat;
}
break;
@@ -337,18 +338,19 @@ void SpinfieldToolbarController::executeControlCommand( const css::frame::Contro
{
if ( aName == "Value" )
{
- aValue = bFloat ? OUString::number( fValue ) : OUString::number( nValue );
+ aValue = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
bFloatValue = bFloat;
}
else if ( aName == "Step" )
- aStep = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aStep = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
else if ( aName == "LowerLimit" )
- aMin = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aMin = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
else if ( aName == "UpperLimit" )
- aMax = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aMax = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
}
else if ( aName == "OutputFormat" )
rControlCommand.Arguments[i].Value >>= m_aOutFormat;
@@ -364,8 +366,8 @@ void SpinfieldToolbarController::executeControlCommand( const css::frame::Contro
double fValue;
bool bFloat( false );
if ( impl_getValue( rControlCommand.Arguments[i].Value, nValue, fValue, bFloat ))
- aMin = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aMin = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
break;
}
}
@@ -380,8 +382,8 @@ void SpinfieldToolbarController::executeControlCommand( const css::frame::Contro
double fValue;
bool bFloat( false );
if ( impl_getValue( rControlCommand.Arguments[i].Value, nValue, fValue, bFloat ))
- aMax = bFloat ? OUString::number( fValue ) :
- OUString::number( nValue );
+ aMax = bFloat ? OUString( OUString::number( fValue )) :
+ OUString( OUString::number( nValue ));
break;
}
}
diff --git a/include/com/sun/star/uno/Any.hxx b/include/com/sun/star/uno/Any.hxx
index d7b3420baecc..05f032fc5b81 100644
--- a/include/com/sun/star/uno/Any.hxx
+++ b/include/com/sun/star/uno/Any.hxx
@@ -249,6 +249,14 @@ template<typename T1, typename T2>
Any toAny(rtl::OUStringConcat<T1, T2> && value)
{ return makeAny(std::move(value)); }
+template<typename T>
+Any makeAny(rtl::OUStringNumber<T> && value)
+{ return Any(OUString(std::move(value))); }
+
+template<typename T>
+Any toAny(rtl::OUStringNumber<T> && value)
+{ return makeAny(std::move(value)); }
+
template<typename T> bool fromAny(Any const & any, T * value) {
assert(value != nullptr);
return any >>= *value;
@@ -295,6 +303,17 @@ inline void SAL_CALL operator <<= ( Any & rAny, rtl::OUStringConcat< C1, C2 >&&
}
template<typename T1, typename T2>
void operator <<=(Any &, rtl::OUStringConcat<T1, T2> const &) = delete;
+template< class C >
+inline void SAL_CALL operator <<= ( Any & rAny, rtl::OUStringNumber< C >&& value )
+{
+ const rtl::OUString str( std::move(value) );
+ const Type & rType = ::cppu::getTypeFavourUnsigned(&str);
+ ::uno_type_any_assign(
+ &rAny, const_cast< rtl::OUString * >( &str ), rType.getTypeLibType(),
+ cpp_acquire, cpp_release );
+}
+template<typename T>
+void operator <<=(Any &, rtl::OUStringNumber<T> const &) = delete;
#endif
#if defined LIBO_INTERNAL_ONLY
diff --git a/include/rtl/strbuf.hxx b/include/rtl/strbuf.hxx
index 2b8e6506b6b6..832c48959d47 100644
--- a/include/rtl/strbuf.hxx
+++ b/include/rtl/strbuf.hxx
@@ -222,6 +222,15 @@ public:
*end = '\0';
pData->length = l;
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OStringBuffer( OStringNumber< T >&& n )
+ : OStringBuffer( OString( n ))
+ {}
#endif
/** Assign to this a copy of value.
@@ -287,6 +296,13 @@ public:
pData->length = n;
return *this;
}
+
+ /** @overload @internal */
+ template<typename T>
+ OStringBuffer & operator =(OStringNumber<T> && n)
+ {
+ return *this = OStringBuffer( std::move ( n ));
+ }
#endif
/**
@@ -560,6 +576,17 @@ public:
pData->length = l;
return *this;
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OStringBuffer& append( OStringNumber< T >&& c )
+ {
+ return append( c.buf, c.length );
+ }
+
#endif
/**
diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx
index d06a1b727394..68450da21fa9 100644
--- a/include/rtl/string.hxx
+++ b/include/rtl/string.hxx
@@ -280,6 +280,15 @@ public:
*end = '\0';
}
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OString( OStringNumber< T >&& n )
+ : OString( n.buf, n.length )
+ {}
#endif
#ifdef LIBO_INTERNAL_ONLY
@@ -383,6 +392,25 @@ public:
}
template<typename T1, typename T2> void operator +=(
OStringConcat<T1, T2> &&) && = delete;
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OString& operator+=( OStringNumber< T >&& n ) & {
+ sal_Int32 l = n.length;
+ if( l == 0 )
+ return *this;
+ l += pData->length;
+ rtl_string_ensureCapacity( &pData, l );
+ char* end = addDataHelper( pData->buffer + pData->length, n.buf, n.length );
+ *end = '\0';
+ pData->length = l;
+ return *this;
+ }
+ template<typename T> void operator +=(
+ OStringNumber<T> &&) && = delete;
#endif
/**
@@ -1602,6 +1630,41 @@ public:
return rtl_str_toDouble( pData->buffer );
}
+#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
+
+ static OStringNumber< int > number( int i, sal_Int16 radix = 10 )
+ {
+ return OStringNumber< int >( i, radix );
+ }
+ static OStringNumber< long long > number( long long ll, sal_Int16 radix = 10 )
+ {
+ return OStringNumber< long long >( ll, radix );
+ }
+ static OStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 )
+ {
+ return OStringNumber< unsigned long long >( ll, radix );
+ }
+ static OStringNumber< unsigned long long > 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)
+ {
+ return number( static_cast< long long >( i ), radix );
+ }
+ static OStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 )
+ {
+ return number( static_cast< unsigned long long >( i ), radix );
+ }
+ static OStringNumber< float > number( float f )
+ {
+ return OStringNumber< float >( f );
+ }
+ static OStringNumber< double > number( double d )
+ {
+ return OStringNumber< double >( d );
+ }
+#else
/**
Returns the string representation of the integer argument.
@@ -1686,6 +1749,7 @@ public:
rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfDouble( aBuf, d ) );
return OString( pNewData, SAL_NO_ACQUIRE );
}
+#endif
/**
Returns the string representation of the sal_Bool argument.
diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx
index 220d0a2cfc9e..50522636ea3d 100644
--- a/include/rtl/stringconcat.hxx
+++ b/include/rtl/stringconcat.hxx
@@ -11,6 +11,8 @@
#define INCLUDED_RTL_STRINGCONCAT_HXX
#include "rtl/stringutils.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
#include <cstddef>
#include <string.h>
@@ -168,6 +170,9 @@ template<> struct ToStringHelper<OUStringLiteral1_> {
Objects returned by operator+, instead of OString. These objects (possibly recursively) keep a representation of the whole
concatenation operation.
+
+If you get a build error related to this class, you most probably need to explicitly convert the result of a string
+concatenation to OString.
*/
template< typename T1, typename T2 >
struct OStringConcat
@@ -189,6 +194,9 @@ struct OStringConcat
Objects returned by operator+, instead of OUString. These objects (possibly recursively) keep a representation of the whole
concatenation operation.
+
+If you get a build error related to this class, you most probably need to explicitly convert the result of a string
+concatenation to OUString.
*/
template< typename T1, typename T2 >
struct OUStringConcat
@@ -302,6 +310,156 @@ int operator+( const StringConcatInvalid&, const T& )
}
#endif
+/**
+ @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<>
+struct OStringNumber< int >
+{
+ OStringNumber( int i, sal_Int16 radix )
+ : length( rtl_str_valueOfInt32( buf, i, radix ))
+ {}
+ // OString::number(value).getStr() is very common (writing xml code, ...),
+ // so implement that one also here, to avoid having to explicitly to convert
+ // to OString in all such places
+ const char * getStr() const SAL_RETURNS_NONNULL { return buf; }
+ char buf[RTL_STR_MAX_VALUEOFINT32];
+ const sal_Int32 length;
+};
+
+template<>
+struct OStringNumber< long long >
+{
+ OStringNumber( long long ll, sal_Int16 radix )
+ : length( rtl_str_valueOfInt64( buf, ll, radix ))
+ {}
+ const char * getStr() const SAL_RETURNS_NONNULL { return buf; }
+ char buf[RTL_STR_MAX_VALUEOFINT64];
+ const sal_Int32 length;
+};
+
+template<>
+struct OStringNumber< unsigned long long >
+{
+ OStringNumber( unsigned long long ll, sal_Int16 radix )
+ : length( rtl_str_valueOfUInt64( buf, ll, radix ))
+ {}
+ const char * getStr() const SAL_RETURNS_NONNULL { return buf; }
+ char buf[RTL_STR_MAX_VALUEOFUINT64];
+ const sal_Int32 length;
+};
+
+template<>
+struct OStringNumber< float >
+{
+ OStringNumber( float f )
+ : length( rtl_str_valueOfFloat( buf, f ))
+ {}
+ const char * getStr() const SAL_RETURNS_NONNULL { return buf; }
+ char buf[RTL_STR_MAX_VALUEOFFLOAT];
+ const sal_Int32 length;
+};
+
+template<>
+struct OStringNumber< double >
+{
+ OStringNumber( double d )
+ : length( rtl_str_valueOfDouble( buf, d ))
+ {}
+ const char * getStr() const SAL_RETURNS_NONNULL { return buf; }
+ char buf[RTL_STR_MAX_VALUEOFDOUBLE];
+ const sal_Int32 length;
+};
+
+template< typename T >
+struct ToStringHelper< OStringNumber< T > >
+ {
+ static int length( const OStringNumber< T >& n ) { return n.length; }
+ static char* addData( char* buffer, const OStringNumber< T >& n ) SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); }
+ static const bool allowOStringConcat = true;
+ static const bool allowOUStringConcat = false;
+ };
+
+
+/**
+ @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 >
+{
+ OUStringNumber( int i, sal_Int16 radix )
+ : length( rtl_ustr_valueOfInt32( buf, i, radix ))
+ {}
+ sal_Unicode buf[RTL_USTR_MAX_VALUEOFINT32];
+ const sal_Int32 length;
+};
+
+template<>
+struct OUStringNumber< long long >
+{
+ OUStringNumber( long long ll, sal_Int16 radix )
+ : length( rtl_ustr_valueOfInt64( buf, ll, radix ))
+ {}
+ sal_Unicode buf[RTL_USTR_MAX_VALUEOFINT64];
+ const sal_Int32 length;
+};
+
+template<>
+struct OUStringNumber< unsigned long long >
+{
+ OUStringNumber( unsigned long long ll, sal_Int16 radix )
+ : length( rtl_ustr_valueOfUInt64( buf, ll, radix ))
+ {}
+ sal_Unicode buf[RTL_USTR_MAX_VALUEOFUINT64];
+ const sal_Int32 length;
+};
+
+template<>
+struct OUStringNumber< float >
+{
+ OUStringNumber( float f )
+ : length( rtl_ustr_valueOfFloat( buf, f ))
+ {}
+ sal_Unicode buf[RTL_USTR_MAX_VALUEOFFLOAT];
+ const sal_Int32 length;
+};
+
+template<>
+struct OUStringNumber< double >
+{
+ OUStringNumber( double d )
+ : length( rtl_ustr_valueOfDouble( buf, d ))
+ {}
+ sal_Unicode buf[RTL_USTR_MAX_VALUEOFDOUBLE];
+ const sal_Int32 length;
+};
+
+template< typename T >
+struct ToStringHelper< OUStringNumber< T > >
+ {
+ static int length( const OUStringNumber< T >& n ) { return n.length; }
+ static sal_Unicode* addData( sal_Unicode* buffer, const OUStringNumber< T >& n ) SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); }
+ static const bool allowOStringConcat = false;
+ static const bool allowOUStringConcat = true;
+ };
+
+
} // namespace
#endif
diff --git a/include/rtl/ustrbuf.hxx b/include/rtl/ustrbuf.hxx
index 94bf9c789a61..4016eaf210d9 100644
--- a/include/rtl/ustrbuf.hxx
+++ b/include/rtl/ustrbuf.hxx
@@ -224,6 +224,18 @@ public:
pData->length = l;
// TODO realloc in case pData->>length is noticeably smaller than l ?
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OUStringBuffer( OUStringNumber< T >&& n )
+ : pData(NULL)
+ , nCapacity( n.length + 16 )
+ {
+ rtl_uStringbuffer_newFromStr_WithLength( &pData, n.buf, n.length );
+ }
#endif
/** Assign to this a copy of value.
*/
@@ -328,6 +340,13 @@ public:
pData->length = n;
return *this;
}
+
+ /** @overload @internal */
+ template<typename T>
+ OUStringBuffer & operator =(OUStringNumber<T> && n)
+ {
+ return *this = OUStringBuffer( std::move( n ));
+ }
#endif
/**
@@ -658,6 +677,16 @@ public:
pData->length = l;
return *this;
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OUStringBuffer& append( OUStringNumber< T >&& c )
+ {
+ return append( c.buf, c.length );
+ }
#endif
/**
diff --git a/include/rtl/ustring.h b/include/rtl/ustring.h
index 90aff10dd169..35e4a7d4ad67 100644
--- a/include/rtl/ustring.h
+++ b/include/rtl/ustring.h
@@ -1000,7 +1000,7 @@ SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfInt64(
*/
SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfUInt64(
sal_Unicode * str, sal_uInt64 l, sal_Int16 radix ) SAL_THROW_EXTERN_C();
-#define RTL_USTR_MAX_VALUEOFINT64 RTL_STR_MAX_VALUEOFINT64
+#define RTL_USTR_MAX_VALUEOFUINT64 RTL_STR_MAX_VALUEOFUINT64
/** Create the string representation of a float.
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx
index 18b717fd2b04..a6d9e22c37b5 100644
--- a/include/rtl/ustring.hxx
+++ b/include/rtl/ustring.hxx
@@ -409,6 +409,15 @@ public:
// TODO realloc in case pData->length is noticeably smaller than l?
}
}
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OUString( OUStringNumber< T >&& n )
+ : OUString( n.buf, n.length )
+ {}
#endif
#if defined LIBO_INTERNAL_ONLY
@@ -632,6 +641,25 @@ public:
}
template<typename T1, typename T2> void operator +=(
OUStringConcat<T1, T2> &&) && = delete;
+
+ /**
+ @overload
+ @internal
+ */
+ template< typename T >
+ OUString& operator+=( OUStringNumber< T >&& n ) & {
+ sal_Int32 l = n.length;
+ if( l == 0 )
+ return *this;
+ l += pData->length;
+ rtl_uString_ensureCapacity( &pData, l );
+ sal_Unicode* end = addDataHelper( pData->buffer + pData->length, n.buf, n.length );
+ *end = '\0';
+ pData->length = l;
+ return *this;
+ }
+ template<typename T> void operator +=(
+ OUStringNumber<T> &&) && = delete;
#endif
/**
@@ -3345,6 +3373,41 @@ public:
return aTarget;
}
+#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
+
+ static OUStringNumber< int > number( int i, sal_Int16 radix = 10 )
+ {
+ return OUStringNumber< int >( i, radix );
+ }
+ static OUStringNumber< long long > number( long long ll, sal_Int16 radix = 10 )
+ {
+ return OUStringNumber< long long >( ll, radix );
+ }
+ static OUStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 )
+ {
+ return OUStringNumber< unsigned long long >( ll, radix );
+ }
+ static OUStringNumber< unsigned long long > 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)
+ {
+ return number( static_cast< long long >( i ), radix );
+ }
+ static OUStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 )
+ {
+ return number( static_cast< unsigned long long >( i ), radix );
+ }
+ static OUStringNumber< float > number( float f )
+ {
+ return OUStringNumber< float >( f );
+ }
+ static OUStringNumber< double > number( double d )
+ {
+ return OUStringNumber< double >( d );
+ }
+#else
/**
Returns the string representation of the integer argument.
@@ -3432,6 +3495,7 @@ public:
rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfDouble( aBuf, d ) );
return OUString( pNewData, SAL_NO_ACQUIRE );
}
+#endif
/**
Returns the string representation of the sal_Bool argument.
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index c282b0d9263f..3b0072838a87 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -3137,7 +3137,7 @@ void writeLabelProperties( const FSHelperPtr& pFS, ChartExport* pChartExport,
{
pFS->startElement(FSNS(XML_a, XML_solidFill));
- OString aStr = OString::number(nLabelBorderColor, 16).toAsciiUpperCase();
+ OString aStr = OString(OString::number(nLabelBorderColor, 16)).toAsciiUpperCase();
pFS->singleElement(FSNS(XML_a, XML_srgbClr), XML_val, aStr);
pFS->endElement(FSNS(XML_a, XML_solidFill));
diff --git a/sal/qa/rtl/oustring/rtl_OUString2.cxx b/sal/qa/rtl/oustring/rtl_OUString2.cxx
index 3b6474d1cafa..52e8656efd96 100644
--- a/sal/qa/rtl/oustring/rtl_OUString2.cxx
+++ b/sal/qa/rtl/oustring/rtl_OUString2.cxx
@@ -896,11 +896,11 @@ public:
std::unique_ptr<OUString[]> pStrs(new OUString[nSequence]);
for (i = 0; i < nSequence; i++)
{
- pStrs[i] = OUString::number( sqrt( static_cast<double>(i) ) ).intern();
+ pStrs[i] = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
}
for (i = 0; i < nSequence; i++)
{
- OUString aNew = OUString::number( sqrt( static_cast<double>(i) ) ).intern();
+ OUString aNew = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
CPPUNIT_ASSERT_EQUAL_MESSAGE("double intern failed",
pStrs[i].pData, aNew.pData);
}
diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx
index 15795d039cee..e676aab2d27e 100644
--- a/sal/qa/rtl/strings/test_ostring_concat.cxx
+++ b/sal/qa/rtl/strings/test_ostring_concat.cxx
@@ -81,6 +81,19 @@ void test::ostring::StringConcat::checkConcat()
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char* > )), typeid( OString( "foo" ) + d3 ));
CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+
+ 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( 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( 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( 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( 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 )));
}
void test::ostring::StringConcat::checkEnsureCapacity()
@@ -149,6 +162,8 @@ void test::ostring::StringConcat::checkInvalid()
rtl_uString* rus = nullptr;
CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString::number( 0 ) + OUString::number( 10 )));
#if 0
// Should fail to compile, to avoid use of OStringConcat lvalues that
diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx
index 8ec1699d4431..56b38ec1ee90 100644
--- a/sal/qa/rtl/strings/test_oustring_concat.cxx
+++ b/sal/qa/rtl/strings/test_oustring_concat.cxx
@@ -71,6 +71,17 @@ void test::oustring::StringConcat::checkConcat()
const char d1[] = "xyz";
CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d1 ));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + d1 ));
+
+ 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( 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( 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( 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( 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 )));
}
void test::oustring::StringConcat::checkConcatAsciiL()
@@ -159,6 +170,8 @@ void test::oustring::StringConcat::checkInvalid()
rtl_uString* rus = nullptr;
CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString::number( 0 ) + OString::number( 10 )));
#if 0
// Should fail to compile, to avoid use of OUStringConcat lvalues that
diff --git a/sal/qa/rtl/strings/test_strings_valuex.cxx b/sal/qa/rtl/strings/test_strings_valuex.cxx
index b1102cce6fd1..85fee5f00dd8 100644
--- a/sal/qa/rtl/strings/test_strings_valuex.cxx
+++ b/sal/qa/rtl/strings/test_strings_valuex.cxx
@@ -58,30 +58,30 @@ void test::strings::valueX::testOUBoolean() {
template< typename T >
static void testInt() {
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( 30039062 ));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( 30039062 )));
// test the overloading resolution
- CPPUNIT_ASSERT_EQUAL( T( "30" ), T::number( static_cast< signed char >( 30 )));
- CPPUNIT_ASSERT_EQUAL( T( "30" ), T::number( static_cast< unsigned char >( 30 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039" ), T::number( static_cast< short >( 30039 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039" ), T::number( static_cast< unsigned short >( 30039 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< int >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< unsigned int >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< long >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< unsigned long >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< long long >( 30039062 )));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< signed char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< unsigned char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< unsigned short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long long >( 30039062 ))));
// The highest bit set in unsigned long long may not actually work.
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< unsigned long long >( 30039062 )));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long long >( 30039062 ))));
- CPPUNIT_ASSERT_EQUAL( T( "30" ), T::number( static_cast< sal_Int8 >( 30 )));
- CPPUNIT_ASSERT_EQUAL( T( "30" ), T::number( static_cast< sal_uInt8 >( 30 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039" ), T::number( static_cast< sal_Int16 >( 30039 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039" ), T::number( static_cast< sal_uInt16 >( 30039 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< sal_Int32 >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< sal_uInt32 >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< sal_Int64 >( 30039062 )));
- CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T::number( static_cast< sal_uInt64 >( 30039062 )));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_Int8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_uInt8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_Int16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_uInt16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int64 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt64 >( 30039062 ))));
// The implementation internally uses sal_Int64 etc. types, so check ranges.
assert( sizeof( int ) <= sizeof( sal_Int32 ));
@@ -100,8 +100,8 @@ void test::strings::valueX::testOInt() {
template< typename T >
static void testFloat() {
- CPPUNIT_ASSERT_EQUAL( T( "39062.2" ), T::number( 39062.2f ));
- CPPUNIT_ASSERT_EQUAL( T( "30039062.2" ), T::number( 30039062.2 ));
+ CPPUNIT_ASSERT_EQUAL( T( "39062.2" ), T( T::number( 39062.2f )));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062.2" ), T( T::number( 30039062.2 )));
// long double not supported
}
diff --git a/sc/source/core/tool/interpr7.cxx b/sc/source/core/tool/interpr7.cxx
index 908c1d20aef2..4e682b531df8 100644
--- a/sc/source/core/tool/interpr7.cxx
+++ b/sc/source/core/tool/interpr7.cxx
@@ -437,7 +437,7 @@ void ScInterpreter::ScEncodeURL()
else
{
aUrlBuf.append( '%' );
- OString convertedChar = OString::number( static_cast<unsigned char>( c ), 16 ).toAsciiUpperCase();
+ OString convertedChar = OString( OString::number( static_cast<unsigned char>( c ), 16 )).toAsciiUpperCase();
// RFC 3986 indicates:
// "A percent-encoded octet is encoded as a character triplet,
// consisting of the percent character "%" followed by the two hexadecimal digits
diff --git a/sc/source/filter/excel/xepage.cxx b/sc/source/filter/excel/xepage.cxx
index 3e32ab1f3251..9783ea5e5fc0 100644
--- a/sc/source/filter/excel/xepage.cxx
+++ b/sc/source/filter/excel/xepage.cxx
@@ -95,8 +95,8 @@ void XclExpSetup::SaveXml( XclExpXmlStream& rStrm )
}
else
{
- pAttrList->add( XML_paperWidth, OString::number( mrData.mnPaperWidth ).concat("mm").getStr() );
- pAttrList->add( XML_paperHeight, OString::number( mrData.mnPaperHeight ).concat("mm").getStr() );
+ pAttrList->add( XML_paperWidth, OString(OString::number( mrData.mnPaperWidth ) + "mm").getStr() );
+ pAttrList->add( XML_paperHeight, OString(OString::number( mrData.mnPaperHeight ) + "mm").getStr() );
// pAttrList->add( XML_paperUnits, "mm" );
}
pAttrList->add( XML_scale, OString::number( mrData.mnScaling ).getStr() );
diff --git a/sc/source/filter/inc/xestream.hxx b/sc/source/filter/inc/xestream.hxx
index 93b070a55da9..6b8152bc6b48 100644
--- a/sc/source/filter/inc/xestream.hxx
+++ b/sc/source/filter/inc/xestream.hxx
@@ -287,12 +287,12 @@ public:
sax_fastparser::FSHelperPtr GetStreamForPath( const OUString& rPath );
template <typename Str, typename... Args>
- void WriteAttributes(sal_Int32 nAttribute, const Str& value, Args... rest)
+ void WriteAttributes(sal_Int32 nAttribute, Str&& value, Args&&... rest)
{
- WriteAttribute(nAttribute, value);
+ WriteAttribute(nAttribute, std::forward<Str>(value));
// coverity[stray_semicolon : FALSE] - coverity parse error
if constexpr(sizeof...(rest) > 0)
- WriteAttributes(rest...);
+ WriteAttributes(std::forward<Args>(rest)...);
}
sax_fastparser::FSHelperPtr CreateOutputStream (
diff --git a/scaddins/source/analysis/analysishelper.cxx b/scaddins/source/analysis/analysishelper.cxx
index 502e47a5d252..ae83afd174fb 100644
--- a/scaddins/source/analysis/analysishelper.cxx
+++ b/scaddins/source/analysis/analysishelper.cxx
@@ -709,7 +709,7 @@ OUString ConvertFromDec( double fNum, double fMin, double fMax, sal_uInt16 nBase
if( bNeg )
nNum = sal_Int64( pow( double( nBase ), double( nMaxPlaces ) ) ) + nNum;
- OUString aRet( OUString::number( nNum, nBase ).toAsciiUpperCase() );
+ OUString aRet( OUString( OUString::number( nNum, nBase )).toAsciiUpperCase() );
if( bUsePlaces )
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index cf31dfa902e7..eeda330cc569 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -2405,7 +2405,7 @@ OUString SdXImpressDocument::getPostIts()
aAnnotation.put("dateTime", utl::toISO8601(xAnnotation->getDateTime()));
uno::Reference<text::XText> xText(xAnnotation->getTextRange());
aAnnotation.put("text", xText->getString());
- aAnnotation.put("parthash", OUString::number(pPage->GetHashCode()));
+ aAnnotation.put("parthash", OUString(OUString::number(pPage->GetHashCode())));
aAnnotations.push_back(std::make_pair("", aAnnotation));
}
diff --git a/sfx2/source/appl/fileobj.cxx b/sfx2/source/appl/fileobj.cxx
index 2c42c5a59e33..744793e0626e 100644
--- a/sfx2/source/appl/fileobj.cxx
+++ b/sfx2/source/appl/fileobj.cxx
@@ -430,7 +430,7 @@ void SvFileObject::SendStateChg_Impl( sfx2::LinkManager::LinkState nState )
if( !bStateChangeCalled && HasDataLinks() )
{
DataChanged( SotExchange::GetFormatName(
- sfx2::LinkManager::RegisterStatusInfoId()), css::uno::Any(OUString::number( nState )) );
+ sfx2::LinkManager::RegisterStatusInfoId()), css::uno::makeAny(OUString::number( nState )) );
bStateChangeCalled = true;
}
}
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx
index 066c4016c07a..5e236f6460d3 100644
--- a/starmath/source/dialog.cxx
+++ b/starmath/source/dialog.cxx
@@ -1584,7 +1584,7 @@ IMPL_LINK_NOARG(SmSymDefineDialog, CharHighlightHdl, SvxShowCharSet*, void)
UpdateButtons();
// display Unicode position as symbol name while iterating over characters
- const OUString aHex(OUString::number(cChar, 16 ).toAsciiUpperCase());
+ const OUString aHex(OUString(OUString::number(cChar, 16 )).toAsciiUpperCase());
const OUString aPattern( (aHex.getLength() > 4) ? OUString("Ux000000") : OUString("Ux0000") );
OUString aUnicodePos( aPattern.copy( 0, aPattern.getLength() - aHex.getLength() ) );
aUnicodePos += aHex;
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 7a558bd015df..04fcc99a9772 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -4210,7 +4210,7 @@ OUString NfCurrencyEntry::BuildSymbolString(bool bBank,
if ( !bWithoutExtension && eLanguage != LANGUAGE_DONTKNOW && eLanguage != LANGUAGE_SYSTEM )
{
sal_Int32 nLang = static_cast<sal_uInt16>(eLanguage);
- aBuf.append('-').append( OUString::number(nLang, 16).toAsciiUpperCase());
+ aBuf.append('-').append( OUString( OUString::number(nLang, 16)).toAsciiUpperCase());
}
}
aBuf.append(']');
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 092d6b2b5908..64505adab290 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -1165,7 +1165,7 @@ SvNumberformat::SvNumberformat(OUString& rString,
((eLanguage = MsLangId::getRealLanguage( eLan)) == LANGUAGE_THAI) &&
NumFor[nIndex].GetNatNum().GetLang() == LANGUAGE_DONTKNOW)
{
- sStr = "[$-" + OUString::number( sal_uInt16(eLanguage), 16 ).toAsciiUpperCase() + "]" + sStr;
+ sStr = "[$-" + OUString(OUString::number( sal_uInt16(eLanguage), 16 )).toAsciiUpperCase() + "]" + sStr;
NumFor[nIndex].SetNatNumLang( eLanguage);
}
sBuff.remove(nPosOld, nPos - nPosOld);
@@ -5085,7 +5085,7 @@ static void lcl_insertLCID( OUStringBuffer& rFormatStr, sal_uInt32 nLCID, sal_In
// No format code, no locale.
return;
- OUStringBuffer aLCIDString = OUString::number( nLCID , 16 ).toAsciiUpperCase();
+ OUStringBuffer aLCIDString = OUString(OUString::number( nLCID , 16 )).toAsciiUpperCase();
// Search for only last DBNum which is the last element before insertion position
if ( bDBNumInserted && nPosInsertLCID >= 8
&& aLCIDString.getLength() > 4
diff --git a/tools/qa/cppunit/test_xmlwalker.cxx b/tools/qa/cppunit/test_xmlwalker.cxx
index 4c2f9a808ea6..e06886deddd8 100644
--- a/tools/qa/cppunit/test_xmlwalker.cxx
+++ b/tools/qa/cppunit/test_xmlwalker.cxx
@@ -53,7 +53,8 @@ void XmlWalkerTest::testReadXML()
{
nNumberOfChildNodes++;
- CPPUNIT_ASSERT_EQUAL(OString::number(nNumberOfChildNodes), aWalker.attribute("number"));
+ CPPUNIT_ASSERT_EQUAL(OString(OString::number(nNumberOfChildNodes)),
+ aWalker.attribute("number"));
if (nNumberOfChildNodes == 1) // only the first node has the attribute
CPPUNIT_ASSERT_EQUAL(OString("123"), aWalker.attribute("attribute"));
diff --git a/unoidl/source/sourceprovider-scanner.l b/unoidl/source/sourceprovider-scanner.l
index 29d594caf8e5..d0dd5a0dc155 100644
--- a/unoidl/source/sourceprovider-scanner.l
+++ b/unoidl/source/sourceprovider-scanner.l
@@ -245,7 +245,7 @@ ALNUM {DIGIT}|{ALPHA}
yyextra->errorMessage = c >= ' ' && c <= '~'
? OUString("invalid character \"" + OUStringLiteral1(c) + "\"")
: OUString(
- "invalid byte x" + OUString::number(c, 16).toAsciiUpperCase());
+ "invalid byte x" + OUString(OUString::number(c, 16)).toAsciiUpperCase());
return TOK_ERROR;
}
diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx
index f44d13e18b83..ffc6956d4cf2 100644
--- a/vcl/source/control/field.cxx
+++ b/vcl/source/control/field.cxx
@@ -814,12 +814,12 @@ namespace
OUStringBuffer aBuf;
sal_Int32 nTextLen;
- nTextLen = OUString::number(rFormatter.GetMin()).getLength();
+ nTextLen = OUString(OUString::number(rFormatter.GetMin())).getLength();
string::padToLength(aBuf, nTextLen, '9');
Size aMinTextSize = rSpinField.CalcMinimumSizeForText(
rFormatter.CreateFieldText(aBuf.makeStringAndClear().toInt64()));
- nTextLen = OUString::number(rFormatter.GetMax()).getLength();
+ nTextLen = OUString(OUString::number(rFormatter.GetMax())).getLength();
string::padToLength(aBuf, nTextLen, '9');
Size aMaxTextSize = rSpinField.CalcMinimumSizeForText(
rFormatter.CreateFieldText(aBuf.makeStringAndClear().toInt64()));
diff --git a/winaccessibility/source/UAccCOM/AccTextBase.cxx b/winaccessibility/source/UAccCOM/AccTextBase.cxx
index 6fe5130b4c11..9e5c63605df0 100644
--- a/winaccessibility/source/UAccCOM/AccTextBase.cxx
+++ b/winaccessibility/source/UAccCOM/AccTextBase.cxx
@@ -170,7 +170,7 @@ STDMETHODIMP CAccTextBase::get_attributes(long offset, long * startOffset, long
unsigned long nColor;
pValue.Value >>= nColor;
strAttrs.append('#');
- auto const hex = OUString::number(nColor, 16).toAsciiUpperCase();
+ auto const hex = OUString(OUString::number(nColor, 16)).toAsciiUpperCase();
for (sal_Int32 j = hex.getLength(); j < 8; ++j) {
strAttrs.append('0');
}
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx
index 59e40a39d681..133e2a4eace0 100644
--- a/xmloff/source/style/xmlnumfi.cxx
+++ b/xmloff/source/style/xmlnumfi.cxx
@@ -1474,7 +1474,7 @@ SvXMLNumFormatContext::SvXMLNumFormatContext( SvXMLImport& rImport,
{
aFormatCode.append( "][$-" );
// language code in upper hex:
- aFormatCode.append(OUString::number(static_cast<sal_uInt16>(eLang), 16).toAsciiUpperCase());
+ aFormatCode.append(OUString(OUString::number(static_cast<sal_uInt16>(eLang), 16)).toAsciiUpperCase());
}
aFormatCode.append( ']' );
}
@@ -2029,7 +2029,7 @@ void SvXMLNumFormatContext::AddCurrency( const OUString& rContent, LanguageType
if ( nLang != LANGUAGE_SYSTEM )
{
// '-' sign and language code in hex:
- aFormatCode.append("-").append(OUString::number(sal_uInt16(nLang), 16).toAsciiUpperCase());
+ aFormatCode.append("-").append(OUString(OUString::number(sal_uInt16(nLang), 16)).toAsciiUpperCase());
}
aFormatCode.append( ']' ); // end of "new" currency symbol