summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2023-05-05 16:18:28 +0200
committerMike Kaganski <mike.kaganski@collabora.com>2023-05-06 07:24:47 +0200
commite15e809e331e9fdb7a7ed46937f2ad5f83e27dc5 (patch)
tree514ad69a027b523410ab9de2e14388c253e5c4af
parent73ede24746ce7d06487ca34e20af436c2a119cbf (diff)
Simplify O(U)StringBuffer's append - delegate to insert
This limits the number of places that know how to deal with a given type. O(U)StringNumber doesn't need an own overload, because it has operator basic_string_view. Change-Id: I6e82dc2cef103b578153fbc3ce16e96247ea9d74 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151379 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r--include/rtl/strbuf.hxx55
-rw-r--r--include/rtl/ustrbuf.hxx83
2 files changed, 34 insertions, 104 deletions
diff --git a/include/rtl/strbuf.hxx b/include/rtl/strbuf.hxx
index cb842bb5839e..780923ebf67b 100644
--- a/include/rtl/strbuf.hxx
+++ b/include/rtl/strbuf.hxx
@@ -348,8 +348,7 @@ public:
template<std::size_t N>
OStringBuffer & operator =(OStringNumber<N> && n)
{
- *this = OStringBuffer( std::move ( n ));
- return *this;
+ return operator =(std::string_view(n));
}
#endif
@@ -543,7 +542,7 @@ public:
*/
OStringBuffer & append(const OString &str)
{
- return append( str.getStr(), str.getLength() );
+ return insert(getLength(), str);
}
#endif
@@ -561,13 +560,13 @@ public:
template< typename T >
typename libreoffice_internal::CharPtrDetector< T, OStringBuffer& >::Type append( const T& str )
{
- return append( str, rtl_str_getLength( str ) );
+ return insert(getLength(), str);
}
template< typename T >
typename libreoffice_internal::NonConstCharArrayDetector< T, OStringBuffer& >::Type append( T& str )
{
- return append( str, rtl_str_getLength( str ) );
+ return insert(getLength(), str);
}
/**
@@ -578,12 +577,7 @@ public:
template< typename T >
typename libreoffice_internal::ConstCharArrayDetector< T, OStringBuffer& >::Type append( T& literal )
{
- RTL_STRING_CONST_FUNCTION
- assert(
- libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal));
- return append(
- libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal),
- libreoffice_internal::ConstCharArrayDetector<T>::length);
+ return insert(getLength(), literal);
}
/**
@@ -601,9 +595,7 @@ public:
*/
OStringBuffer & append( const char * str, sal_Int32 len)
{
- assert( len == 0 || str != NULL ); // cannot assert that in rtl_stringbuffer_insert
- rtl_stringbuffer_insert( &pData, &nCapacity, getLength(), str, len );
- return *this;
+ return insert(getLength(), str, len);
}
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
@@ -615,33 +607,18 @@ public:
OStringBuffer& append( OStringConcat< T1, T2 >&& c )
{
sal_Int32 l = c.length();
- if( l == 0 )
- return *this;
- l += pData->length;
- rtl_stringbuffer_ensureCapacity( &pData, &nCapacity, l );
- char* end = c.addData( pData->buffer + pData->length );
- *end = '\0';
- pData->length = l;
+ if (l != 0)
+ c.addData(appendUninitialized(l));
return *this;
}
/**
@overload
@internal
- */
- template< std::size_t N >
- OStringBuffer& append( OStringNumber< N >&& c )
- {
- return append( c.buf, c.length );
- }
-
- /**
- @overload
- @internal
*/
OStringBuffer& append( std::string_view s )
{
- return append( s.data(), s.size() );
+ return insert(getLength(), s);
}
#endif
@@ -659,8 +636,7 @@ public:
*/
OStringBuffer & append(sal_Bool b)
{
- char sz[RTL_STR_MAX_VALUEOFBOOLEAN];
- return append( sz, rtl_str_valueOfBoolean( sz, b ) );
+ return insert(getLength(), b);
}
/**
@@ -678,8 +654,7 @@ public:
*/
OStringBuffer & append(bool b)
{
- char sz[RTL_STR_MAX_VALUEOFBOOLEAN];
- return append( sz, rtl_str_valueOfBoolean( sz, b ) );
+ return insert(getLength(), b);
}
/// @cond INTERNAL
@@ -704,7 +679,7 @@ public:
*/
OStringBuffer & append(char c)
{
- return append( &c, 1 );
+ return insert(getLength(), c);
}
/**
@@ -721,8 +696,7 @@ public:
*/
OStringBuffer & append(sal_Int32 i, sal_Int16 radix = 10 )
{
- char sz[RTL_STR_MAX_VALUEOFINT32];
- return append( sz, rtl_str_valueOfInt32( sz, i, radix ) );
+ return insert(getLength(), i, radix);
}
/**
@@ -739,8 +713,7 @@ public:
*/
OStringBuffer & append(sal_Int64 l, sal_Int16 radix = 10 )
{
- char sz[RTL_STR_MAX_VALUEOFINT64];
- return append( sz, rtl_str_valueOfInt64( sz, l, radix ) );
+ return insert(getLength(), l, radix);
}
/**
diff --git a/include/rtl/ustrbuf.hxx b/include/rtl/ustrbuf.hxx
index 227eed842443..54a4b3730b8b 100644
--- a/include/rtl/ustrbuf.hxx
+++ b/include/rtl/ustrbuf.hxx
@@ -384,8 +384,7 @@ public:
template<std::size_t N>
OUStringBuffer & operator =(OUStringNumber<N> && n)
{
- *this = OUStringBuffer( std::move( n ) );
- return *this;
+ return operator =(std::u16string_view(n));
}
#endif
@@ -592,17 +591,12 @@ public:
*/
#if !defined LIBO_INTERNAL_ONLY
OUStringBuffer & append(const OUString &str)
- {
- return append( str.getStr(), str.getLength() );
- }
#else
- OUStringBuffer & append(std::u16string_view sv) {
- if (sv.size() > sal_uInt32(std::numeric_limits<sal_Int32>::max())) {
- throw std::bad_alloc();
- }
- return append(sv.data(), sv.size());
- }
+ OUStringBuffer & append(std::u16string_view str)
#endif
+ {
+ return insert(getLength(), str);
+ }
#if !defined LIBO_INTERNAL_ONLY
/**
@@ -646,7 +640,7 @@ public:
OUStringBuffer & append( const sal_Unicode * str )
#endif
{
- return append( str, rtl_ustr_getLength( str ) );
+ return insert(getLength(), str);
}
/**
@@ -664,9 +658,7 @@ public:
*/
OUStringBuffer & append( const sal_Unicode * str, sal_Int32 len)
{
- assert( len == 0 || str != NULL ); // cannot assert that in rtl_uStringbuffer_insert
- rtl_uStringbuffer_insert( &pData, &nCapacity, getLength(), str, len );
- return *this;
+ return insert(getLength(), str, len);
}
/**
@@ -677,11 +669,7 @@ public:
template< typename T >
typename libreoffice_internal::ConstCharArrayDetector< T, OUStringBuffer& >::Type append( T& literal )
{
- assert(
- libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal));
- return appendAscii(
- libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal),
- libreoffice_internal::ConstCharArrayDetector<T>::length);
+ return insert(getLength(), literal);
}
#if defined LIBO_INTERNAL_ONLY
@@ -694,9 +682,7 @@ public:
typename libreoffice_internal::ConstCharArrayDetector<
T, OUStringBuffer &>::TypeUtf16
append(T & literal) {
- return append(
- libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal),
- libreoffice_internal::ConstCharArrayDetector<T>::length);
+ return insert(getLength(), literal);
}
#endif
@@ -708,25 +694,7 @@ public:
template< typename T1, typename T2 >
OUStringBuffer& append( OUStringConcat< T1, T2 >&& c )
{
- sal_Int32 l = c.length();
- if( l == 0 )
- return *this;
- l += pData->length;
- rtl_uStringbuffer_ensureCapacity( &pData, &nCapacity, l );
- sal_Unicode* end = c.addData( pData->buffer + pData->length );
- *end = '\0';
- pData->length = l;
- return *this;
- }
-
- /**
- @overload
- @internal
- */
- template< std::size_t N >
- OUStringBuffer& append( OUStringNumber< N >&& c )
- {
- return append( c.buf, c.length );
+ return insert(getLength(), std::move(c));
}
#endif
@@ -789,8 +757,7 @@ public:
*/
OUStringBuffer & append(bool b)
{
- sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN];
- return append( sz, rtl_ustr_valueOfBoolean( sz, b ) );
+ return insert(getLength(), b);
}
/// @cond INTERNAL
@@ -810,7 +777,7 @@ public:
*/
OUStringBuffer & append(rtl_uString* str)
{
- return append( OUString( str ));
+ return append( OUString::unacquired( &str ));
}
/**
@@ -826,8 +793,7 @@ public:
*/
OUStringBuffer & append(sal_Bool b)
{
- sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN];
- return append( sz, rtl_ustr_valueOfBoolean( sz, b ) );
+ return insert(getLength(), b);
}
/**
@@ -845,7 +811,7 @@ public:
OUStringBuffer & append(char c)
{
assert(static_cast< unsigned char >(c) <= 0x7F);
- return append(sal_Unicode(c));
+ return insert(getLength(), c);
}
/**
@@ -860,7 +826,7 @@ public:
*/
OUStringBuffer & append(sal_Unicode c)
{
- return append( &c, 1 );
+ return insert(getLength(), c);
}
#if defined LIBO_INTERNAL_ONLY
@@ -881,8 +847,7 @@ public:
*/
OUStringBuffer & append(sal_Int32 i, sal_Int16 radix = 10 )
{
- sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT32];
- return append( sz, rtl_ustr_valueOfInt32( sz, i, radix ) );
+ return insert(getLength(), i, radix);
}
/**
@@ -899,8 +864,7 @@ public:
*/
OUStringBuffer & append(sal_Int64 l, sal_Int16 radix = 10 )
{
- sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT64];
- return append( sz, rtl_ustr_valueOfInt64( sz, l, radix ) );
+ return insert(getLength(), l, radix);
}
/**
@@ -1005,6 +969,9 @@ public:
#if defined LIBO_INTERNAL_ONLY
OUStringBuffer & insert(sal_Int32 offset, std::u16string_view str)
{
+ if (str.size() > sal_uInt32(std::numeric_limits<sal_Int32>::max())) {
+ throw std::bad_alloc();
+ }
return insert( offset, str.data(), str.length() );
}
#else
@@ -1034,16 +1001,6 @@ public:
c.addData(pData->buffer + offset);
return *this;
}
-
- /**
- @overload
- @internal
- */
- template <std::size_t N>
- OUStringBuffer& insert(sal_Int32 offset, OUStringNumber<N>&& c)
- {
- return insert(offset, c.buf, c.length);
- }
#endif
/**