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 _RTL_STRBUF_HXX_
21 #define _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
50 #ifdef RTL_STRING_UNITTEST
52 // helper macro to make functions appear more readable
53 #define RTL_STRING_CONST_FUNCTION rtl_string_unittest_const_literal_function = true;
55 #define RTL_STRING_CONST_FUNCTION
58 /** A string buffer implements a mutable sequence of characters.
60 String buffers are safe for use by multiple threads. The methods
61 are synchronized where necessary so that all the operations on any
62 particular instance behave as if they occur in some serial order.
64 String buffers are used by the compiler to implement the binary
65 string concatenation operator <code>+</code>. For example, the code:
68 </pre></blockquote><p>
69 is compiled to the equivalent of:
71 x = new OStringBuffer().append("a").append(4).append("c")
73 </pre></blockquote><p>
74 The principal operations on a <code>OStringBuffer</code> are the
75 <code>append</code> and <code>insert</code> methods, which are
76 overloaded so as to accept data of any type. Each effectively
77 converts a given datum to a string and then appends or inserts the
78 characters of that string to the string buffer. The
79 <code>append</code> method always adds these characters at the end
80 of the buffer; the <code>insert</code> method adds the characters at
83 For example, if <code>z</code> refers to a string buffer object
84 whose current contents are "<code>start</code>", then
85 the method call <code>z.append("le")</code> would cause the string
86 buffer to contain "<code>startle</code>", whereas
87 <code>z.insert(4, "le")</code> would alter the string buffer to
88 contain "<code>starlet</code>".
90 Every string buffer has a capacity. As long as the length of the
91 character sequence contained in the string buffer does not exceed
92 the capacity, it is not necessary to allocate a new internal
93 buffer array. If the internal buffer overflows, it is
94 automatically made larger.
96 class SAL_WARN_UNUSED OStringBuffer
100 Constructs a string buffer with no characters in it and an
101 initial capacity of 16 characters.
107 rtl_string_new_WithLength( &pData
, nCapacity
);
111 Allocates a new string buffer that contains the same sequence of
112 characters as the string buffer argument.
114 @param value a <code>OStringBuffer</code>.
116 OStringBuffer( const OStringBuffer
& value
)
118 , nCapacity( value
.nCapacity
)
120 rtl_stringbuffer_newFromStringBuffer( &pData
, value
.nCapacity
, value
.pData
);
124 Constructs a string buffer with no characters in it and an
125 initial capacity specified by the <code>length</code> argument.
127 @param length the initial capacity.
129 explicit OStringBuffer(int length
)
131 , nCapacity( length
)
133 rtl_string_new_WithLength( &pData
, length
);
137 Constructs a string buffer so that it represents the same
138 sequence of characters as the string argument.
141 capacity of the string buffer is <code>16</code> plus the length
142 of the string argument.
144 @param value the initial string value.
146 OStringBuffer(const OString
& value
)
148 , nCapacity( value
.getLength() + 16 )
150 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
.getStr(), value
.getLength() );
155 @since LibreOffice 3.6
157 template< typename T
>
158 OStringBuffer( const T
& value
, typename
internal::CharPtrDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
161 sal_Int32 length
= rtl_str_getLength( value
);
162 nCapacity
= length
+ 16;
163 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
166 template< typename T
>
167 OStringBuffer( T
& value
, typename
internal::NonConstCharArrayDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
170 sal_Int32 length
= rtl_str_getLength( value
);
171 nCapacity
= length
+ 16;
172 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
176 Constructs a string buffer so that it represents the same
177 sequence of characters as the string literal.
179 If there are any embedded \0's in the string literal, the result is undefined.
180 Use the overload that explicitly accepts length.
182 @since LibreOffice 3.6
184 @param literal a string literal
186 template< typename T
>
187 OStringBuffer( T
& literal
, typename
internal::ConstCharArrayDetector
< T
, internal::Dummy
>::Type
= internal::Dummy())
189 , nCapacity( internal::ConstCharArrayDetector
< T
, void >::size
- 1 + 16 )
191 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
192 rtl_string_newFromLiteral( &pData
, literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1, 16 );
193 #ifdef RTL_STRING_UNITTEST
194 rtl_string_unittest_const_literal
= true;
199 Constructs a string buffer so that it represents the same
200 sequence of characters as the string argument.
203 capacity of the string buffer is <code>16</code> plus length
205 @param value a character array.
206 @param length the number of character which should be copied.
207 The character array length must be greater or
208 equal than this value.
210 OStringBuffer(const sal_Char
* value
, sal_Int32 length
)
212 , nCapacity( length
+ 16 )
214 rtl_stringbuffer_newFromStr_WithLength( &pData
, value
, length
);
217 #ifdef RTL_FAST_STRING
222 template< typename T1
, typename T2
>
223 OStringBuffer( const OStringConcat
< T1
, T2
>& c
)
225 const sal_Int32 l
= c
.length();
227 pData
= rtl_string_alloc( nCapacity
);
228 char* end
= c
.addData( pData
->buffer
);
230 pData
->length
= end
- pData
->buffer
;
234 /** Assign to this a copy of value.
236 OStringBuffer
& operator = ( const OStringBuffer
& value
)
240 rtl_stringbuffer_newFromStringBuffer(&pData
,
243 nCapacity
= value
.nCapacity
;
249 Release the string data.
253 rtl_string_release( pData
);
257 Fill the string data in the new string and clear the buffer.
259 This method is more efficient than the contructor of the string. It does
262 @return the string previously contained in the buffer.
264 OString
makeStringAndClear()
266 OString
aRet( pData
);
267 rtl_string_new(&pData
);
273 Returns the length (character count) of this string buffer.
275 @return the number of characters in this string buffer.
277 sal_Int32
getLength() const
279 return pData
->length
;
283 Checks if a string buffer is empty.
285 @return true if the string buffer is empty;
288 @since LibreOffice 4.1
290 bool isEmpty() const SAL_THROW(())
292 return pData
->length
== 0;
296 Returns the current capacity of the String buffer.
299 is the amount of storage available for newly inserted
300 characters. The real buffer size is 2 bytes longer, because
301 all strings are 0 terminated.
303 @return the current capacity of this string buffer.
305 sal_Int32
getCapacity() const
311 Ensures that the capacity of the buffer is at least equal to the
314 The new capacity will be at least as large as the maximum of the current
315 length (so that no contents of the buffer is destroyed) and the given
316 minimumCapacity. If the given minimumCapacity is negative, nothing is
319 @param minimumCapacity the minimum desired capacity.
321 void ensureCapacity(sal_Int32 minimumCapacity
)
323 rtl_stringbuffer_ensureCapacity( &pData
, &nCapacity
, minimumCapacity
);
327 Sets the length of this String buffer.
329 If the <code>newLength</code> argument is less than the current
330 length of the string buffer, the string buffer is truncated to
331 contain exactly the number of characters given by the
332 <code>newLength</code> argument.
334 If the <code>newLength</code> argument is greater than or equal
335 to the current length, sufficient null characters
336 (<code>'\u0000'</code>) are appended to the string buffer so that
337 length becomes the <code>newLength</code> argument.
339 The <code>newLength</code> argument must be greater than or equal
342 @param newLength the new length of the buffer.
344 void setLength(sal_Int32 newLength
)
346 assert(newLength
>= 0);
347 // Avoid modifications if pData points to const empty string:
348 if( newLength
!= pData
->length
)
350 if( newLength
> nCapacity
)
351 rtl_stringbuffer_ensureCapacity(&pData
, &nCapacity
, newLength
);
353 pData
->buffer
[newLength
] = '\0';
354 pData
->length
= newLength
;
359 Returns the character at a specific index in this string buffer.
361 The first character of a string buffer is at index
362 <code>0</code>, the next at index <code>1</code>, and so on, for
365 The index argument must be greater than or equal to
366 <code>0</code>, and less than the length of this string buffer.
368 @param index the index of the desired character.
369 @return the character at the specified index of this string buffer.
371 SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead")
372 sal_Char
charAt( sal_Int32 index
)
374 assert(index
>= 0 && index
< pData
->length
);
375 return pData
->buffer
[ index
];
379 The character at the specified index of this string buffer is set
382 The index argument must be greater than or equal to
383 <code>0</code>, and less than the length of this string buffer.
385 @param index the index of the character to modify.
386 @param ch the new character.
388 SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead")
389 OStringBuffer
& setCharAt(sal_Int32 index
, sal_Char ch
)
391 assert(index
>= 0 && index
< pData
->length
);
392 pData
->buffer
[ index
] = ch
;
397 Return a null terminated character array.
399 const sal_Char
* getStr() const { return pData
->buffer
; }
402 Access to individual characters.
404 @param index must be non-negative and less than length.
406 @return a reference to the character at the given index.
408 @since LibreOffice 3.5
410 sal_Char
& operator [](sal_Int32 index
)
412 assert(index
>= 0 && index
< pData
->length
);
413 return pData
->buffer
[index
];
417 Return a OString instance reflecting the current content
418 of this OStringBuffer.
420 const OString
toString() const
422 return OString(pData
->buffer
, pData
->length
);
426 Appends the string to this string buffer.
428 The characters of the <code>String</code> argument are appended, in
429 order, to the contents of this string buffer, increasing the
430 length of this string buffer by the length of the argument.
433 @return this string buffer.
435 OStringBuffer
& append(const OString
&str
)
437 return append( str
.getStr(), str
.getLength() );
441 Appends the string representation of the <code>char</code> array
442 argument to this string buffer.
444 The characters of the array argument are appended, in order, to
445 the contents of this string buffer. The length of this string
446 buffer increases by the length of the argument.
448 @param str the characters to be appended.
449 @return this string buffer.
451 template< typename T
>
452 typename
internal::CharPtrDetector
< T
, OStringBuffer
& >::Type
append( const T
& str
)
454 return append( str
, rtl_str_getLength( str
) );
457 template< typename T
>
458 typename
internal::NonConstCharArrayDetector
< T
, OStringBuffer
& >::Type
append( T
& str
)
460 return append( str
, rtl_str_getLength( str
) );
465 This function accepts an ASCII string literal as its argument.
466 @since LibreOffice 3.6
468 template< typename T
>
469 typename
internal::ConstCharArrayDetector
< T
, OStringBuffer
& >::Type
append( T
& literal
)
471 RTL_STRING_CONST_FUNCTION
472 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
473 rtl_stringbuffer_insert( &pData
, &nCapacity
, getLength(), literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1 );
478 Appends the string representation of the <code>char</code> array
479 argument to this string buffer.
481 Characters of the character array <code>str</code> are appended,
482 in order, to the contents of this string buffer. The length of this
483 string buffer increases by the value of <code>len</code>.
485 @param str the characters to be appended; must be non-null, and must
486 point to at least len characters
487 @param len the number of characters to append; must be non-negative
488 @return this string buffer.
490 OStringBuffer
& append( const sal_Char
* str
, sal_Int32 len
)
492 // insert behind the last character
493 rtl_stringbuffer_insert( &pData
, &nCapacity
, getLength(), str
, len
);
497 #ifdef RTL_FAST_STRING
502 template< typename T1
, typename T2
>
503 OStringBuffer
& append( const OStringConcat
< T1
, T2
>& c
)
505 const int l
= c
.length();
508 rtl_stringbuffer_ensureCapacity( &pData
, &nCapacity
, pData
->length
+ l
);
509 char* end
= c
.addData( pData
->buffer
+ pData
->length
);
511 pData
->length
= end
- pData
->buffer
;
517 Appends the string representation of the <code>sal_Bool</code>
518 argument to the string buffer.
520 The argument is converted to a string as if by the method
521 <code>String.valueOf</code>, and the characters of that
522 string are then appended to this string buffer.
524 @param b a <code>sal_Bool</code>.
525 @return this string buffer.
527 OStringBuffer
& append(sal_Bool b
)
529 sal_Char sz
[RTL_STR_MAX_VALUEOFBOOLEAN
];
530 return append( sz
, rtl_str_valueOfBoolean( sz
, b
) );
534 Appends the string representation of the <code>char</code>
535 argument to this string buffer.
537 The argument is appended to the contents of this string buffer.
538 The length of this string buffer increases by <code>1</code>.
540 @param c a <code>char</code>.
541 @return this string buffer.
543 OStringBuffer
& append(sal_Char c
)
545 return append( &c
, 1 );
549 Appends the string representation of the <code>sal_Int32</code>
550 argument to this string buffer.
552 The argument is converted to a string as if by the method
553 <code>String.valueOf</code>, and the characters of that
554 string are then appended to this string buffer.
556 @param i an <code>sal_Int32</code>.
557 @param radix the radix
558 @return this string buffer.
560 OStringBuffer
& append(sal_Int32 i
, sal_Int16 radix
= 10 )
562 sal_Char sz
[RTL_STR_MAX_VALUEOFINT32
];
563 return append( sz
, rtl_str_valueOfInt32( sz
, i
, radix
) );
567 Appends the string representation of the <code>long</code>
568 argument to this string buffer.
570 The argument is converted to a string as if by the method
571 <code>String.valueOf</code>, and the characters of that
572 string are then appended to this string buffer.
574 @param l a <code>long</code>.
575 @param radix the radix
576 @return this string buffer.
578 OStringBuffer
& append(sal_Int64 l
, sal_Int16 radix
= 10 )
580 sal_Char sz
[RTL_STR_MAX_VALUEOFINT64
];
581 return append( sz
, rtl_str_valueOfInt64( sz
, l
, radix
) );
585 Appends the string representation of the <code>float</code>
586 argument to this string buffer.
588 The argument is converted to a string as if by the method
589 <code>String.valueOf</code>, and the characters of that
590 string are then appended to this string buffer.
592 @param f a <code>float</code>.
593 @return this string buffer.
595 OStringBuffer
& append(float f
)
597 sal_Char sz
[RTL_STR_MAX_VALUEOFFLOAT
];
598 return append( sz
, rtl_str_valueOfFloat( sz
, f
) );
602 Appends the string representation of the <code>double</code>
603 argument to this string buffer.
605 The argument is converted to a string as if by the method
606 <code>String.valueOf</code>, and the characters of that
607 string are then appended to this string buffer.
609 @param d a <code>double</code>.
610 @return this string buffer.
612 OStringBuffer
& append(double d
)
614 sal_Char sz
[RTL_STR_MAX_VALUEOFDOUBLE
];
615 return append( sz
, rtl_str_valueOfDouble( sz
, d
) );
619 Inserts the string into this string buffer.
621 The characters of the <code>String</code> argument are inserted, in
622 order, into this string buffer at the indicated offset. The length
623 of this string buffer is increased by the length of the argument.
625 The offset argument must be greater than or equal to
626 <code>0</code>, and less than or equal to the length of this
629 @param offset the offset.
631 @return this string buffer.
633 OStringBuffer
& insert(sal_Int32 offset
, const OString
& str
)
635 return insert( offset
, str
.getStr(), str
.getLength() );
639 Inserts the string representation of the <code>char</code> array
640 argument into this string buffer.
642 The characters of the array argument are inserted into the
643 contents of this string buffer at the position indicated by
644 <code>offset</code>. The length of this string buffer increases by
645 the length of the argument.
647 The offset argument must be greater than or equal to
648 <code>0</code>, and less than or equal to the length of this
651 @param offset the offset.
652 @param str a character array.
653 @return this string buffer.
655 template< typename T
>
656 typename
internal::CharPtrDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, const T
& str
)
658 return insert( offset
, str
, rtl_str_getLength( str
) );
661 template< typename T
>
662 typename
internal::NonConstCharArrayDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, T
& str
)
664 return insert( offset
, str
, rtl_str_getLength( str
) );
669 This function accepts an ASCII string literal as its argument.
670 @since LibreOffice 3.6
672 template< typename T
>
673 typename
internal::ConstCharArrayDetector
< T
, OStringBuffer
& >::Type
insert( sal_Int32 offset
, T
& literal
)
675 RTL_STRING_CONST_FUNCTION
676 assert( strlen( literal
) == internal::ConstCharArrayDetector
< T
>::size
- 1 );
677 rtl_stringbuffer_insert( &pData
, &nCapacity
, offset
, literal
, internal::ConstCharArrayDetector
< T
, void >::size
- 1 );
682 Inserts the string representation of the <code>char</code> array
683 argument into this string buffer.
685 The characters of the array argument are inserted into the
686 contents of this string buffer at the position indicated by
687 <code>offset</code>. The length of this string buffer increases by
688 the length of the argument.
690 The offset argument must be greater than or equal to
691 <code>0</code>, and less than or equal to the length of this
694 @param offset the offset.
695 @param str a character array.
696 @param len the number of characters to append.
697 @return this string buffer.
699 OStringBuffer
& insert( sal_Int32 offset
, const sal_Char
* str
, sal_Int32 len
)
701 // insert behind the last character
702 rtl_stringbuffer_insert( &pData
, &nCapacity
, offset
, str
, len
);
707 Inserts the string representation of the <code>sal_Bool</code>
708 argument into this string buffer.
710 The second argument is converted to a string as if by the method
711 <code>String.valueOf</code>, and the characters of that
712 string are then inserted into this string buffer at the indicated
715 The offset argument must be greater than or equal to
716 <code>0</code>, and less than or equal to the length of this
719 @param offset the offset.
720 @param b a <code>sal_Bool</code>.
721 @return this string buffer.
723 OStringBuffer
& insert(sal_Int32 offset
, sal_Bool b
)
725 sal_Char sz
[RTL_STR_MAX_VALUEOFBOOLEAN
];
726 return insert( offset
, sz
, rtl_str_valueOfBoolean( sz
, b
) );
730 Inserts the string representation of the <code>char</code>
731 argument into this string buffer.
733 The second argument is inserted into the contents of this string
734 buffer at the position indicated by <code>offset</code>. The length
735 of this string buffer increases by one.
737 The offset argument must be greater than or equal to
738 <code>0</code>, and less than or equal to the length of this
741 @param offset the offset.
742 @param c a <code>char</code>.
743 @return this string buffer.
745 OStringBuffer
& insert(sal_Int32 offset
, sal_Char c
)
747 return insert( offset
, &c
, 1 );
751 Inserts the string representation of the second <code>sal_Int32</code>
752 argument into this string buffer.
754 The second argument is converted to a string as if by the method
755 <code>String.valueOf</code>, and the characters of that
756 string are then inserted into this string buffer at the indicated
759 The offset argument must be greater than or equal to
760 <code>0</code>, and less than or equal to the length of this
763 @param offset the offset.
764 @param i an <code>sal_Int32</code>.
765 @param radix the radix
766 @return this string buffer.
768 OStringBuffer
& insert(sal_Int32 offset
, sal_Int32 i
, sal_Int16 radix
= 10 )
770 sal_Char sz
[RTL_STR_MAX_VALUEOFINT32
];
771 return insert( offset
, sz
, rtl_str_valueOfInt32( sz
, i
, radix
) );
775 Inserts the string representation of the <code>long</code>
776 argument into this string buffer.
778 The second argument is converted to a string as if by the method
779 <code>String.valueOf</code>, and the characters of that
780 string are then inserted into this string buffer at the indicated
783 The offset argument must be greater than or equal to
784 <code>0</code>, and less than or equal to the length of this
787 @param offset the offset.
788 @param l a <code>long</code>.
789 @param radix the radix
790 @return this string buffer.
792 OStringBuffer
& insert(sal_Int32 offset
, sal_Int64 l
, sal_Int16 radix
= 10 )
794 sal_Char sz
[RTL_STR_MAX_VALUEOFINT64
];
795 return insert( offset
, sz
, rtl_str_valueOfInt64( sz
, l
, radix
) );
799 Inserts the string representation of the <code>float</code>
800 argument into this string buffer.
802 The second argument is converted to a string as if by the method
803 <code>String.valueOf</code>, and the characters of that
804 string are then inserted into this string buffer at the indicated
807 The offset argument must be greater than or equal to
808 <code>0</code>, and less than or equal to the length of this
811 @param offset the offset.
812 @param f a <code>float</code>.
813 @return this string buffer.
815 OStringBuffer
insert(sal_Int32 offset
, float f
)
817 sal_Char sz
[RTL_STR_MAX_VALUEOFFLOAT
];
818 return insert( offset
, sz
, rtl_str_valueOfFloat( sz
, f
) );
822 Inserts the string representation of the <code>double</code>
823 argument into this string buffer.
825 The second argument is converted to a string as if by the method
826 <code>String.valueOf</code>, and the characters of that
827 string are then inserted into this string buffer at the indicated
830 The offset argument must be greater than or equal to
831 <code>0</code>, and less than or equal to the length of this
834 @param offset the offset.
835 @param d a <code>double</code>.
836 @return this string buffer.
838 OStringBuffer
& insert(sal_Int32 offset
, double d
)
840 sal_Char sz
[RTL_STR_MAX_VALUEOFDOUBLE
];
841 return insert( offset
, sz
, rtl_str_valueOfDouble( sz
, d
) );
845 Removes the characters in a substring of this sequence.
847 The substring begins at the specified <code>start</code> and
848 is <code>len</code> characters long.
850 start must be >= 0 && <= getLength() && <= end
852 @param start The beginning index, inclusive
853 @param len The substring length
854 @return this string buffer.
856 OStringBuffer
& remove( sal_Int32 start
, sal_Int32 len
)
858 rtl_stringbuffer_remove( &pData
, start
, len
);
862 #ifdef LIBO_INTERNAL_ONLY
863 // This is to complement the RTL_FAST_STRING operator+, which allows any combination of valid operands,
864 // even two buffers. It's intentional it returns OString, just like the operator+ would in the fast variant.
865 #ifndef RTL_FAST_STRING
868 @since LibreOffice 4.1
870 friend OString
operator+( const OStringBuffer
& str1
, const OStringBuffer
& str2
) SAL_THROW(())
872 return OString( str1
.pData
).concat( str2
.pData
);
879 A pointer to the data structur which contains the data.
884 The len of the pData->buffer.
889 #ifdef RTL_FAST_STRING
894 struct ToStringHelper
< OStringBuffer
>
896 static int length( const OStringBuffer
& s
) { return s
.getLength(); }
897 static char* addData( char* buffer
, const OStringBuffer
& s
) { return addDataHelper( buffer
, s
.getStr(), s
.getLength()); }
898 static const bool allowOStringConcat
= true;
899 static const bool allowOUStringConcat
= false;
906 #ifdef RTL_STRING_UNITTEST
909 typedef rtlunittest::OStringBuffer OStringBuffer
;
911 #undef RTL_STRING_CONST_FUNCTION
915 using ::rtl::OStringBuffer
;
918 #endif /* __cplusplus */
919 #endif /* _RTL_STRBUF_HXX_ */
922 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */