20 #ifndef INCLUDED_RTL_USTRBUF_HXX
21 #define INCLUDED_RTL_USTRBUF_HXX
33 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
42 #ifdef RTL_STRING_UNITTEST
43 #define rtl rtlunittest
49 #ifdef RTL_STRING_UNITTEST
77 , nCapacity( value.nCapacity )
94 #if __cplusplus >= 201103L
99 #if SAL_TYPES_SIZEOFLONG == 4
101 explicit OUStringBuffer(
long length)
102 : OUStringBuffer(static_cast<int>(length))
105 explicit OUStringBuffer(
unsigned long length)
106 : OUStringBuffer(static_cast<int>(length))
111 explicit OUStringBuffer(
char) =
delete;
127 , nCapacity( value.getLength() + 16 )
132 template<
typename T >
135 , nCapacity( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 + 16 )
139 #ifdef RTL_STRING_UNITTEST
140 rtl_string_unittest_const_literal =
true;
144 #ifdef RTL_STRING_UNITTEST
149 template<
typename T >
155 rtl_string_unittest_invalid_conversion =
true;
161 template<
typename T >
162 OUStringBuffer(
const T&,
typename libreoffice_internal::ExceptCharArrayDetector< T >::Type = libreoffice_internal::Dummy() )
167 rtl_string_unittest_invalid_conversion =
true;
171 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
176 template<
typename T1,
typename T2 >
177 OUStringBuffer(
const OUStringConcat< T1, T2 >& c )
179 const sal_Int32 l = c.length();
184 pData->length = end - pData->buffer;
197 nCapacity = value.nCapacity;
232 return pData->length;
245 return pData->length == 0;
299 assert(newLength >= 0);
301 if( newLength != pData->length )
303 if( newLength > nCapacity )
306 pData->buffer[newLength] = 0;
307 pData->length = newLength;
327 assert(index >= 0 && index < pData->length);
328 return pData->buffer[ index ];
344 assert(index >= 0 && index < pData->length);
345 pData->buffer[ index ] = ch;
365 assert(index >= 0 && index < pData->length);
366 return pData->buffer[index];
380 assert(index >= 0 && index < pData->length);
381 return pData->buffer[index];
390 return OUString(pData->buffer, pData->length);
460 assert( len == 0 || str != 0 );
470 template<
typename T >
479 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
484 template<
typename T1,
typename T2 >
487 const int l = c.length();
491 sal_Unicode* end = c.addData( pData->buffer + pData->length );
493 pData->length = end - pData->buffer;
566 template<
typename T >
613 assert(static_cast< unsigned char >(c) <= 0x7F);
629 return append( &c, 1 );
716 return insertUtf32(getLength(), c);
735 sal_Int32 n = getLength();
737 return pData->buffer + n;
802 assert( len == 0 || str != 0 );
812 template<
typename T >
890 return insert( offset, &u, 1 );
911 return insert( offset, &c, 1 );
1078 sal_Int32 index = 0;
1079 while((index = indexOf(oldChar, index)) >= 0)
1081 pData->buffer[ index ] = newChar;
1102 sal_Int32 ** pInternalCapacity)
1104 *pInternalData = &pData;
1105 *pInternalCapacity = &nCapacity;
1126 assert( fromIndex >= 0 && fromIndex <= pData->length );
1128 return (ret < 0 ? ret : ret+fromIndex);
1163 assert( fromIndex >= 0 && fromIndex <= pData->length );
1186 assert( fromIndex >= 0 && fromIndex <= pData->length );
1188 str.pData->buffer, str.pData->length );
1189 return (ret < 0 ? ret : ret+fromIndex);
1198 template<
typename T >
1203 pData->buffer + fromIndex, pData->length - fromIndex, literal,
1205 return ret < 0 ? ret : ret + fromIndex;
1228 str.pData->buffer, str.pData->length );
1252 assert( fromIndex >= 0 && fromIndex <= pData->length );
1254 str.pData->buffer, str.pData->length );
1262 template<
typename T >
1282 for(index = 0; index < getLength() ; index++)
1284 if(pData->buffer[ index ] != c)
1307 sal_Int32 result = getLength();
1309 for(index = getLength(); index > 0 ; index--)
1311 if(pData->buffer[ index - 1 ] != c)
1316 if(index < getLength())
1320 return result - getLength();
1333 return stripStart(c) + stripEnd(c);
1348 return copy( beginIndex, getLength() - beginIndex );
1366 assert(beginIndex >= 0 && beginIndex <= getLength());
1367 assert(count >= 0 && count <= getLength() - beginIndex);
1368 rtl_uString *pNew = 0;
1377 nCapacity = capacity;
1383 rtl_uString * pData;
1388 sal_Int32 nCapacity;
1391 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
1396 struct ToStringHelper< OUStringBuffer >
1398 static int length(
const OUStringBuffer& s ) {
return s.
getLength(); }
1399 static sal_Unicode* addData(
sal_Unicode* buffer,
const OUStringBuffer& s ) {
return addDataHelper( buffer, s.getStr(), s.getLength()); }
1400 static const bool allowOStringConcat =
false;
1401 static const bool allowOUStringConcat =
true;
1407 #ifdef RTL_STRING_UNITTEST
1410 typedef rtlunittest::OUStringBuffer OUStringBuffer;
1414 #if defined LIBO_INTERNAL_ONLY && !defined RTL_STRING_UNITTEST
1415 using ::rtl::OUStringBuffer;
1418 #endif // INCLUDED_RTL_USTRBUF_HXX