1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_RTL_STRBUF_HXX
21 #define INCLUDED_RTL_STRBUF_HXX
23 #include <sal/config.h>
28 #include <rtl/strbuf.h>
29 #include <rtl/string.hxx>
30 #include <rtl/stringutils.hxx>
32 #ifdef RTL_FAST_STRING
33 #include <rtl/stringconcat.hxx>
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
51 #ifdef RTL_STRING_UNITTEST
53 // helper macro to make functions appear more readable
54 #define RTL_STRING_CONST_FUNCTION rtl_string_unittest_const_literal_function = true;
56 #define RTL_STRING_CONST_FUNCTION
60 /** A string buffer implements a mutable sequence of characters.
62 String buffers are safe for use by multiple threads. The methods
63 are synchronized where necessary so that all the operations on any
64 particular instance behave as if they occur in some serial order.
66 String buffers are used by the compiler to implement the binary
67 string concatenation operator <code>+</code>. For example, the code:
70 </pre></blockquote><p>
71 is compiled to the equivalent of:
73 x = new OStringBuffer().append("a").append(4).append("c")
75 </pre></blockquote><p>
76 The principal operations on a <code>OStringBuffer</code> are the
77 <code>append</code> and <code>insert</code> methods, which are
78 overloaded so as to accept data of any type. Each effectively
79 converts a given datum to a string and then appends or inserts the
80 characters of that string to the string buffer. The
81 <code>append</code> method always adds these characters at the end
82 of the buffer; the <code>insert</code> method adds the characters at
85 For example, if <code>z</code> refers to a string buffer object
86 whose current contents are "<code>start</code>", then
87 the method call <code>z.append("le")</code> would cause the string
88 buffer to contain "<code>startle</code>", whereas
89 <code>z.insert(4, "le")</code> would alter the string buffer to
90 contain "<code>starlet</code>".
92 Every string buffer has a capacity. As long as the length of the
93 character sequence contained in the string buffer does not exceed
94 the capacity, it is not necessary to allocate a new internal
95 buffer array. If the internal buffer overflows, it is
96 automatically made larger.
98 class SAL_WARN_UNUSED OStringBuffer
102 Constructs a string buffer with no characters in it and an
103 initial capacity of 16 characters.
109 rtl_string_new_WithLength( &pData
, nCapacity
);
113 Allocates a new string buffer that contains the same sequence of
114 characters as the string buffer argument.
116 @param value a <code>OStringBuffer</code>.
118 OStringBuffer( const OStringBuffer
& value
)
120 , nCapacity( value
.nCapacity
)
122 rtl_stringbuffer_newFromStringBuffer( &pData
, value
.nCapacity
, value
.pData
);
126 Constructs a string buffer with no characters in it and an
127 initial capacity specified by the <code>length</code> argument.
129 @param length the initial capacity.
131 explicit OStringBuffer(int length
)
133 , nCapacity( length
)
135 rtl_string_new_WithLength( &pData
, length
);
139 Constructs a string buffer so that it represents the same
140 sequence of characters as the string argument.
143 capacity of the string buffer is <code>16</code> plus the length
144 of the string argument.
146 @param value the initial string value.
148 OStringBuffer(const OString
& value
)
150 , nCapacity( value
.getLength() + 16 )
152 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
.getStr(), value
.getLength() );
157 @since LibreOffice 3.6
159 template< typename T
>
160 OStringBuffer( const T
& value
, typename
internal::CharPtrDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
163 sal_Int32 length
= rtl_str_getLength( value
);
164 nCapacity
= length
+ 16;
165 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
168 template< typename T
>
169 OStringBuffer( T
& value
, typename
internal::NonConstCharArrayDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
172 sal_Int32 length
= rtl_str_getLength( value
);
173 nCapacity
= length
+ 16;
174 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
178 Constructs a string buffer so that it represents the same
179 sequence of characters as the string literal.
181 If there are any embedded \0's in the string literal, the result is undefined.
182 Use the overload that explicitly accepts length.
184 @since LibreOffice 3.6
186 @param literal a string literal
188 template< typename T
>
189 OStringBuffer( T
& literal
, typename
internal::ConstCharArrayDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
191 , nCapacity( internal::ConstCharArrayDetector
< T
, void >::size
- 1 + 16 )
193 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
194 rtl_string_newFromLiteral( &pData
, literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1, 16 );
195 #ifdef RTL_STRING_UNITTEST
196 rtl_string_unittest_const_literal
= true;
201 Constructs a string buffer so that it represents the same
202 sequence of characters as the string argument.
205 capacity of the string buffer is <code>16</code> plus length
207 @param value a character array.
208 @param length the number of character which should be copied.
209 The character array length must be greater or
210 equal than this value.
212 OStringBuffer(const sal_Char
* value
, sal_Int32 length
)
214 , nCapacity( length
+ 16 )
216 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
219 #ifdef RTL_FAST_STRING
224 template< typename T1
, typename T2
>
225 OStringBuffer( const OStringConcat
< T1
, T2
>& c
)
227 const sal_Int32 l
= c
.length();
229 pData
= rtl_string_alloc( nCapacity
);
230 char* end
= c
.addData( pData
->buffer
);
232 pData
->length
= end
- pData
->buffer
;
236 /** Assign to this a copy of value.
238 OStringBuffer
& operator = ( const OStringBuffer
& value
)
242 rtl_stringbuffer_newFromStringBuffer(&pData
,
245 nCapacity
= value
.nCapacity
;
251 Release the string data.
255 rtl_string_release( pData
);
259 Fill the string data in the new string and clear the buffer.
261 This method is more efficient than the contructor of the string. It does
264 @return the string previously contained in the buffer.
266 OString
makeStringAndClear()
268 OString
aRet( pData
);
269 rtl_string_new(&pData
);
275 Returns the length (character count) of this string buffer.
277 @return the number of characters in this string buffer.
279 sal_Int32
getLength() const
281 return pData
->length
;
285 Checks if a string buffer is empty.
287 @return true if the string buffer is empty;
290 @since LibreOffice 4.1
292 bool isEmpty() const SAL_THROW(())
294 return pData
->length
== 0;
298 Returns the current capacity of the String buffer.
301 is the amount of storage available for newly inserted
302 characters. The real buffer size is 2 bytes longer, because
303 all strings are 0 terminated.
305 @return the current capacity of this string buffer.
307 sal_Int32
getCapacity() const
313 Ensures that the capacity of the buffer is at least equal to the
316 The new capacity will be at least as large as the maximum of the current
317 length (so that no contents of the buffer is destroyed) and the given
318 minimumCapacity. If the given minimumCapacity is negative, nothing is
321 @param minimumCapacity the minimum desired capacity.
323 void ensureCapacity(sal_Int32 minimumCapacity
)
325 rtl_stringbuffer_ensureCapacity( &pData
, &nCapacity
, minimumCapacity
);
329 Sets the length of this String buffer.
331 If the <code>newLength</code> argument is less than the current
332 length of the string buffer, the string buffer is truncated to
333 contain exactly the number of characters given by the
334 <code>newLength</code> argument.
336 If the <code>newLength</code> argument is greater than or equal
337 to the current length, sufficient null characters
338 (<code>'\u0000'</code>) are appended to the string buffer so that
339 length becomes the <code>newLength</code> argument.
341 The <code>newLength</code> argument must be greater than or equal
344 @param newLength the new length of the buffer.
346 void setLength(sal_Int32 newLength
)
348 assert(newLength
>= 0);
349 // Avoid modifications if pData points to const empty string:
350 if( newLength
!= pData
->length
)
352 if( newLength
> nCapacity
)
353 rtl_stringbuffer_ensureCapacity(&pData
, &nCapacity
, newLength
);
355 pData
->buffer
[newLength
] = '\0';
356 pData
->length
= newLength
;
361 Returns the character at a specific index in this string buffer.
363 The first character of a string buffer is at index
364 <code>0</code>, the next at index <code>1</code>, and so on, for
367 The index argument must be greater than or equal to
368 <code>0</code>, and less than the length of this string buffer.
370 @param index the index of the desired character.
371 @return the character at the specified index of this string buffer.
373 SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead")
374 sal_Char
charAt( sal_Int32 index
)
376 assert(index
>= 0 && index
< pData
->length
);
377 return pData
->buffer
[ index
];
381 The character at the specified index of this string buffer is set
384 The index argument must be greater than or equal to
385 <code>0</code>, and less than the length of this string buffer.
387 @param index the index of the character to modify.
388 @param ch the new character.
390 SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead")
391 OStringBuffer
& setCharAt(sal_Int32 index
, sal_Char ch
)
393 assert(index
>= 0 && index
< pData
->length
);
394 pData
->buffer
[ index
] = ch
;
399 Return a null terminated character array.
401 const sal_Char
* getStr() const { return pData
->buffer
; }
404 Access to individual characters.
406 @param index must be non-negative and less than length.
408 @return a reference to the character at the given index.
410 @since LibreOffice 3.5
412 sal_Char
& operator [](sal_Int32 index
)
414 assert(index
>= 0 && index
< pData
->length
);
415 return pData
->buffer
[index
];
419 Return a OString instance reflecting the current content
420 of this OStringBuffer.
422 const OString
toString() const
424 return OString(pData
->buffer
, pData
->length
);
428 Appends the string to this string buffer.
430 The characters of the <code>String</code> argument are appended, in
431 order, to the contents of this string buffer, increasing the
432 length of this string buffer by the length of the argument.
435 @return this string buffer.
437 OStringBuffer
& append(const OString
&str
)
439 return append( str
.getStr(), str
.getLength() );
443 Appends the string representation of the <code>char</code> array
444 argument to this string buffer.
446 The characters of the array argument are appended, in order, to
447 the contents of this string buffer. The length of this string
448 buffer increases by the length of the argument.
450 @param str the characters to be appended.
451 @return this string buffer.
453 template< typename T
>
454 typename
internal::CharPtrDetector
< T
, OStringBuffer
& >::Type
append( const T
& str
)
456 return append( str
, rtl_str_getLength( str
) );
459 template< typename T
>
460 typename
internal::NonConstCharArrayDetector
< T
, OStringBuffer
& >::Type
append( T
& str
)
462 return append( str
, rtl_str_getLength( str
) );
467 This function accepts an ASCII string literal as its argument.
468 @since LibreOffice 3.6
470 template< typename T
>
471 typename
internal::ConstCharArrayDetector
< T
, OStringBuffer
& >::Type
append( T
& literal
)
473 RTL_STRING_CONST_FUNCTION
474 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
475 rtl_stringbuffer_insert( &pData
, &nCapacity
, getLength(), literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1 );
480 Appends the string representation of the <code>char</code> array
481 argument to this string buffer.
483 Characters of the character array <code>str</code> are appended,
484 in order, to the contents of this string buffer. The length of this
485 string buffer increases by the value of <code>len</code>.
487 @param str the characters to be appended; must be non-null, and must
488 point to at least len characters
489 @param len the number of characters to append; must be non-negative
490 @return this string buffer.
492 OStringBuffer
& append( const sal_Char
* str
, sal_Int32 len
)
494 // insert behind the last character
495 rtl_stringbuffer_insert( &pData
, &nCapacity
, getLength(), str
, len
);
499 #ifdef RTL_FAST_STRING
504 template< typename T1
, typename T2
>
505 OStringBuffer
& append( const OStringConcat
< T1
, T2
>& c
)
507 const int l
= c
.length();
510 rtl_stringbuffer_ensureCapacity( &pData
, &nCapacity
, pData
->length
+ l
);
511 char* end
= c
.addData( pData
->buffer
+ pData
->length
);
513 pData
->length
= end
- pData
->buffer
;
519 Appends the string representation of the <code>sal_Bool</code>
520 argument to the string buffer.
522 The argument is converted to a string as if by the method
523 <code>String.valueOf</code>, and the characters of that
524 string are then appended to this string buffer.
526 @param b a <code>sal_Bool</code>.
527 @return this string buffer.
529 OStringBuffer
& append(sal_Bool b
)
531 sal_Char sz
[RTL_STR_MAX_VALUEOFBOOLEAN
];
532 return append( sz
, rtl_str_valueOfBoolean( sz
, b
) );
536 Appends the string representation of the <code>char</code>
537 argument to this string buffer.
539 The argument is appended to the contents of this string buffer.
540 The length of this string buffer increases by <code>1</code>.
542 @param c a <code>char</code>.
543 @return this string buffer.
545 OStringBuffer
& append(sal_Char c
)
547 return append( &c
, 1 );
551 Appends the string representation of the <code>sal_Int32</code>
552 argument to this string buffer.
554 The argument is converted to a string as if by the method
555 <code>String.valueOf</code>, and the characters of that
556 string are then appended to this string buffer.
558 @param i an <code>sal_Int32</code>.
559 @param radix the radix
560 @return this string buffer.
562 OStringBuffer
& append(sal_Int32 i
, sal_Int16 radix
= 10 )
564 sal_Char sz
[RTL_STR_MAX_VALUEOFINT32
];
565 return append( sz
, rtl_str_valueOfInt32( sz
, i
, radix
) );
569 Appends the string representation of the <code>long</code>
570 argument to this string buffer.
572 The argument is converted to a string as if by the method
573 <code>String.valueOf</code>, and the characters of that
574 string are then appended to this string buffer.
576 @param l a <code>long</code>.
577 @param radix the radix
578 @return this string buffer.
580 OStringBuffer
& append(sal_Int64 l
, sal_Int16 radix
= 10 )
582 sal_Char sz
[RTL_STR_MAX_VALUEOFINT64
];
583 return append( sz
, rtl_str_valueOfInt64( sz
, l
, radix
) );
587 Appends the string representation of the <code>float</code>
588 argument to this string buffer.
590 The argument is converted to a string as if by the method
591 <code>String.valueOf</code>, and the characters of that
592 string are then appended to this string buffer.
594 @param f a <code>float</code>.
595 @return this string buffer.
597 OStringBuffer
& append(float f
)
599 sal_Char sz
[RTL_STR_MAX_VALUEOFFLOAT
];
600 return append( sz
, rtl_str_valueOfFloat( sz
, f
) );
604 Appends the string representation of the <code>double</code>
605 argument to this string buffer.
607 The argument is converted to a string as if by the method
608 <code>String.valueOf</code>, and the characters of that
609 string are then appended to this string buffer.
611 @param d a <code>double</code>.
612 @return this string buffer.
614 OStringBuffer
& append(double d
)
616 sal_Char sz
[RTL_STR_MAX_VALUEOFDOUBLE
];
617 return append( sz
, rtl_str_valueOfDouble( sz
, d
) );
621 Inserts the string into this string buffer.
623 The characters of the <code>String</code> argument are inserted, in
624 order, into this string buffer at the indicated offset. The length
625 of this string buffer is increased by the length of the argument.
627 The offset argument must be greater than or equal to
628 <code>0</code>, and less than or equal to the length of this
631 @param offset the offset.
633 @return this string buffer.
635 OStringBuffer
& insert(sal_Int32 offset
, const OString
& str
)
637 return insert( offset
, str
.getStr(), str
.getLength() );
641 Inserts the string representation of the <code>char</code> array
642 argument into this string buffer.
644 The characters of the array argument are inserted into the
645 contents of this string buffer at the position indicated by
646 <code>offset</code>. The length of this string buffer increases by
647 the length of the argument.
649 The offset argument must be greater than or equal to
650 <code>0</code>, and less than or equal to the length of this
653 @param offset the offset.
654 @param str a character array.
655 @return this string buffer.
657 template< typename T
>
658 typename
internal::CharPtrDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, const T
& str
)
660 return insert( offset
, str
, rtl_str_getLength( str
) );
663 template< typename T
>
664 typename
internal::NonConstCharArrayDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, T
& str
)
666 return insert( offset
, str
, rtl_str_getLength( str
) );
671 This function accepts an ASCII string literal as its argument.
672 @since LibreOffice 3.6
674 template< typename T
>
675 typename
internal::ConstCharArrayDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, T
& literal
)
677 RTL_STRING_CONST_FUNCTION
678 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
679 rtl_stringbuffer_insert( &pData
, &nCapacity
, offset
, literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1 );
684 Inserts the string representation of the <code>char</code> array
685 argument into this string buffer.
687 The characters of the array argument are inserted into the
688 contents of this string buffer at the position indicated by
689 <code>offset</code>. The length of this string buffer increases by
690 the length of the argument.
692 The offset argument must be greater than or equal to
693 <code>0</code>, and less than or equal to the length of this
696 @param offset the offset.
697 @param str a character array.
698 @param len the number of characters to append.
699 @return this string buffer.
701 OStringBuffer
& insert( sal_Int32 offset
, const sal_Char
* str
, sal_Int32 len
)
703 // insert behind the last character
704 rtl_stringbuffer_insert( &pData
, &nCapacity
, offset
, str
, len
);
709 Inserts the string representation of the <code>sal_Bool</code>
710 argument into this string buffer.
712 The second argument is converted to a string as if by the method
713 <code>String.valueOf</code>, and the characters of that
714 string are then inserted into this string buffer at the indicated
717 The offset argument must be greater than or equal to
718 <code>0</code>, and less than or equal to the length of this
721 @param offset the offset.
722 @param b a <code>sal_Bool</code>.
723 @return this string buffer.
725 OStringBuffer
& insert(sal_Int32 offset
, sal_Bool b
)
727 sal_Char sz
[RTL_STR_MAX_VALUEOFBOOLEAN
];
728 return insert( offset
, sz
, rtl_str_valueOfBoolean( sz
, b
) );
732 Inserts the string representation of the <code>char</code>
733 argument into this string buffer.
735 The second argument is inserted into the contents of this string
736 buffer at the position indicated by <code>offset</code>. The length
737 of this string buffer increases by one.
739 The offset argument must be greater than or equal to
740 <code>0</code>, and less than or equal to the length of this
743 @param offset the offset.
744 @param c a <code>char</code>.
745 @return this string buffer.
747 OStringBuffer
& insert(sal_Int32 offset
, sal_Char c
)
749 return insert( offset
, &c
, 1 );
753 Inserts the string representation of the second <code>sal_Int32</code>
754 argument into this string buffer.
756 The second argument is converted to a string as if by the method
757 <code>String.valueOf</code>, and the characters of that
758 string are then inserted into this string buffer at the indicated
761 The offset argument must be greater than or equal to
762 <code>0</code>, and less than or equal to the length of this
765 @param offset the offset.
766 @param i an <code>sal_Int32</code>.
767 @param radix the radix
768 @return this string buffer.
770 OStringBuffer
& insert(sal_Int32 offset
, sal_Int32 i
, sal_Int16 radix
= 10 )
772 sal_Char sz
[RTL_STR_MAX_VALUEOFINT32
];
773 return insert( offset
, sz
, rtl_str_valueOfInt32( sz
, i
, radix
) );
777 Inserts the string representation of the <code>long</code>
778 argument into this string buffer.
780 The second argument is converted to a string as if by the method
781 <code>String.valueOf</code>, and the characters of that
782 string are then inserted into this string buffer at the indicated
785 The offset argument must be greater than or equal to
786 <code>0</code>, and less than or equal to the length of this
789 @param offset the offset.
790 @param l a <code>long</code>.
791 @param radix the radix
792 @return this string buffer.
794 OStringBuffer
& insert(sal_Int32 offset
, sal_Int64 l
, sal_Int16 radix
= 10 )
796 sal_Char sz
[RTL_STR_MAX_VALUEOFINT64
];
797 return insert( offset
, sz
, rtl_str_valueOfInt64( sz
, l
, radix
) );
801 Inserts the string representation of the <code>float</code>
802 argument into this string buffer.
804 The second argument is converted to a string as if by the method
805 <code>String.valueOf</code>, and the characters of that
806 string are then inserted into this string buffer at the indicated
809 The offset argument must be greater than or equal to
810 <code>0</code>, and less than or equal to the length of this
813 @param offset the offset.
814 @param f a <code>float</code>.
815 @return this string buffer.
817 OStringBuffer
insert(sal_Int32 offset
, float f
)
819 sal_Char sz
[RTL_STR_MAX_VALUEOFFLOAT
];
820 return insert( offset
, sz
, rtl_str_valueOfFloat( sz
, f
) );
824 Inserts the string representation of the <code>double</code>
825 argument into this string buffer.
827 The second argument is converted to a string as if by the method
828 <code>String.valueOf</code>, and the characters of that
829 string are then inserted into this string buffer at the indicated
832 The offset argument must be greater than or equal to
833 <code>0</code>, and less than or equal to the length of this
836 @param offset the offset.
837 @param d a <code>double</code>.
838 @return this string buffer.
840 OStringBuffer
& insert(sal_Int32 offset
, double d
)
842 sal_Char sz
[RTL_STR_MAX_VALUEOFDOUBLE
];
843 return insert( offset
, sz
, rtl_str_valueOfDouble( sz
, d
) );
847 Removes the characters in a substring of this sequence.
849 The substring begins at the specified <code>start</code> and
850 is <code>len</code> characters long.
852 start must be >= 0 && <= getLength() && <= end
854 @param start The beginning index, inclusive
855 @param len The substring length
856 @return this string buffer.
858 OStringBuffer
& remove( sal_Int32 start
, sal_Int32 len
)
860 rtl_stringbuffer_remove( &pData
, start
, len
);
864 #ifdef LIBO_INTERNAL_ONLY
865 // This is to complement the RTL_FAST_STRING operator+, which allows any combination of valid operands,
866 // even two buffers. It's intentional it returns OString, just like the operator+ would in the fast variant.
867 #ifndef RTL_FAST_STRING
870 @since LibreOffice 4.1
872 friend OString
operator+( const OStringBuffer
& str1
, const OStringBuffer
& str2
) SAL_THROW(())
874 return OString( str1
.pData
).concat( str2
.pData
);
881 A pointer to the data structur which contains the data.
886 The len of the pData->buffer.
891 #ifdef RTL_FAST_STRING
896 struct ToStringHelper
< OStringBuffer
>
898 static int length( const OStringBuffer
& s
) { return s
.getLength(); }
899 static char* addData( char* buffer
, const OStringBuffer
& s
) { return addDataHelper( buffer
, s
.getStr(), s
.getLength()); }
900 static const bool allowOStringConcat
= true;
901 static const bool allowOUStringConcat
= false;
908 #ifdef RTL_STRING_UNITTEST
911 typedef rtlunittest::OStringBuffer OStringBuffer
;
913 #undef RTL_STRING_CONST_FUNCTION
917 using ::rtl::OStringBuffer
;
920 #endif /* __cplusplus */
921 #endif // INCLUDED_RTL_STRBUF_HXX
924 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */