20 #ifndef INCLUDED_RTL_USTRBUF_HXX
21 #define INCLUDED_RTL_USTRBUF_HXX
33 #ifdef RTL_FAST_STRING
42 #ifdef RTL_STRING_UNITTEST
43 #define rtl rtlunittest
49 #ifdef RTL_STRING_UNITTEST
113 , nCapacity( value.nCapacity )
126 , nCapacity( length )
143 , nCapacity( value.getLength() + 16 )
148 template<
typename T >
151 , nCapacity( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 + 16 )
155 #ifdef RTL_STRING_UNITTEST
156 rtl_string_unittest_const_literal =
true;
160 #ifdef RTL_STRING_UNITTEST
165 template<
typename T >
171 rtl_string_unittest_invalid_conversion =
true;
177 template<
typename T >
178 OUStringBuffer(
const T&,
typename libreoffice_internal::ExceptCharArrayDetector< T >::Type = libreoffice_internal::Dummy() )
183 rtl_string_unittest_invalid_conversion =
true;
187 #ifdef RTL_FAST_STRING
192 template<
typename T1,
typename T2 >
193 OUStringBuffer(
const OUStringConcat< T1, T2 >& c )
195 const sal_Int32 l = c.length();
200 pData->length = end - pData->buffer;
213 nCapacity = value.nCapacity;
248 return pData->length;
261 return pData->length == 0;
315 assert(newLength >= 0);
317 if( newLength != pData->length )
319 if( newLength > nCapacity )
322 pData->buffer[newLength] = 0;
323 pData->length = newLength;
343 assert(index >= 0 && index < pData->length);
344 return pData->buffer[ index ];
360 assert(index >= 0 && index < pData->length);
361 pData->buffer[ index ] = ch;
381 assert(index >= 0 && index < pData->length);
382 return pData->buffer[index];
396 assert(index >= 0 && index < pData->length);
397 return pData->buffer[index];
406 return OUString(pData->buffer, pData->length);
477 assert( len == 0 || str != 0 );
487 template<
typename T >
496 #ifdef RTL_FAST_STRING
501 template<
typename T1,
typename T2 >
504 const int l = c.length();
508 sal_Unicode* end = c.addData( pData->buffer + pData->length );
510 pData->length = end - pData->buffer;
584 template<
typename T >
631 assert(static_cast< unsigned char >(c) <= 0x7F);
647 return append( &c, 1 );
734 return insertUtf32(getLength(), c);
754 sal_Int32 n = getLength();
756 return pData->buffer + n;
821 assert( offset >= 0 && offset <= pData->length );
823 assert( len == 0 || str != 0 );
833 template<
typename T >
911 return insert( offset, &u, 1 );
932 return insert( offset, &c, 1 );
1067 assert( start >= 0 && start <= pData->length );
1085 assert( start >= 0 && start <= pData->length );
1102 sal_Int32 index = 0;
1103 while((index = indexOf(oldChar, index)) >= 0)
1105 pData->buffer[ index ] = newChar;
1126 sal_Int32 ** pInternalCapacity)
1128 *pInternalData = &pData;
1129 *pInternalCapacity = &nCapacity;
1150 assert( fromIndex >= 0 && fromIndex <= pData->length );
1152 return (ret < 0 ? ret : ret+fromIndex);
1187 assert( fromIndex >= 0 && fromIndex <= pData->length );
1210 assert( fromIndex >= 0 && fromIndex <= pData->length );
1212 str.pData->buffer, str.pData->length );
1213 return (ret < 0 ? ret : ret+fromIndex);
1222 template<
typename T >
1227 pData->buffer + fromIndex, pData->length - fromIndex, literal,
1229 return ret < 0 ? ret : ret + fromIndex;
1252 str.pData->buffer, str.pData->length );
1276 assert( fromIndex >= 0 && fromIndex <= pData->length );
1278 str.pData->buffer, str.pData->length );
1286 template<
typename T >
1306 for(index = 0; index < getLength() ; index++)
1308 if(pData->buffer[ index ] != c)
1331 sal_Int32 result = getLength();
1333 for(index = getLength(); index > 0 ; index--)
1335 if(pData->buffer[ index - 1 ] != c)
1340 if(index < getLength())
1344 return result - getLength();
1357 return stripStart(c) + stripEnd(c);
1372 assert(beginIndex >= 0 && beginIndex <= getLength());
1373 return copy( beginIndex, getLength() - beginIndex );
1391 assert(beginIndex >= 0 && beginIndex <= getLength());
1392 assert(count >= 0 && count <= getLength() - beginIndex);
1393 rtl_uString *pNew = 0;
1398 #ifdef LIBO_INTERNAL_ONLY
1401 #ifndef RTL_FAST_STRING
1414 OUStringBuffer( rtl_uString * value,
const sal_Int32 capacity )
1417 nCapacity = capacity;
1423 rtl_uString * pData;
1428 sal_Int32 nCapacity;
1431 #ifdef RTL_FAST_STRING
1436 struct ToStringHelper< OUStringBuffer >
1438 static int length(
const OUStringBuffer& s ) {
return s.
getLength(); }
1439 static sal_Unicode* addData(
sal_Unicode* buffer,
const OUStringBuffer& s ) {
return addDataHelper( buffer, s.getStr(), s.getLength()); }
1440 static const bool allowOStringConcat =
false;
1441 static const bool allowOUStringConcat =
true;
1447 #ifdef RTL_STRING_UNITTEST
1450 typedef rtlunittest::OUStringBuffer OUStringBuffer;
1455 using ::rtl::OUStringBuffer;
1458 #endif // INCLUDED_RTL_USTRBUF_HXX