LibreOffice
LibreOffice 5.1 SDK C/C++ API Reference
ustrbuf.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef INCLUDED_RTL_USTRBUF_HXX
21 #define INCLUDED_RTL_USTRBUF_HXX
22 
23 #include <sal/config.h>
24 
25 #include <cassert>
26 #include <cstddef>
27 #include <string.h>
28 
29 #include <rtl/ustrbuf.h>
30 #include <rtl/ustring.hxx>
31 #include <rtl/stringutils.hxx>
32 #include <sal/types.h>
33 
34 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
35 #include <rtl/stringconcat.hxx>
36 #endif
37 
38 // The unittest uses slightly different code to help check that the proper
39 // calls are made. The class is put into a different namespace to make
40 // sure the compiler generates a different (if generating also non-inline)
41 // copy of the function and does not merge them together. The class
42 // is "brought" into the proper rtl namespace by a typedef below.
43 #ifdef RTL_STRING_UNITTEST
44 #define rtl rtlunittest
45 #endif
46 
47 namespace rtl
48 {
49 
50 #ifdef RTL_STRING_UNITTEST
51 #undef rtl
52 #endif
53 
57 {
58 public:
64  : pData(NULL)
65  , nCapacity( 16 )
66  {
67  rtl_uString_new_WithLength( &pData, nCapacity );
68  }
69 
76  OUStringBuffer( const OUStringBuffer & value )
77  : pData(NULL)
78  , nCapacity( value.nCapacity )
79  {
80  rtl_uStringbuffer_newFromStringBuffer( &pData, value.nCapacity, value.pData );
81  }
82 
89  explicit OUStringBuffer(int length)
90  : pData(NULL)
91  , nCapacity( length )
92  {
93  rtl_uString_new_WithLength( &pData, length );
94  }
95 #if __cplusplus >= 201103L
96  explicit OUStringBuffer(unsigned int length)
97  : OUStringBuffer(static_cast<int>(length))
98  {
99  }
100 #if SAL_TYPES_SIZEOFLONG == 4
101  // additional overloads for sal_Int32 sal_uInt32
102  explicit OUStringBuffer(long length)
103  : OUStringBuffer(static_cast<int>(length))
104  {
105  }
106  explicit OUStringBuffer(unsigned long length)
107  : OUStringBuffer(static_cast<int>(length))
108  {
109  }
110 #endif
111  // avoid obvious bugs
112  explicit OUStringBuffer(char) = delete;
113  explicit OUStringBuffer(sal_Unicode) = delete;
114 #endif
115 
126  OUStringBuffer(const OUString& value)
127  : pData(NULL)
128  , nCapacity( value.getLength() + 16 )
129  {
130  rtl_uStringbuffer_newFromStr_WithLength( &pData, value.getStr(), value.getLength() );
131  }
132 
133  template< typename T >
135  : pData(NULL)
136  , nCapacity( libreoffice_internal::ConstCharArrayDetector<T>::length + 16 )
137  {
138  assert(
141  &pData,
144 #ifdef RTL_STRING_UNITTEST
145  rtl_string_unittest_const_literal = true;
146 #endif
147  }
148 
149 #ifdef RTL_STRING_UNITTEST
150 
154  template< typename T >
156  {
157  pData = NULL;
158  nCapacity = 10;
159  rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage
160  rtl_string_unittest_invalid_conversion = true;
161  }
166  template< typename T >
168  {
169  pData = NULL;
170  nCapacity = 10;
171  rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage
172  rtl_string_unittest_invalid_conversion = true;
173  }
174 #endif
175 
176 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
177 
181  template< typename T1, typename T2 >
182  OUStringBuffer( const OUStringConcat< T1, T2 >& c )
183  {
184  const sal_Int32 l = c.length();
185  nCapacity = l + 16;
186  pData = rtl_uString_alloc( nCapacity );
187  sal_Unicode* end = c.addData( pData->buffer );
188  *end = '\0';
189  pData->length = l;
190  // TODO realloc in case pData->>length is noticeably smaller than l ?
191  }
192 #endif
193 
195  OUStringBuffer& operator = ( const OUStringBuffer& value )
196  {
197  if (this != &value)
198  {
200  value.nCapacity,
201  value.pData);
202  nCapacity = value.nCapacity;
203  }
204  return *this;
205  }
206 
211  {
212  rtl_uString_release( pData );
213  }
214 
224  {
225  return OUString(
226  rtl_uStringBuffer_makeStringAndClear( &pData, &nCapacity ),
227  SAL_NO_ACQUIRE );
228  }
229 
235  sal_Int32 getLength() const
236  {
237  return pData->length;
238  }
239 
248  bool isEmpty() const
249  {
250  return pData->length == 0;
251  }
252 
263  sal_Int32 getCapacity() const
264  {
265  return nCapacity;
266  }
267 
279  void ensureCapacity(sal_Int32 minimumCapacity)
280  {
281  rtl_uStringbuffer_ensureCapacity( &pData, &nCapacity, minimumCapacity );
282  }
283 
302  void setLength(sal_Int32 newLength)
303  {
304  assert(newLength >= 0);
305  // Avoid modifications if pData points to const empty string:
306  if( newLength != pData->length )
307  {
308  if( newLength > nCapacity )
309  rtl_uStringbuffer_ensureCapacity(&pData, &nCapacity, newLength);
310  else
311  pData->buffer[newLength] = 0;
312  pData->length = newLength;
313  }
314  }
315 
329  SAL_DEPRECATED("use rtl::OUStringBuffer::operator [] instead")
330  sal_Unicode charAt( sal_Int32 index ) const
331  {
332  assert(index >= 0 && index < pData->length);
333  return pData->buffer[ index ];
334  }
335 
346  SAL_DEPRECATED("use rtl::OUStringBuffer::operator [] instead")
347  OUStringBuffer & setCharAt(sal_Int32 index, sal_Unicode ch)
348  {
349  assert(index >= 0 && index < pData->length);
350  pData->buffer[ index ] = ch;
351  return *this;
352  }
353 
357  const sal_Unicode* getStr() const { return pData->buffer; }
358 
368  sal_Unicode & operator [](sal_Int32 index)
369  {
370  assert(index >= 0 && index < pData->length);
371  return pData->buffer[index];
372  }
373 
383  const sal_Unicode & operator [](sal_Int32 index) const
384  {
385  assert(index >= 0 && index < pData->length);
386  return pData->buffer[index];
387  }
388 
393  const OUString toString() const
394  {
395  return OUString(pData->buffer, pData->length);
396  }
397 
409  {
410  return append( str.getStr(), str.getLength() );
411  }
412 
426  {
427  if(!str.isEmpty())
428  {
429  append( str.getStr(), str.getLength() );
430  }
431  return *this;
432  }
433 
446  {
447  return append( str, rtl_ustr_getLength( str ) );
448  }
449 
463  OUStringBuffer & append( const sal_Unicode * str, sal_Int32 len)
464  {
465  assert( len == 0 || str != NULL ); // cannot assert that in rtl_uStringbuffer_insert
466  rtl_uStringbuffer_insert( &pData, &nCapacity, getLength(), str, len );
467  return *this;
468  }
469 
475  template< typename T >
477  {
478  assert(
481  &pData, &nCapacity, getLength(),
484  return *this;
485  }
486 
487 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
488 
492  template< typename T1, typename T2 >
493  OUStringBuffer& append( const OUStringConcat< T1, T2 >& c )
494  {
495  sal_Int32 l = c.length();
496  if( l == 0 )
497  return *this;
498  l += pData->length;
499  rtl_uStringbuffer_ensureCapacity( &pData, &nCapacity, l );
500  sal_Unicode* end = c.addData( pData->buffer + pData->length );
501  *end = '\0';
502  pData->length = l;
503  return *this;
504  }
505 #endif
506 
524  {
525  return appendAscii( str, rtl_str_getLength( str ) );
526  }
527 
546  OUStringBuffer & appendAscii( const sal_Char * str, sal_Int32 len)
547  {
548  rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, getLength(), str, len );
549  return *this;
550  }
551 
566  {
568  return append( sz, rtl_ustr_valueOfBoolean( sz, b ) );
569  }
570 
572  // Pointer can be automatically converted to bool, which is unwanted here.
573  // Explicitly delete all pointer append() overloads to prevent this
574  // (except for char* and sal_Unicode* overloads, which are handled elsewhere).
575  template< typename T >
576  typename libreoffice_internal::Enable< void,
578  append( T* ) SAL_DELETED_FUNCTION;
580 
581  // This overload is needed because OUString has a ctor from rtl_uString*, but
582  // the bool overload above would be preferred to the conversion.
586  OUStringBuffer & append(rtl_uString* str)
587  {
588  return append( OUString( str ));
589  }
590 
603  {
605  return append( sz, rtl_ustr_valueOfBoolean( sz, b ) );
606  }
607 
621  {
622  assert(static_cast< unsigned char >(c) <= 0x7F);
623  return append(sal_Unicode(c));
624  }
625 
637  {
638  return append( &c, 1 );
639  }
640 
641 #if LIBO_INTERNAL_ONLY && (!defined SAL_W32 || defined __MINGW32__)
642  // cf. sal/types.h sal_Unicode
643  void append(sal_uInt16) = delete;
644 #endif
645 
658  OUStringBuffer & append(sal_Int32 i, sal_Int16 radix = 10 )
659  {
661  return append( sz, rtl_ustr_valueOfInt32( sz, i, radix ) );
662  }
663 
676  OUStringBuffer & append(sal_Int64 l, sal_Int16 radix = 10 )
677  {
679  return append( sz, rtl_ustr_valueOfInt64( sz, l, radix ) );
680  }
681 
694  {
696  return append( sz, rtl_ustr_valueOfFloat( sz, f ) );
697  }
698 
710  OUStringBuffer & append(double d)
711  {
713  return append( sz, rtl_ustr_valueOfDouble( sz, d ) );
714  }
715 
729  OUStringBuffer & appendUtf32(sal_uInt32 c) {
730  return insertUtf32(getLength(), c);
731  }
732 
748  sal_Unicode * appendUninitialized(sal_Int32 length) {
749  sal_Int32 n = getLength();
750  rtl_uStringbuffer_insert(&pData, &nCapacity, n, NULL, length);
751  return pData->buffer + n;
752  }
753 
769  OUStringBuffer & insert(sal_Int32 offset, const OUString & str)
770  {
771  return insert( offset, str.getStr(), str.getLength() );
772  }
773 
791  OUStringBuffer & insert( sal_Int32 offset, const sal_Unicode * str )
792  {
793  return insert( offset, str, rtl_ustr_getLength( str ) );
794  }
795 
814  OUStringBuffer & insert( sal_Int32 offset, const sal_Unicode * str, sal_Int32 len)
815  {
816  assert( len == 0 || str != NULL ); // cannot assert that in rtl_uStringbuffer_insert
817  rtl_uStringbuffer_insert( &pData, &nCapacity, offset, str, len );
818  return *this;
819  }
820 
826  template< typename T >
828  {
829  assert(
832  &pData, &nCapacity, offset,
835  return *this;
836  }
837 
855  OUStringBuffer & insert(sal_Int32 offset, sal_Bool b)
856  {
858  return insert( offset, sz, rtl_ustr_valueOfBoolean( sz, b ) );
859  }
860 
880  OUStringBuffer & insert(sal_Int32 offset, bool b)
881  {
883  return insert( offset, sz, rtl_ustr_valueOfBoolean( sz, b ) );
884  }
885 
904  OUStringBuffer & insert(sal_Int32 offset, char c)
905  {
906  sal_Unicode u = c;
907  return insert( offset, &u, 1 );
908  }
909 
926  OUStringBuffer & insert(sal_Int32 offset, sal_Unicode c)
927  {
928  return insert( offset, &c, 1 );
929  }
930 
950  OUStringBuffer & insert(sal_Int32 offset, sal_Int32 i, sal_Int16 radix = 10 )
951  {
953  return insert( offset, sz, rtl_ustr_valueOfInt32( sz, i, radix ) );
954  }
955 
975  OUStringBuffer & insert(sal_Int32 offset, sal_Int64 l, sal_Int16 radix = 10 )
976  {
978  return insert( offset, sz, rtl_ustr_valueOfInt64( sz, l, radix ) );
979  }
980 
999  OUStringBuffer insert(sal_Int32 offset, float f)
1000  {
1002  return insert( offset, sz, rtl_ustr_valueOfFloat( sz, f ) );
1003  }
1004 
1023  OUStringBuffer & insert(sal_Int32 offset, double d)
1024  {
1026  return insert( offset, sz, rtl_ustr_valueOfDouble( sz, d ) );
1027  }
1028 
1044  OUStringBuffer & insertUtf32(sal_Int32 offset, sal_uInt32 c) {
1045  rtl_uStringbuffer_insertUtf32(&pData, &nCapacity, offset, c);
1046  return *this;
1047  }
1048 
1061  OUStringBuffer & remove( sal_Int32 start, sal_Int32 len )
1062  {
1063  rtl_uStringbuffer_remove( &pData, start, len );
1064  return *this;
1065  }
1066 
1077  OUStringBuffer & truncate( sal_Int32 start = 0 )
1078  {
1079  rtl_uStringbuffer_remove( &pData, start, getLength() - start );
1080  return *this;
1081  }
1082 
1094  {
1095  sal_Int32 index = 0;
1096  while((index = indexOf(oldChar, index)) >= 0)
1097  {
1098  pData->buffer[ index ] = newChar;
1099  }
1100  return *this;
1101  }
1102 
1118  inline void accessInternals(rtl_uString *** pInternalData,
1119  sal_Int32 ** pInternalCapacity)
1120  {
1121  *pInternalData = &pData;
1122  *pInternalCapacity = &nCapacity;
1123  }
1124 
1125 
1141  sal_Int32 indexOf( sal_Unicode ch, sal_Int32 fromIndex = 0 ) const
1142  {
1143  assert( fromIndex >= 0 && fromIndex <= pData->length );
1144  sal_Int32 ret = rtl_ustr_indexOfChar_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, ch );
1145  return (ret < 0 ? ret : ret+fromIndex);
1146  }
1147 
1159  sal_Int32 lastIndexOf( sal_Unicode ch ) const
1160  {
1161  return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, pData->length, ch );
1162  }
1163 
1178  sal_Int32 lastIndexOf( sal_Unicode ch, sal_Int32 fromIndex ) const
1179  {
1180  assert( fromIndex >= 0 && fromIndex <= pData->length );
1181  return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, fromIndex, ch );
1182  }
1183 
1201  sal_Int32 indexOf( const OUString & str, sal_Int32 fromIndex = 0 ) const
1202  {
1203  assert( fromIndex >= 0 && fromIndex <= pData->length );
1204  sal_Int32 ret = rtl_ustr_indexOfStr_WithLength( pData->buffer+fromIndex, pData->length-fromIndex,
1205  str.pData->buffer, str.pData->length );
1206  return (ret < 0 ? ret : ret+fromIndex);
1207  }
1208 
1215  template< typename T >
1216  typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const
1217  {
1218  assert(
1220  sal_Int32 n = rtl_ustr_indexOfAscii_WithLength(
1221  pData->buffer + fromIndex, pData->length - fromIndex,
1224  return n < 0 ? n : n + fromIndex;
1225  }
1226 
1244  sal_Int32 lastIndexOf( const OUString & str ) const
1245  {
1246  return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, pData->length,
1247  str.pData->buffer, str.pData->length );
1248  }
1249 
1269  sal_Int32 lastIndexOf( const OUString & str, sal_Int32 fromIndex ) const
1270  {
1271  assert( fromIndex >= 0 && fromIndex <= pData->length );
1272  return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, fromIndex,
1273  str.pData->buffer, str.pData->length );
1274  }
1275 
1281  template< typename T >
1283  {
1284  assert(
1287  pData->buffer, pData->length,
1290  }
1291 
1301  sal_Int32 stripStart(sal_Unicode c = (sal_Unicode)' ')
1302  {
1303  sal_Int32 index;
1304  for(index = 0; index < getLength() ; index++)
1305  {
1306  if(pData->buffer[ index ] != c)
1307  {
1308  break;
1309  }
1310  }
1311  if(index)
1312  {
1313  remove(0, index);
1314  }
1315  return index;
1316  }
1317 
1327  sal_Int32 stripEnd(sal_Unicode c = (sal_Unicode)' ')
1328  {
1329  sal_Int32 result = getLength();
1330  sal_Int32 index;
1331  for(index = getLength(); index > 0 ; index--)
1332  {
1333  if(pData->buffer[ index - 1 ] != c)
1334  {
1335  break;
1336  }
1337  }
1338  if(index < getLength())
1339  {
1340  truncate(index);
1341  }
1342  return result - getLength();
1343  }
1353  sal_Int32 strip(sal_Unicode c = (sal_Unicode)' ')
1354  {
1355  return stripStart(c) + stripEnd(c);
1356  }
1368  OUStringBuffer copy( sal_Int32 beginIndex ) const
1369  {
1370  return copy( beginIndex, getLength() - beginIndex );
1371  }
1372 
1386  OUStringBuffer copy( sal_Int32 beginIndex, sal_Int32 count ) const
1387  {
1388  assert(beginIndex >= 0 && beginIndex <= getLength());
1389  assert(count >= 0 && count <= getLength() - beginIndex);
1390  rtl_uString *pNew = NULL;
1391  rtl_uStringbuffer_newFromStr_WithLength( &pNew, getStr() + beginIndex, count );
1392  return OUStringBuffer( pNew, count + 16 );
1393  }
1394 
1395 private:
1396  OUStringBuffer( rtl_uString * value, const sal_Int32 capacity )
1397  {
1398  pData = value;
1399  nCapacity = capacity;
1400  }
1401 
1405  rtl_uString * pData;
1406 
1410  sal_Int32 nCapacity;
1411 };
1412 
1413 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
1414 
1417 template<>
1418 struct ToStringHelper< OUStringBuffer >
1419  {
1420  static int length( const OUStringBuffer& s ) { return s.getLength(); }
1421  static sal_Unicode* addData( sal_Unicode* buffer, const OUStringBuffer& s ) { return addDataHelper( buffer, s.getStr(), s.getLength()); }
1422  static const bool allowOStringConcat = false;
1423  static const bool allowOUStringConcat = true;
1424  };
1425 #endif
1426 
1427 }
1428 
1429 #ifdef RTL_STRING_UNITTEST
1430 namespace rtl
1431 {
1432 typedef rtlunittest::OUStringBuffer OUStringBuffer;
1433 }
1434 #endif
1435 
1436 #if defined LIBO_INTERNAL_ONLY && !defined RTL_STRING_UNITTEST
1437 using ::rtl::OUStringBuffer;
1438 #endif
1439 
1440 #endif // INCLUDED_RTL_USTRBUF_HXX
1441 
1442 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sal_Int32 indexOf(sal_Unicode ch, sal_Int32 fromIndex=0) const
Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index.
Definition: ustrbuf.hxx:1141
SAL_DLLPUBLIC sal_Int32 rtl_ustr_indexOfStr_WithLength(const sal_Unicode *str, sal_Int32 len, const sal_Unicode *subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
Search for the first occurrence of a substring within a string.
sal_Int32 strip(sal_Unicode c=(sal_Unicode)' ')
Strip the given character from the both end of the buffer.
Definition: ustrbuf.hxx:1353
SAL_DLLPUBLIC sal_Int32 rtl_ustr_lastIndexOfAscii_WithLength(sal_Unicode const *str, sal_Int32 len, char const *subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
Search for the last occurrence of an ASCII substring within a string.
OUStringBuffer & insert(sal_Int32 offset, sal_Bool b)
Inserts the string representation of the sal_Bool argument into this string buffer.
Definition: ustrbuf.hxx:855
SAL_DLLPUBLIC void rtl_uString_release(rtl_uString *str) SAL_THROW_EXTERN_C()
Decrement the reference count of a string.
SAL_DLLPUBLIC sal_Int32 rtl_ustr_getLength(const sal_Unicode *str) SAL_THROW_EXTERN_C()
Return the length of a string.
OUStringBuffer()
Constructs a string buffer with no characters in it and an initial capacity of 16 characters...
Definition: ustrbuf.hxx:63
sal_Int32 stripEnd(sal_Unicode c=(sal_Unicode)' ')
Strip the given character from the end of the buffer.
Definition: ustrbuf.hxx:1327
SAL_DLLPUBLIC void rtl_uStringbuffer_insert(rtl_uString **This, sal_Int32 *capacity, sal_Int32 offset, const sal_Unicode *str, sal_Int32 len)
Inserts the string representation of the str array argument into this string buffer.
OUStringBuffer insert(sal_Int32 offset, float f)
Inserts the string representation of the float argument into this string buffer.
Definition: ustrbuf.hxx:999
OUStringBuffer & append(double d)
Appends the string representation of the double argument to this string buffer.
Definition: ustrbuf.hxx:710
OUStringBuffer & insert(sal_Int32 offset, const sal_Unicode *str)
Inserts the string representation of the char array argument into this string buffer.
Definition: ustrbuf.hxx:791
OUStringBuffer & append(sal_Int64 l, sal_Int16 radix=10)
Appends the string representation of the long argument to this string buffer.
Definition: ustrbuf.hxx:676
libreoffice_internal::ConstCharArrayDetector< T, OUStringBuffer &>::Type append(T &literal)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: ustrbuf.hxx:476
OUStringBuffer & insert(sal_Int32 offset, char c)
Inserts the string representation of the char argument into this string buffer.
Definition: ustrbuf.hxx:904
SAL_DLLPUBLIC sal_Int32 rtl_ustr_valueOfFloat(sal_Unicode *str, float f) SAL_THROW_EXTERN_C()
Create the string representation of a float.
OUStringBuffer & append(const sal_Unicode *str, sal_Int32 len)
Appends the string representation of the char array argument to this string buffer.
Definition: ustrbuf.hxx:463
SAL_DLLPUBLIC sal_Int32 rtl_ustr_indexOfAscii_WithLength(sal_Unicode const *str, sal_Int32 len, char const *subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
Search for the first occurrence of an ASCII substring within a string.
OUStringBuffer & appendAscii(const sal_Char *str)
Appends a 8-Bit ASCII character string to this string buffer.
Definition: ustrbuf.hxx:523
SAL_DLLPUBLIC rtl_uString * rtl_uStringBuffer_makeStringAndClear(rtl_uString **ppThis, sal_Int32 *nCapacity)
Returns an immutable rtl_uString object, while clearing the string buffer.
#define RTL_USTR_MAX_VALUEOFINT32
Definition: ustring.h:957
void ensureCapacity(sal_Int32 minimumCapacity)
Ensures that the capacity of the buffer is at least equal to the specified minimum.
Definition: ustrbuf.hxx:279
void setLength(sal_Int32 newLength)
Sets the length of this String buffer.
Definition: ustrbuf.hxx:302
#define SAL_DELETED_FUNCTION
short-circuit extra-verbose API namespaces
Definition: types.h:408
SAL_DLLPUBLIC sal_Int32 rtl_ustr_valueOfInt32(sal_Unicode *str, sal_Int32 i, sal_Int16 radix) SAL_THROW_EXTERN_C()
Create the string representation of an integer.
SAL_DLLPUBLIC sal_Int32 rtl_ustr_indexOfChar_WithLength(const sal_Unicode *str, sal_Int32 len, sal_Unicode ch) SAL_THROW_EXTERN_C()
Search for the first occurrence of a character within a string.
OUStringBuffer & insert(sal_Int32 offset, bool b)
Inserts the string representation of the bool argument into this string buffer.
Definition: ustrbuf.hxx:880
SAL_DLLPUBLIC void rtl_uStringbuffer_remove(rtl_uString **This, sal_Int32 start, sal_Int32 len)
Removes the characters in a substring of this sequence.
#define SAL_DEPRECATED(message)
Use as follows: SAL_DEPRECATED("Dont use, its evil.") void doit(int nPara);.
Definition: types.h:499
#define SAL_WARN_UNUSED
Annotate classes where a compiler should warn if an instance is unused.
Definition: types.h:612
SAL_DLLPUBLIC sal_Int32 rtl_ustr_valueOfInt64(sal_Unicode *str, sal_Int64 l, sal_Int16 radix) SAL_THROW_EXTERN_C()
Create the string representation of a long integer.
SAL_DLLPUBLIC void rtl_uStringbuffer_newFromStr_WithLength(rtl_uString **newStr, const sal_Unicode *value, sal_Int32 count)
Allocates a new String that contains characters from the character array argument.
OUStringBuffer & insert(sal_Int32 offset, sal_Unicode c)
Inserts the string representation of the char argument into this string buffer.
Definition: ustrbuf.hxx:926
Definition: stringutils.hxx:245
bool isEmpty() const
Checks if a string buffer is empty.
Definition: ustrbuf.hxx:248
OUStringBuffer & append(sal_Bool b)
Appends the string representation of the sal_Bool argument to the string buffer.
Definition: ustrbuf.hxx:602
void accessInternals(rtl_uString ***pInternalData, sal_Int32 **pInternalCapacity)
Allows access to the internal data of this OUStringBuffer, for effective manipulation.
Definition: ustrbuf.hxx:1118
#define RTL_USTR_MAX_VALUEOFBOOLEAN
Definition: ustring.h:915
SAL_DLLPUBLIC sal_Int32 rtl_ustr_valueOfDouble(sal_Unicode *str, double d) SAL_THROW_EXTERN_C()
Create the string representation of a double.
sal_Int32 lastIndexOf(sal_Unicode ch, sal_Int32 fromIndex) const
Returns the index within this string of the last occurrence of the specified character, searching backward starting before the specified index.
Definition: ustrbuf.hxx:1178
sal_Int32 getLength() const
Returns the length (character count) of this string buffer.
Definition: ustrbuf.hxx:235
sal_Unicode * appendUninitialized(sal_Int32 length)
Unsafe way to make space for a fixed amount of characters to be appended into this OUStringBuffer...
Definition: ustrbuf.hxx:748
OUStringBuffer & truncate(sal_Int32 start=0)
Removes the tail of a string buffer start at the indicate position.
Definition: ustrbuf.hxx:1077
~OUStringBuffer()
Release the string data.
Definition: ustrbuf.hxx:210
OUStringBuffer & append(sal_Unicode c)
Appends the string representation of the char argument to this string buffer.
Definition: ustrbuf.hxx:636
sal_Int32 getCapacity() const
Returns the current capacity of the String buffer.
Definition: ustrbuf.hxx:263
OUStringBuffer & append(rtl_uString *str)
Definition: ustrbuf.hxx:586
OUStringBuffer & append(char c)
Appends the string representation of the ASCII char argument to this string buffer.
Definition: ustrbuf.hxx:620
OUStringBuffer & append(const sal_Unicode *str)
Appends the string representation of the char array argument to this string buffer.
Definition: ustrbuf.hxx:445
sal_Int32 lastIndexOf(const OUString &str, sal_Int32 fromIndex) const
Returns the index within this string of the last occurrence of the specified substring, searching backward starting before the specified index.
Definition: ustrbuf.hxx:1269
const OUString toString() const
Return a OUString instance reflecting the current content of this OUStringBuffer. ...
Definition: ustrbuf.hxx:393
sal_uInt16 sal_Unicode
Definition: types.h:155
OUStringBuffer copy(sal_Int32 beginIndex) const
Returns a new string buffer that is a substring of this string.
Definition: ustrbuf.hxx:1368
libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf(T &literal, sal_Int32 fromIndex=0) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: ustrbuf.hxx:1216
#define RTL_USTR_MAX_VALUEOFINT64
Definition: ustring.h:1003
unsigned char sal_Bool
Definition: types.h:48
OUStringBuffer & append(const OUString &str)
Appends the string to this string buffer.
Definition: ustrbuf.hxx:408
OUStringBuffer & replace(sal_Unicode oldChar, sal_Unicode newChar)
Replace all occurrences of oldChar in this string buffer with newChar.
Definition: ustrbuf.hxx:1093
OUStringBuffer & appendUtf32(sal_uInt32 c)
Appends a single UTF-32 character to this string buffer.
Definition: ustrbuf.hxx:729
OUStringBuffer(const OUStringBuffer &value)
Allocates a new string buffer that contains the same sequence of characters as the string buffer argu...
Definition: ustrbuf.hxx:76
Definition: stringutils.hxx:119
const sal_Unicode * getStr() const
Return a null terminated unicode character array.
Definition: ustrbuf.hxx:357
OUStringBuffer & append(const OUStringBuffer &str)
Appends the content of a stringbuffer to this string buffer.
Definition: ustrbuf.hxx:425
sal_Int32 lastIndexOf(const OUString &str) const
Returns the index within this string of the last occurrence of the specified substring, searching backward starting at the end.
Definition: ustrbuf.hxx:1244
SAL_DLLPUBLIC sal_Int32 rtl_ustr_lastIndexOfChar_WithLength(const sal_Unicode *str, sal_Int32 len, sal_Unicode ch) SAL_THROW_EXTERN_C()
Search for the last occurrence of a character within a string.
OUStringBuffer copy(sal_Int32 beginIndex, sal_Int32 count) const
Returns a new string buffer that is a substring of this string.
Definition: ustrbuf.hxx:1386
OUStringBuffer & insertUtf32(sal_Int32 offset, sal_uInt32 c)
Inserts a single UTF-32 character into this string buffer.
Definition: ustrbuf.hxx:1044
OUStringBuffer & append(bool b)
Appends the string representation of the bool argument to the string buffer.
Definition: ustrbuf.hxx:565
SAL_DLLPUBLIC sal_Int32 rtl_str_getLength(const sal_Char *str) SAL_THROW_EXTERN_C()
Return the length of a string.
sal_Int32 stripStart(sal_Unicode c=(sal_Unicode)' ')
Strip the given character from the start of the buffer.
Definition: ustrbuf.hxx:1301
OUStringBuffer(T &literal, typename libreoffice_internal::ConstCharArrayDetector< T, libreoffice_internal::Dummy >::Type=libreoffice_internal::Dummy())
Definition: ustrbuf.hxx:134
SAL_DLLPUBLIC void rtl_uStringbuffer_insert_ascii(rtl_uString **This, sal_Int32 *capacity, sal_Int32 offset, const sal_Char *str, sal_Int32 len)
Inserts the 8-Bit ASCII string representation of the str array argument into this string buffer...
libreoffice_internal::ConstCharArrayDetector< T, OUStringBuffer &>::Type insert(sal_Int32 offset, T &literal)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: ustrbuf.hxx:827
definition of a no acquire enum for ctors
Definition: types.h:386
OUStringBuffer & appendAscii(const sal_Char *str, sal_Int32 len)
Appends a 8-Bit ASCII character string to this string buffer.
Definition: ustrbuf.hxx:546
SAL_DLLPUBLIC sal_Int32 rtl_ustr_valueOfBoolean(sal_Unicode *str, sal_Bool b) SAL_THROW_EXTERN_C()
Create the string representation of a boolean.
OUStringBuffer & insert(sal_Int32 offset, sal_Int64 l, sal_Int16 radix=10)
Inserts the string representation of the long argument into this string buffer.
Definition: ustrbuf.hxx:975
This String class provides base functionality for C++ like Unicode character array handling...
Definition: ustring.hxx:106
libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type lastIndexOf(T &literal) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: ustrbuf.hxx:1282
SAL_DLLPUBLIC void rtl_uString_new_WithLength(rtl_uString **newStr, sal_Int32 nLen) SAL_THROW_EXTERN_C()
Allocate a new string containing space for a given number of characters.
SAL_DLLPUBLIC sal_Int32 rtl_ustr_lastIndexOfStr_WithLength(const sal_Unicode *str, sal_Int32 len, const sal_Unicode *subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C()
Search for the last occurrence of a substring within a string.
OUStringBuffer & insert(sal_Int32 offset, double d)
Inserts the string representation of the double argument into this string buffer. ...
Definition: ustrbuf.hxx:1023
OUStringBuffer & insert(sal_Int32 offset, sal_Int32 i, sal_Int16 radix=10)
Inserts the string representation of the second sal_Int32 argument into this string buffer...
Definition: ustrbuf.hxx:950
OUStringBuffer(const OUString &value)
Constructs a string buffer so that it represents the same sequence of characters as the string argume...
Definition: ustrbuf.hxx:126
OUStringBuffer & append(sal_Int32 i, sal_Int16 radix=10)
Appends the string representation of the sal_Int32 argument to this string buffer.
Definition: ustrbuf.hxx:658
OUStringBuffer & insert(sal_Int32 offset, const OUString &str)
Inserts the string into this string buffer.
Definition: ustrbuf.hxx:769
OUStringBuffer(int length)
Constructs a string buffer with no characters in it and an initial capacity specified by the length a...
Definition: ustrbuf.hxx:89
char sal_Char
A legacy synonym for char.
Definition: types.h:130
#define RTL_USTR_MAX_VALUEOFFLOAT
Definition: ustring.h:1022
SAL_DLLPUBLIC void rtl_uString_newFromLiteral(rtl_uString **newStr, const sal_Char *value, sal_Int32 len, sal_Int32 allocExtra) SAL_THROW_EXTERN_C()
OUStringBuffer & append(float f)
Appends the string representation of the float argument to this string buffer.
Definition: ustrbuf.hxx:693
OUStringBuffer & insert(sal_Int32 offset, const sal_Unicode *str, sal_Int32 len)
Inserts the string representation of the char array argument into this string buffer.
Definition: ustrbuf.hxx:814
SAL_DLLPUBLIC sal_Int32 rtl_uStringbuffer_newFromStringBuffer(rtl_uString **newStr, sal_Int32 capacity, rtl_uString *oldStr)
Allocates a new String that contains the same sequence of characters as the string argument...
#define RTL_USTR_MAX_VALUEOFDOUBLE
Definition: ustring.h:1041
Definition: stringutils.hxx:117
const sal_Unicode * getStr() const
Returns a pointer to the Unicode character buffer for this string.
Definition: ustring.hxx:528
A string buffer implements a mutable sequence of characters.
Definition: ustrbuf.hxx:56
SAL_DLLPUBLIC void rtl_uStringbuffer_insertUtf32(rtl_uString **pThis, sal_Int32 *capacity, sal_Int32 offset, sal_uInt32 c) SAL_THROW_EXTERN_C()
Inserts a single UTF-32 character into this string buffer.
Definition: bootstrap.hxx:29
sal_Int32 getLength() const
Returns the length of this string.
Definition: ustring.hxx:506
sal_Int32 lastIndexOf(sal_Unicode ch) const
Returns the index within this string of the last occurrence of the specified character, searching backward starting at the end.
Definition: ustrbuf.hxx:1159
SAL_DLLPUBLIC rtl_uString * rtl_uString_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C()
Allocate a new string containing space for a given number of characters.
SAL_DLLPUBLIC void rtl_uStringbuffer_ensureCapacity(rtl_uString **This, sal_Int32 *capacity, sal_Int32 minimumCapacity)
Ensures that the capacity of the buffer is at least equal to the specified minimum.
OUString makeStringAndClear()
Fill the string data in the new string and clear the buffer.
Definition: ustrbuf.hxx:223
sal_Int32 indexOf(const OUString &str, sal_Int32 fromIndex=0) const
Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
Definition: ustrbuf.hxx:1201