diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2023-05-05 16:18:28 +0200 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2023-05-06 07:24:47 +0200 |
commit | e15e809e331e9fdb7a7ed46937f2ad5f83e27dc5 (patch) | |
tree | 514ad69a027b523410ab9de2e14388c253e5c4af | |
parent | 73ede24746ce7d06487ca34e20af436c2a119cbf (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.hxx | 55 | ||||
-rw-r--r-- | include/rtl/ustrbuf.hxx | 83 |
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 /** |