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_USTRING_H_
21 #define _RTL_USTRING_H_
23 #include "sal/config.h"
25 #include "osl/interlck.h"
26 #include "rtl/string.h"
27 #include "rtl/textenc.h"
28 #include "sal/saldllapi.h"
29 #include "sal/types.h"
35 /* ======================================================================= */
37 /** Return the length of a string.
39 The length is equal to the number of 16-bit Unicode characters in the
40 string, without the terminating NUL character.
43 a null-terminated string.
46 the length of the sequence of characters represented by this string,
47 excluding the terminating NUL character.
49 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_getLength(
50 const sal_Unicode
* str
) SAL_THROW_EXTERN_C();
52 /** Compare two strings.
54 The comparison is based on the numeric value of each character in the
55 strings and returns a value indicating their relationship. This function
56 cannot be used for language-specific sorting. Both strings must be
60 the first null-terminated string to be compared.
63 the second null-terminated string which is compared with the first one.
66 0 if both strings are equal, a value less than 0 if the first string is
67 less than the second string, and a value greater than 0 if the first
68 string is greater than the second string.
70 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_compare(
71 const sal_Unicode
* first
, const sal_Unicode
* second
) SAL_THROW_EXTERN_C();
73 /** Compare two strings.
75 The comparison is based on the numeric value of each character in the
76 strings and returns a value indicating their relationship. This function
77 cannot be used for language-specific sorting.
80 the first string to be compared. Need not be null-terminated, but must be
81 at least as long as the specified firstLen.
84 the length of the first string.
87 the second string which is compared with the first one. Need not be
88 null-terminated, but must be at least as long as the specified secondLen.
91 the length of the second string.
94 0 if both strings are equal, a value less than 0 if the first string is
95 less than the second string, and a value greater than 0 if the first
96 string is greater than the second string.
98 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_compare_WithLength(
99 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Unicode
* second
, sal_Int32 secondLen
) SAL_THROW_EXTERN_C();
101 /** Compare two strings with a maximum count of characters.
103 The comparison is based on the numeric value of each character in the
104 strings and returns a value indicating their relationship. This function
105 cannot be used for language-specific sorting.
108 the first string to be compared. Need not be null-terminated, but must be
109 at least as long as the specified firstLen.
112 the length of the first string.
115 the second string which is compared with the first one. Need not be
116 null-terminated, but must be at least as long as the specified secondLen.
119 the length of the second string.
122 the maximum number of characters to compare. This length can be greater
123 or smaller than the lengths of the two strings.
126 0 if both substrings are equal, a value less than 0 if the first substring
127 is less than the second substring, and a value greater than 0 if the first
128 substring is greater than the second substring.
130 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_shortenedCompare_WithLength(
131 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Unicode
* second
, sal_Int32 secondLen
, sal_Int32 shortenedLen
) SAL_THROW_EXTERN_C();
133 /** Compare two strings from back to front.
135 The comparison is based on the numeric value of each character in the
136 strings and returns a value indicating their relationship. This function
137 cannot be used for language-specific sorting.
140 the first string to be compared. Need not be null-terminated, but must be
141 at least as long as the specified firstLen.
144 the length of the first string.
147 the second string which is compared with the first one. Need not be
148 null-terminated, but must be at least as long as the specified secondLen.
151 the length of the second string.
154 0 if both strings are equal, a value less than 0 if the first string
155 compares less than the second string, and a value greater than 0 if the
156 first string compares greater than the second string.
158 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_reverseCompare_WithLength(
159 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Unicode
* second
, sal_Int32 secondLen
) SAL_THROW_EXTERN_C();
161 /** Compare two strings from back to front for equality.
163 The comparison is based on the numeric value of each character in the
164 strings and returns 'true' if, ans only if, both strings are equal.
165 This function cannot be used for language-specific sorting.
168 the first string to be compared. Need not be null-terminated, but must be
169 at least as long as the specified len.
172 the second string which is compared with the first one. Need not be
173 null-terminated, but must be at least as long as the specified len.
176 the length of both strings.
179 true if both strings are equal, false if they are not equal.
182 SAL_DLLPUBLIC sal_Bool SAL_CALL
rtl_ustr_asciil_reverseEquals_WithLength(
183 const sal_Unicode
* first
, const sal_Char
* second
, sal_Int32 len
) SAL_THROW_EXTERN_C();
185 /** Compare two strings, ignoring the case of ASCII characters.
187 The comparison is based on the numeric value of each character in the
188 strings and returns a value indicating their relationship. Character
189 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
190 and 122 (ASCII a--z). This function cannot be used for language-specific
191 sorting. Both strings must be null-terminated.
194 the first null-terminated string to be compared.
197 the second null-terminated string which is compared with the first one.
200 0 if both strings are equal, a value less than 0 if the first string is
201 less than the second string, and a value greater than 0 if the first
202 string is greater than the second string.
204 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_compareIgnoreAsciiCase(
205 const sal_Unicode
* first
, const sal_Unicode
* second
) SAL_THROW_EXTERN_C();
207 /** Compare two strings, ignoring the case of ASCII characters.
209 The comparison is based on the numeric value of each character in the
210 strings and returns a value indicating their relationship. Character
211 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
212 and 122 (ASCII a--z). This function cannot be used for language-specific
216 the first string to be compared. Need not be null-terminated, but must be
217 at least as long as the specified firstLen.
220 the length of the first string.
223 the second string which is compared with the first one. Need not be
224 null-terminated, but must be at least as long as the specified secondLen.
227 the length of the second string.
230 0 if both strings are equal, a value less than 0 if the first string is
231 less than the second string, and a value greater than 0 if the first
232 string is greater than the second string.
234 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_compareIgnoreAsciiCase_WithLength(
235 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Unicode
* second
, sal_Int32 secondLen
) SAL_THROW_EXTERN_C();
237 /** Compare two strings with a maximum count of characters, ignoring the case
240 The comparison is based on the numeric value of each character in the
241 strings and returns a value indicating their relationship. Character
242 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
243 and 122 (ASCII a--z). This function cannot be used for language-specific
247 the first string to be compared. Need not be null-terminated, but must be
248 at least as long as the specified firstLen.
251 the length of the first string.
254 the second string which is compared with the first one. Need not be
255 null-terminated, but must be at least as long as the specified secondLen.
258 the length of the second string.
261 the maximum number of characters to compare. This length can be greater
262 or smaller than the lengths of the two strings.
265 0 if both substrings are equal, a value less than 0 if the first substring
266 is less than the second substring, and a value greater than 0 if the first
267 substring is greater than the second substring.
269 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength(
270 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Unicode
* second
, sal_Int32 secondLen
, sal_Int32 shortenedLen
) SAL_THROW_EXTERN_C();
272 /** Compare two strings.
274 The comparison is based on the numeric value of each character in the
275 strings and returns a value indicating their relationship. This function
276 cannot be used for language-specific sorting. Both strings must be
279 Since this function is optimized for performance, the ASCII character
280 values are not converted in any way. The caller has to make sure that
281 all ASCII characters are in the allowed range of 0 and 127, inclusive.
284 the first null-terminated string to be compared.
287 the second null-terminated ASCII string which is compared with the first
291 0 if both substrings are equal, a value less than 0 if the first substring
292 is less than the second substring, and a value greater than 0 if the first
293 substring is greater than the second substring.
295 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_compare(
296 const sal_Unicode
* first
, const sal_Char
* second
) SAL_THROW_EXTERN_C();
298 /** Compare two strings.
300 The comparison is based on the numeric value of each character in the
301 strings and returns a value indicating their relationship. This function
302 cannot be used for language-specific sorting.
304 Since this function is optimized for performance, the ASCII character
305 values are not converted in any way. The caller has to make sure that
306 all ASCII characters are in the allowed range of 0 and 127, inclusive.
309 the first string to be compared. Need not be null-terminated, but must be
310 at least as long as the specified firstLen.
313 the length of the first string.
316 the second null-terminated ASCII string which is compared with the first
320 0 if both substrings are equal, a value less than 0 if the first substring
321 is less than the second substring, and a value greater than 0 if the first
322 substring is greater than the second substring.
324 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_compare_WithLength(
325 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Char
* second
) SAL_THROW_EXTERN_C();
327 /** Compare two strings with a maximum count of characters.
329 The comparison is based on the numeric value of each character in the
330 strings and returns a value indicating their relationship. This function
331 cannot be used for language-specific sorting.
333 Since this function is optimized for performance, the ASCII character
334 values are not converted in any way. The caller has to make sure that
335 all ASCII characters are in the allowed range of 0 and 127, inclusive.
338 the first string to be compared. Need not be null-terminated, but must be
339 at least as long as the specified firstLen.
342 the length of the first string.
345 the second null-terminated ASCII string which is compared with the first
349 the maximum number of characters to compare. This length can be greater
350 or smaller than the lengths of the two strings.
353 0 if both substrings are equal, a value less than 0 if the first substring
354 is less than the second substring, and a value greater than 0 if the first
355 substring is greater than the second substring.
357 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_shortenedCompare_WithLength(
358 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Char
* second
, sal_Int32 shortenedLen
) SAL_THROW_EXTERN_C();
360 /** Compare two strings from back to front.
362 The comparison is based on the numeric value of each character in the
363 strings and returns a value indicating their relationship. This function
364 cannot be used for language-specific sorting.
366 Since this function is optimized for performance, the ASCII character
367 values are not converted in any way. The caller has to make sure that
368 all ASCII characters are in the allowed range of 0 and 127, inclusive.
371 the first string to be compared. Need not be null-terminated, but must be
372 at least as long as the specified firstLen.
375 the length of the first string.
378 the second ASCII string which is compared with the first one. Need not be
379 null-terminated, but must be at least as long as the specified secondLen.
382 the length of the second string.
385 0 if both strings are equal, a value less than 0 if the first string
386 compares less than the second string, and a value greater than 0 if the
387 first string compares greater than the second string.
389 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_asciil_reverseCompare_WithLength(
390 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Char
* second
, sal_Int32 secondLen
) SAL_THROW_EXTERN_C();
392 /** Compare two strings, ignoring the case of ASCII characters.
394 The comparison is based on the numeric value of each character in the
395 strings and returns a value indicating their relationship. Character
396 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
397 and 122 (ASCII a--z). This function cannot be used for language-specific
398 sorting. Both strings must be null-terminated.
400 Since this function is optimized for performance, the ASCII character
401 values are not converted in any way. The caller has to make sure that
402 all ASCII characters are in the allowed range of 0 and 127, inclusive.
405 the first null-terminated string to be compared.
408 the second null-terminated ASCII string which is compared with the first
412 0 if both strings are equal, a value less than 0 if the first string is
413 less than the second string, and a value greater than 0 if the first
414 string is greater than the second string.
416 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_compareIgnoreAsciiCase(
417 const sal_Unicode
* first
, const sal_Char
* second
) SAL_THROW_EXTERN_C();
419 /** Compare two strings, ignoring the case of ASCII characters.
421 The comparison is based on the numeric value of each character in the
422 strings and returns a value indicating their relationship. Character
423 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
424 and 122 (ASCII a--z). This function cannot be used for language-specific
427 Since this function is optimized for performance, the ASCII character
428 values are not converted in any way. The caller has to make sure that
429 all ASCII characters are in the allowed range of 0 and 127, inclusive.
432 the first string to be compared. Need not be null-terminated, but must be
433 at least as long as the specified firstLen.
436 the length of the first string.
439 the second null-terminated ASCII string which is compared with the first
443 0 if both strings are equal, a value less than 0 if the first string is
444 less than the second string, and a value greater than 0 if the first
445 string is greater than the second string.
447 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength(
448 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Char
* second
) SAL_THROW_EXTERN_C();
450 /** Compare two strings, ignoring the case of ASCII characters.
452 The comparison is based on the numeric value of each character in the
453 strings and returns a value indicating their relationship. Character
454 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
455 and 122 (ASCII a--z). This function cannot be used for language-specific
458 Since this function is optimized for performance, the ASCII character
459 values are not converted in any way. The caller has to make sure that
460 all ASCII characters are in the allowed range of 0 and 127, inclusive.
463 the first string to be compared. Need not be null-terminated, but must be
464 at least as long as the specified firstLen.
467 the length of the first string.
470 the second string which is compared with the first one. Need not be
471 null-terminated, but must be at least as long as the specified secondLen.
474 the length of the second string.
477 0 if both strings are equal, a value less than 0 if the first string is
478 less than the second string, and a value greater than 0 if the first
479 string is greater than the second string.
481 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths(
482 sal_Unicode
const * first
, sal_Int32 firstLen
,
483 char const * second
, sal_Int32 secondLen
) SAL_THROW_EXTERN_C();
485 /** Compare two strings with a maximum count of characters, ignoring the case
488 The comparison is based on the numeric value of each character in the
489 strings and returns a value indicating their relationship. Character
490 values between 65 and 90 (ASCII A--Z) are interpreted as values between 97
491 and 122 (ASCII a--z). This function cannot be used for language-specific
494 Since this function is optimized for performance, the ASCII character
495 values are not converted in any way. The caller has to make sure that
496 all ASCII characters are in the allowed range of 0 and 127, inclusive.
499 the first string to be compared. Need not be null-terminated, but must be
500 at least as long as the specified firstLen.
503 the length of the first string.
506 the second null-terminated ASCII string which is compared with the first
510 the maximum number of characters to compare. This length can be greater
511 or smaller than the lengths of the two strings.
514 0 if both substrings are equal, a value less than 0 if the first substring
515 is less than the second substring, and a value greater than 0 if the first
516 substring is greater than the second substring.
518 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength(
519 const sal_Unicode
* first
, sal_Int32 firstLen
, const sal_Char
* second
, sal_Int32 shortenedLen
) SAL_THROW_EXTERN_C();
521 /** Return a hash code for a string.
523 It is not allowed to store the hash code persistently, because later
524 versions could return other hash codes. The string must be
528 a null-terminated string.
531 a hash code for the given string.
533 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_hashCode(
534 const sal_Unicode
* str
) SAL_THROW_EXTERN_C();
536 /** Return a hash code for a string.
538 It is not allowed to store the hash code persistently, because later
539 versions could return other hash codes.
542 a string. Need not be null-terminated, but must be at least as long as
546 the length of the string.
549 a hash code for the given string.
551 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_hashCode_WithLength(
552 const sal_Unicode
* str
, sal_Int32 len
) SAL_THROW_EXTERN_C();
554 /** Search for the first occurrence of a character within a string.
556 The string must be null-terminated.
559 a null-terminated string.
562 the character to be searched for.
565 the index (starting at 0) of the first occurrence of the character in the
566 string, or -1 if the character does not occur.
568 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_indexOfChar(
569 const sal_Unicode
* str
, sal_Unicode ch
) SAL_THROW_EXTERN_C();
571 /** Search for the first occurrence of a character within a string.
574 a string. Need not be null-terminated, but must be at least as long as
578 the length of the string.
581 the character to be searched for.
584 the index (starting at 0) of the first occurrence of the character in the
585 string, or -1 if the character does not occur.
587 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_indexOfChar_WithLength(
588 const sal_Unicode
* str
, sal_Int32 len
, sal_Unicode ch
) SAL_THROW_EXTERN_C();
590 /** Search for the last occurrence of a character within a string.
592 The string must be null-terminated.
595 a null-terminated string.
598 the character to be searched for.
601 the index (starting at 0) of the last occurrence of the character in the
602 string, or -1 if the character does not occur. The returned value is
603 always smaller than the string length.
605 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_lastIndexOfChar(
606 const sal_Unicode
* str
, sal_Unicode ch
) SAL_THROW_EXTERN_C();
608 /** Search for the last occurrence of a character within a string.
611 a string. Need not be null-terminated, but must be at least as long as
615 the length of the string.
618 the character to be searched for.
621 the index (starting at 0) of the last occurrence of the character in the
622 string, or -1 if the character does not occur. The returned value is
623 always smaller than the string length.
625 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_lastIndexOfChar_WithLength(
626 const sal_Unicode
* str
, sal_Int32 len
, sal_Unicode ch
) SAL_THROW_EXTERN_C();
628 /** Search for the first occurrence of a substring within a string.
630 If subStr is empty, or both str and subStr are empty, -1 is returned.
631 Both strings must be null-terminated.
634 a null-terminated string.
637 the null-terminated substring to be searched for.
640 the index (starting at 0) of the first character of the first occurrence
641 of the substring within the string, or -1 if the substring does not occur.
643 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_indexOfStr(
644 const sal_Unicode
* str
, const sal_Unicode
* subStr
) SAL_THROW_EXTERN_C();
646 /** Search for the first occurrence of a substring within a string.
648 If subStr is empty, or both str and subStr are empty, -1 is returned.
651 a string. Need not be null-terminated, but must be at least as long as
655 the length of the string.
658 the substring to be searched for. Need not be null-terminated, but must
659 be at least as long as the specified subLen.
662 the length of the substring.
665 the index (starting at 0) of the first character of the first occurrence
666 of the substring within the string, or -1 if the substring does not occur.
668 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_indexOfStr_WithLength(
669 const sal_Unicode
* str
, sal_Int32 len
, const sal_Unicode
* subStr
, sal_Int32 subLen
) SAL_THROW_EXTERN_C();
671 /** Search for the first occurrence of an ASCII substring within a string.
674 a string. Need not be null-terminated, but must be at least as long as
678 the length of the string; must be non-negative.
681 the substring to be searched for. Need not be null-terminated, but must
682 be at least as long as the specified subLen. Must only contain characters
683 in the ASCII range 0x00--7F.
686 the length of the substring; must be non-negative.
689 the index (starting at 0) of the first character of the first occurrence
690 of the substring within the string, or -1 if the substring does not occur.
691 If subLen is zero, -1 is returned.
695 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_indexOfAscii_WithLength(
696 sal_Unicode
const * str
, sal_Int32 len
,
697 char const * subStr
, sal_Int32 subLen
) SAL_THROW_EXTERN_C();
699 /** Search for the last occurrence of a substring within a string.
701 If subStr is empty, or both str and subStr are empty, -1 is returned.
702 Both strings must be null-terminated.
705 a null-terminated string.
708 the null-terminated substring to be searched for.
711 the index (starting at 0) of the first character of the last occurrence
712 of the substring within the string, or -1 if the substring does not occur.
714 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_lastIndexOfStr(
715 const sal_Unicode
* str
, const sal_Unicode
* subStr
) SAL_THROW_EXTERN_C();
717 /** Search for the last occurrence of a substring within a string.
719 If subStr is empty, or both str and subStr are empty, -1 is returned.
722 a string. Need not be null-terminated, but must be at least as long as
726 the length of the string.
729 the substring to be searched for. Need not be null-terminated, but must
730 be at least as long as the specified subLen.
733 the length of the substring.
736 the index (starting at 0) of the first character of the first occurrence
737 of the substring within the string, or -1 if the substring does not occur.
739 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_lastIndexOfStr_WithLength(
740 const sal_Unicode
* str
, sal_Int32 len
, const sal_Unicode
* subStr
, sal_Int32 subLen
) SAL_THROW_EXTERN_C();
742 /** Search for the last occurrence of an ASCII substring within a string.
745 a string. Need not be null-terminated, but must be at least as long as
749 the length of the string; must be non-negative.
752 the substring to be searched for. Need not be null-terminated, but must
753 be at least as long as the specified subLen. Must only contain characters
754 in the ASCII range 0x00--7F.
757 the length of the substring; must be non-negative.
760 the index (starting at 0) of the first character of the last occurrence
761 of the substring within the string, or -1 if the substring does not occur.
762 If subLen is zero, -1 is returned.
766 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_lastIndexOfAscii_WithLength(
767 sal_Unicode
const * str
, sal_Int32 len
,
768 char const * subStr
, sal_Int32 subLen
) SAL_THROW_EXTERN_C();
770 /** Replace all occurrences of a single character within a string.
772 If oldChar does not occur within str, then the string is not modified.
773 The string must be null-terminated.
776 a null-terminated string.
784 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_replaceChar(
785 sal_Unicode
* str
, sal_Unicode oldChar
, sal_Unicode newChar
) SAL_THROW_EXTERN_C();
787 /** Replace all occurrences of a single character within a string.
789 If oldChar does not occur within str, then the string is not modified.
792 a string. Need not be null-terminated, but must be at least as long as
796 the length of the string.
804 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_replaceChar_WithLength(
805 sal_Unicode
* str
, sal_Int32 len
, sal_Unicode oldChar
, sal_Unicode newChar
) SAL_THROW_EXTERN_C();
807 /** Convert all ASCII uppercase letters to lowercase within a string.
809 The characters with values between 65 and 90 (ASCII A--Z) are replaced
810 with values between 97 and 122 (ASCII a--z). The string must be
814 a null-terminated string.
816 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_toAsciiLowerCase(
817 sal_Unicode
* str
) SAL_THROW_EXTERN_C();
819 /** Convert all ASCII uppercase letters to lowercase within a string.
821 The characters with values between 65 and 90 (ASCII A--Z) are replaced
822 with values between 97 and 122 (ASCII a--z).
825 a string. Need not be null-terminated, but must be at least as long as
829 the length of the string.
831 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_toAsciiLowerCase_WithLength(
832 sal_Unicode
* str
, sal_Int32 len
) SAL_THROW_EXTERN_C();
834 /** Convert all ASCII lowercase letters to uppercase within a string.
836 The characters with values between 97 and 122 (ASCII a--z) are replaced
837 with values between 65 and 90 (ASCII A--Z). The string must be
841 a null-terminated string.
843 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_toAsciiUpperCase(
844 sal_Unicode
* str
) SAL_THROW_EXTERN_C();
846 /** Convert all ASCII lowercase letters to uppercase within a string.
848 The characters with values between 97 and 122 (ASCII a--z) are replaced
849 with values between 65 and 90 (ASCII A--Z).
852 a string. Need not be null-terminated, but must be at least as long as
856 the length of the string.
858 SAL_DLLPUBLIC
void SAL_CALL
rtl_ustr_toAsciiUpperCase_WithLength(
859 sal_Unicode
* str
, sal_Int32 len
) SAL_THROW_EXTERN_C();
861 /** Remove white space from both ends of a string.
863 All characters with values less than or equal to 32 (the space character)
864 are considered to be white space. This function cannot be used for
865 language-specific operations. The string must be null-terminated.
868 a null-terminated string.
871 the new length of the string.
873 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_trim(
874 sal_Unicode
* str
) SAL_THROW_EXTERN_C();
876 /** Remove white space from both ends of the string.
878 All characters with values less than or equal to 32 (the space character)
879 are considered to be white space. This function cannot be used for
880 language-specific operations. The string must be null-terminated.
883 a string. Need not be null-terminated, but must be at least as long as
887 the original length of the string.
890 the new length of the string.
892 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_trim_WithLength(
893 sal_Unicode
* str
, sal_Int32 len
) SAL_THROW_EXTERN_C();
895 /** Create the string representation of a boolean.
897 If b is true, the buffer is filled with the string "true" and 5 is
898 returned. If b is false, the buffer is filled with the string "false" and
899 6 is returned. This function cannot be used for language-specific
903 a buffer that is big enough to hold the result and the terminating NUL
904 character. You should use the RTL_USTR_MAX_VALUEOFBOOLEAN define to
905 create a buffer that is big enough.
911 the length of the string.
913 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfBoolean(
914 sal_Unicode
* str
, sal_Bool b
) SAL_THROW_EXTERN_C();
915 #define RTL_USTR_MAX_VALUEOFBOOLEAN RTL_STR_MAX_VALUEOFBOOLEAN
917 /** Create the string representation of a character.
920 a buffer that is big enough to hold the result and the terminating NUL
921 character. You should use the RTL_USTR_MAX_VALUEOFCHAR define to create a
922 buffer that is big enough.
928 the length of the string.
930 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfChar(
931 sal_Unicode
* str
, sal_Unicode ch
) SAL_THROW_EXTERN_C();
932 #define RTL_USTR_MAX_VALUEOFCHAR RTL_STR_MAX_VALUEOFCHAR
934 /** Create the string representation of an integer.
936 This function cannot be used for language-specific operations.
939 a buffer that is big enough to hold the result and the terminating NUL
940 character. You should use the RTL_USTR_MAX_VALUEOFINT32 define to create
941 a buffer that is big enough.
947 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
951 the length of the string.
953 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfInt32(
954 sal_Unicode
* str
, sal_Int32 i
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
955 #define RTL_USTR_MIN_RADIX RTL_STR_MIN_RADIX
956 #define RTL_USTR_MAX_RADIX RTL_STR_MAX_RADIX
957 #define RTL_USTR_MAX_VALUEOFINT32 RTL_STR_MAX_VALUEOFINT32
959 /** Create the string representation of a long integer.
961 This function cannot be used for language-specific operations.
964 a buffer that is big enough to hold the result and the terminating NUL
965 character. You should use the RTL_USTR_MAX_VALUEOFINT64 define to create
966 a buffer that is big enough.
969 a long integer value.
972 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
976 the length of the string.
978 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfInt64(
979 sal_Unicode
* str
, sal_Int64 l
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
980 #define RTL_USTR_MAX_VALUEOFINT64 RTL_STR_MAX_VALUEOFINT64
982 /** Create the string representation of an unsigned long integer.
984 This function cannot be used for language-specific operations.
987 a buffer that is big enough to hold the result and the terminating NUL
988 character. You should use the RTL_USTR_MAX_VALUEOFUINT64 define to create
989 a buffer that is big enough.
992 a long integer value.
995 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
999 the length of the string.
1001 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfUInt64(
1002 sal_Unicode
* str
, sal_uInt64 l
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
1003 #define RTL_USTR_MAX_VALUEOFINT64 RTL_STR_MAX_VALUEOFINT64
1005 /** Create the string representation of a float.
1007 This function cannot be used for language-specific conversion.
1010 a buffer that is big enough to hold the result and the terminating NUL
1011 character. You should use the RTL_USTR_MAX_VALUEOFFLOAT define to create
1012 a buffer that is big enough.
1018 the length of the string.
1020 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfFloat(
1021 sal_Unicode
* str
, float f
) SAL_THROW_EXTERN_C();
1022 #define RTL_USTR_MAX_VALUEOFFLOAT RTL_STR_MAX_VALUEOFFLOAT
1024 /** Create the string representation of a double.
1026 This function cannot be used for language-specific conversion.
1029 a buffer that is big enough to hold the result and the terminating NUL
1030 character. You should use the RTL_USTR_MAX_VALUEOFDOUBLE define to create
1031 a buffer that is big enough.
1037 the length of the string.
1039 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_valueOfDouble(
1040 sal_Unicode
* str
, double d
) SAL_THROW_EXTERN_C();
1041 #define RTL_USTR_MAX_VALUEOFDOUBLE RTL_STR_MAX_VALUEOFDOUBLE
1043 /** Interpret a string as a boolean.
1045 This function cannot be used for language-specific conversion. The string
1046 must be null-terminated.
1049 a null-terminated string.
1052 true if the string is "1" or "true" in any ASCII case, false otherwise.
1054 SAL_DLLPUBLIC sal_Bool SAL_CALL
rtl_ustr_toBoolean(
1055 const sal_Unicode
* str
) SAL_THROW_EXTERN_C();
1057 /** Interpret a string as an integer.
1059 This function cannot be used for language-specific conversion. The string
1060 must be null-terminated.
1063 a null-terminated string.
1066 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1070 the integer value represented by the string, or 0 if the string does not
1071 represent an integer.
1073 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_ustr_toInt32(
1074 const sal_Unicode
* str
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
1076 /** Interpret a string as a long integer.
1078 This function cannot be used for language-specific conversion. The string
1079 must be null-terminated.
1082 a null-terminated string.
1085 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1089 the long integer value represented by the string, or 0 if the string does
1090 not represent a long integer.
1092 SAL_DLLPUBLIC sal_Int64 SAL_CALL
rtl_ustr_toInt64(
1093 const sal_Unicode
* str
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
1095 /** Interpret a string as an unsigned long integer.
1097 This function cannot be used for language-specific conversion. The string
1098 must be null-terminated.
1101 a null-terminated string.
1104 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1108 the unsigned long integer value represented by the string, or 0 if the
1109 string does not represent an unsigned long integer.
1111 @since LibreOffice 4.1
1113 SAL_DLLPUBLIC sal_uInt64 SAL_CALL
rtl_ustr_toUInt64(
1114 const sal_Unicode
* str
, sal_Int16 radix
) SAL_THROW_EXTERN_C();
1116 /** Interpret a string as a float.
1118 This function cannot be used for language-specific conversion. The string
1119 must be null-terminated.
1122 a null-terminated string.
1125 the float value represented by the string, or 0.0 if the string does not
1128 SAL_DLLPUBLIC
float SAL_CALL
rtl_ustr_toFloat(
1129 const sal_Unicode
* str
) SAL_THROW_EXTERN_C();
1131 /** Interpret a string as a double.
1133 This function cannot be used for language-specific conversion. The string
1134 must be null-terminated.
1137 a null-terminated string.
1140 the float value represented by the string, or 0.0 if the string does not
1143 SAL_DLLPUBLIC
double SAL_CALL
rtl_ustr_toDouble(
1144 const sal_Unicode
* str
) SAL_THROW_EXTERN_C();
1146 /* ======================================================================= */
1148 #if defined(SAL_W32)
1149 #pragma pack(push, 4)
1152 /** @cond INTERNAL */
1153 /** The implementation of a Unicode string.
1155 typedef struct _rtl_uString
1157 oslInterlockedCount refCount
; /* opaque */
1159 sal_Unicode buffer
[1];
1163 #if defined(SAL_W32)
1167 /* ----------------------------------------------------------------------- */
1169 /** Increment the reference count of a string.
1174 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_acquire(
1175 rtl_uString
* str
) SAL_THROW_EXTERN_C();
1177 /** Decrement the reference count of a string.
1179 If the count goes to zero than the string data is deleted.
1184 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_release(
1185 rtl_uString
* str
) SAL_THROW_EXTERN_C();
1187 /** Allocate a new string containing no characters.
1190 pointer to the new string. The pointed-to data must be null or a valid
1193 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_new(
1194 rtl_uString
** newStr
) SAL_THROW_EXTERN_C();
1196 /** Allocate a new string containing space for a given number of characters.
1198 The reference count of the new string will be 1. The length of the string
1199 will be nLen. This function does not handle out-of-memory conditions.
1201 For nLen < 0 or failed allocation this method returns NULL.
1203 The characters of the capacity are not cleared, and the length is set to
1204 nLen, unlike the similar method of rtl_uString_new_WithLength which
1205 zeros out the buffer, and sets the length to 0. So should be somewhat
1206 more efficient for allocating a new string.
1208 call rtl_uString_release to release the string
1209 alternatively pass ownership to an OUString with
1210 rtl::OUString(newStr, SAL_NO_ACQUIRE);
1212 @param[in] nLen the number of characters.
1213 @return pointer to the new string.
1215 @since LibreOffice 4.1
1217 SAL_DLLPUBLIC rtl_uString
* SAL_CALL
rtl_uString_alloc(sal_Int32 nLen
) SAL_THROW_EXTERN_C();
1219 /** Allocate a new string containing space for a given number of characters.
1221 If len is greater than zero, the reference count of the new string will be
1222 1. The values of all characters are set to 0 and the length of the string
1223 is 0. This function does not handle out-of-memory conditions.
1226 pointer to the new string. The pointed-to data must be null or a valid
1230 the number of characters.
1232 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_new_WithLength(
1233 rtl_uString
** newStr
, sal_Int32 nLen
) SAL_THROW_EXTERN_C();
1235 /** Allocate a new string that contains a copy of another string.
1237 If the length of value is greater than zero, the reference count of the
1238 new string will be 1. This function does not handle out-of-memory
1242 pointer to the new string. The pointed-to data must be null or a valid
1248 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromString(
1249 rtl_uString
** newStr
, const rtl_uString
* value
) SAL_THROW_EXTERN_C();
1251 /** Allocate a new string that contains a copy of a character array.
1253 If the length of value is greater than zero, the reference count of the
1254 new string will be 1. This function does not handle out-of-memory
1258 pointer to the new string. The pointed-to data must be null or a valid
1262 a null-terminated character array.
1264 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromStr(
1265 rtl_uString
** newStr
, const sal_Unicode
* value
) SAL_THROW_EXTERN_C();
1267 /** Allocate a new string that contains a copy of a character array.
1269 If the length of value is greater than zero, the reference count of the
1270 new string will be 1. This function does not handle out-of-memory
1274 pointer to the new string. The pointed-to data must be null or a valid
1278 a character array. Need not be null-terminated, but must be at least as
1279 long as the specified len.
1282 the length of the character array.
1284 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromStr_WithLength(
1285 rtl_uString
** newStr
, const sal_Unicode
* value
, sal_Int32 len
) SAL_THROW_EXTERN_C();
1287 /** Allocate a new string that is a substring of this string.
1289 The substring begins at the specified beginIndex and contains count
1290 characters. Meaningless combinations such as negative beginIndex,
1291 or beginIndex + count greater than the length of the string have
1292 undefined behaviour.
1294 @param[out] newStr the specified substring.
1295 @param[in] from the String to take the substring from.
1296 @param[in] beginIndex the beginning index, inclusive.
1297 @param[in] count the number of characters.
1298 @return the specified substring.
1300 @since LibreOffice 4.0
1302 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromSubString(
1303 rtl_uString
** newStr
, const rtl_uString
* from
,
1304 sal_Int32 beginIndex
, sal_Int32 count
) SAL_THROW_EXTERN_C();
1306 /** Allocate a new string that contains a copy of a character array.
1308 If the length of value is greater than zero, the reference count of the
1309 new string will be 1. This function does not handle out-of-memory
1312 Since this function is optimized for performance, the ASCII character
1313 values are not converted in any way. The caller has to make sure that
1314 all ASCII characters are in the allowed range of 0 and 127, inclusive.
1317 pointer to the new string. The pointed-to data must be null or a valid
1321 a null-terminated ASCII character array.
1323 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromAscii(
1324 rtl_uString
** newStr
, const sal_Char
* value
) SAL_THROW_EXTERN_C();
1328 @since LibreOffice 3.6
1330 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromLiteral(
1331 rtl_uString
** newStr
, const sal_Char
* value
, sal_Int32 len
,
1332 sal_Int32 allocExtra
) SAL_THROW_EXTERN_C();
1334 /** Allocate a new string from an array of Unicode code points.
1337 a non-null pointer to a (possibly null) rtl_uString pointer, which (if
1338 non-null) will have been passed to rtl_uString_release before the function
1339 returns. Upon return, points to the newly allocated string or to null if
1340 there was either an out-of-memory condition or the resulting number of
1341 UTF-16 code units would have been larger than SAL_MAX_INT32. The newly
1342 allocated string (if any) must ultimately be passed to rtl_uString_release.
1345 an array of at least codePointCount code points, which each must be in the
1346 range from 0 to 0x10FFFF, inclusive. May be null if codePointCount is zero.
1348 @param codePointCount
1349 the non-negative number of code points.
1353 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newFromCodePoints(
1354 rtl_uString
** newString
, sal_uInt32
const * codePoints
,
1355 sal_Int32 codePointCount
) SAL_THROW_EXTERN_C();
1357 /** Assign a new value to a string.
1359 First releases any value str might currently hold, then acquires
1363 pointer to the string. The pointed-to data must be null or a valid
1369 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_assign(
1370 rtl_uString
** str
, rtl_uString
* rightValue
) SAL_THROW_EXTERN_C();
1372 /** Return the length of a string.
1374 The length is equal to the number of characters in the string.
1380 the length of the string.
1382 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_uString_getLength(
1383 const rtl_uString
* str
) SAL_THROW_EXTERN_C();
1385 /** Return a pointer to the underlying character array of a string.
1391 a pointer to the null-terminated character array.
1393 SAL_DLLPUBLIC sal_Unicode
* SAL_CALL
rtl_uString_getStr(
1394 rtl_uString
* str
) SAL_THROW_EXTERN_C();
1396 /** Create a new string that is the concatenation of two other strings.
1398 The new string does not necessarily have a reference count of 1 (in cases
1399 where one of the two other strings is empty), so it must not be modified
1400 without checking the reference count. This function does not handle
1401 out-of-memory conditions.
1404 pointer to the new string. The pointed-to data must be null or a valid
1413 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newConcat(
1414 rtl_uString
** newStr
, rtl_uString
* left
, rtl_uString
* right
) SAL_THROW_EXTERN_C();
1416 /** Create a new string by replacing a substring of another string.
1418 The new string results from replacing a number of characters (count),
1419 starting at the specified position (index) in the original string (str),
1420 with some new substring (subStr). If subStr is null, than only a number
1421 of characters is deleted.
1423 The new string does not necessarily have a reference count of 1, so it
1424 must not be modified without checking the reference count. This function
1425 does not handle out-of-memory conditions.
1428 pointer to the new string. The pointed-to data must be null or a valid
1435 the index into str at which to start replacement. Must be between 0 and
1436 the length of str, inclusive.
1439 the number of characters to remove. Must not be negative, and the sum of
1440 index and count must not exceed the length of str.
1443 either null or a valid string to be inserted.
1445 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceStrAt(
1446 rtl_uString
** newStr
, rtl_uString
* str
, sal_Int32 idx
, sal_Int32 count
, rtl_uString
* subStr
) SAL_THROW_EXTERN_C();
1448 /** Create a new string by replacing all occurrences of a single character
1449 within another string.
1451 The new string results from replacing all occurrences of oldChar in str
1454 The new string does not necessarily have a reference count of 1 (in cases
1455 where oldChar does not occur in str), so it must not be modified without
1456 checking the reference count. This function does not handle out-of-memory
1460 pointer to the new string. The pointed-to data must be null or a valid
1472 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplace(
1473 rtl_uString
** newStr
, rtl_uString
* str
, sal_Unicode oldChar
, sal_Unicode newChar
) SAL_THROW_EXTERN_C();
1475 /** Create a new string by replacing the first occurrence of a given substring
1476 with another substring.
1478 @param[in, out] newStr pointer to the new string; must not be null; must
1479 point to null or a valid rtl_uString
1481 @param str pointer to the original string; must not be null
1483 @param from pointer to the substring to be replaced; must not be null
1485 @param to pointer to the replacing substring; must not be null
1487 @param[in,out] index pointer to a start index, must not be null; upon entry
1488 to the function its value is the index into the original string at which to
1489 start searching for the \p from substring, the value must be non-negative
1490 and not greater than the original string's length; upon exit from the
1491 function its value is the index into the original string at which the
1492 replacement took place or -1 if no replacement took place
1494 @since LibreOffice 3.6
1496 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceFirst(
1497 rtl_uString
** newStr
, rtl_uString
* str
, rtl_uString
const * from
,
1498 rtl_uString
const * to
, sal_Int32
* index
) SAL_THROW_EXTERN_C();
1500 /** Create a new string by replacing the first occurrence of a given substring
1501 with another substring.
1503 @param[in, out] newStr pointer to the new string; must not be null; must
1504 point to null or a valid rtl_uString
1506 @param str pointer to the original string; must not be null
1508 @param from pointer to the substring to be replaced; must not be null and
1509 must point to memory of at least \p fromLength ASCII bytes
1511 @param fromLength the length of the \p from substring; must be non-negative
1513 @param to pointer to the replacing substring; must not be null
1515 @param[in,out] index pointer to a start index, must not be null; upon entry
1516 to the function its value is the index into the original string at which to
1517 start searching for the \p from substring, the value must be non-negative
1518 and not greater than the original string's length; upon exit from the
1519 function its value is the index into the original string at which the
1520 replacement took place or -1 if no replacement took place
1522 @since LibreOffice 3.6
1524 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceFirstAsciiL(
1525 rtl_uString
** newStr
, rtl_uString
* str
, char const * from
,
1526 sal_Int32 fromLength
, rtl_uString
const * to
, sal_Int32
* index
)
1527 SAL_THROW_EXTERN_C();
1529 /** Create a new string by replacing the first occurrence of a given substring
1530 with another substring.
1532 @param[in, out] newStr pointer to the new string; must not be null; must
1533 point to null or a valid rtl_uString
1535 @param str pointer to the original string; must not be null
1537 @param from pointer to the substring to be replaced; must not be null and
1538 must point to memory of at least \p fromLength ASCII bytes
1540 @param fromLength the length of the \p from substring; must be non-negative
1542 @param to pointer to the substring to be replaced; must not be null and
1543 must point to memory of at least \p toLength ASCII bytes
1545 @param toLength the length of the \p to substring; must be non-negative
1547 @param[in,out] index pointer to a start index, must not be null; upon entry
1548 to the function its value is the index into the original string at which to
1549 start searching for the \p from substring, the value must be non-negative
1550 and not greater than the original string's length; upon exit from the
1551 function its value is the index into the original string at which the
1552 replacement took place or -1 if no replacement took place
1554 @since LibreOffice 3.6
1556 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceFirstAsciiLAsciiL(
1557 rtl_uString
** newStr
, rtl_uString
* str
, char const * from
,
1558 sal_Int32 fromLength
, char const * to
, sal_Int32 toLength
,
1559 sal_Int32
* index
) SAL_THROW_EXTERN_C();
1561 /** Create a new string by replacing all occurrences of a given substring with
1564 Replacing subsequent occurrences picks up only after a given replacement.
1565 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1567 @param[in, out] newStr pointer to the new string; must not be null; must
1568 point to null or a valid rtl_uString
1570 @param str pointer to the original string; must not be null
1572 @param from pointer to the substring to be replaced; must not be null
1574 @param to pointer to the replacing substring; must not be null
1576 @since LibreOffice 3.6
1578 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceAll(
1579 rtl_uString
** newStr
, rtl_uString
* str
, rtl_uString
const * from
,
1580 rtl_uString
const * to
) SAL_THROW_EXTERN_C();
1582 /** Create a new string by replacing all occurrences of a given substring with
1585 Replacing subsequent occurrences picks up only after a given replacement.
1586 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1588 @param[in, out] newStr pointer to the new string; must not be null; must
1589 point to null or a valid rtl_uString
1591 @param str pointer to the original string; must not be null
1593 @param from pointer to the substring to be replaced; must not be null
1595 @param to pointer to the replacing substring; must not be null
1597 @param fromIndex the position in the string where we will begin searching
1599 @since LibreOffice 4.0
1601 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceAllFromIndex(
1602 rtl_uString
** newStr
, rtl_uString
* str
, rtl_uString
const * from
,
1603 rtl_uString
const * to
, sal_Int32 fromIndex
) SAL_THROW_EXTERN_C();
1605 /** Create a new string by replacing all occurrences of a given substring with
1608 Replacing subsequent occurrences picks up only after a given replacement.
1609 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1611 @param[in, out] newStr pointer to the new string; must not be null; must
1612 point to null or a valid rtl_uString
1614 @param str pointer to the original string; must not be null
1616 @param from pointer to the substring to be replaced; must not be null and
1617 must point to memory of at least \p fromLength ASCII bytes
1619 @param fromLength the length of the \p from substring; must be non-negative
1621 @param to pointer to the replacing substring; must not be null
1623 @since LibreOffice 3.6
1625 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceAllAsciiL(
1626 rtl_uString
** newStr
, rtl_uString
* str
, char const * from
,
1627 sal_Int32 fromLength
, rtl_uString
const * to
) SAL_THROW_EXTERN_C();
1629 /** Create a new string by replacing all occurrences of a given substring with
1632 Replacing subsequent occurrences picks up only after a given replacement.
1633 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1635 @param[in, out] newStr pointer to the new string; must not be null; must
1636 point to null or a valid rtl_uString
1638 @param str pointer to the original string; must not be null
1640 @param from pointer to the substring to be replaced; must not be null and
1641 must point to memory of at least \p fromLength ASCII bytes
1643 @param fromLength the length of the \p from substring; must be non-negative
1645 @param to pointer to the substring to be replaced; must not be null and
1646 must point to memory of at least \p toLength ASCII bytes
1648 @param toLength the length of the \p to substring; must be non-negative
1650 @since LibreOffice 3.6
1652 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newReplaceAllAsciiLAsciiL(
1653 rtl_uString
** newStr
, rtl_uString
* str
, char const * from
,
1654 sal_Int32 fromLength
, char const * to
, sal_Int32 toLength
)
1655 SAL_THROW_EXTERN_C();
1657 /** Create a new string by converting all ASCII uppercase letters to lowercase
1658 within another string.
1660 The new string results from replacing all characters with values between
1661 65 and 90 (ASCII A--Z) by values between 97 and 122 (ASCII a--z).
1663 This function cannot be used for language-specific conversion. The new
1664 string does not necessarily have a reference count of 1 (in cases where
1665 no characters need to be converted), so it must not be modified without
1666 checking the reference count. This function does not handle out-of-memory
1670 pointer to the new string. The pointed-to data must be null or a valid
1676 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newToAsciiLowerCase(
1677 rtl_uString
** newStr
, rtl_uString
* str
) SAL_THROW_EXTERN_C();
1679 /** Create a new string by converting all ASCII lowercase letters to uppercase
1680 within another string.
1682 The new string results from replacing all characters with values between
1683 97 and 122 (ASCII a--z) by values between 65 and 90 (ASCII A--Z).
1685 This function cannot be used for language-specific conversion. The new
1686 string does not necessarily have a reference count of 1 (in cases where
1687 no characters need to be converted), so it must not be modified without
1688 checking the reference count. This function does not handle out-of-memory
1692 pointer to the new string. The pointed-to data must be null or a valid
1698 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newToAsciiUpperCase(
1699 rtl_uString
** newStr
, rtl_uString
* str
) SAL_THROW_EXTERN_C();
1701 /** Create a new string by removing white space from both ends of another
1704 The new string results from removing all characters with values less than
1705 or equal to 32 (the space character) form both ends of str.
1707 This function cannot be used for language-specific conversion. The new
1708 string does not necessarily have a reference count of 1 (in cases where
1709 no characters need to be removed), so it must not be modified without
1710 checking the reference count. This function does not handle out-of-memory
1714 pointer to the new string. The pointed-to data must be null or a valid
1720 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_newTrim(
1721 rtl_uString
** newStr
, rtl_uString
* str
) SAL_THROW_EXTERN_C();
1723 /** Create a new string by extracting a single token from another string.
1725 Starting at index, the token's next token is searched for. If there is no
1726 such token, the result is an empty string. Otherwise, all characters from
1727 the start of that token and up to, but not including the next occurrence
1728 of cTok make up the resulting token. The return value is the position of
1729 the next token, or -1 if no more tokens follow.
1731 Example code could look like
1732 rtl_uString * pToken = NULL;
1733 sal_Int32 nIndex = 0;
1737 nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex);
1740 while (nIndex >= 0);
1742 The new string does not necessarily have a reference count of 1, so it
1743 must not be modified without checking the reference count. This function
1744 does not handle out-of-memory conditions.
1747 pointer to the new string. The pointed-to data must be null or a valid
1748 string. If either token or index is negative, an empty token is stored in
1749 newStr (and -1 is returned).
1755 the number of the token to return, starting at index.
1758 the character that separates the tokens.
1761 the position at which searching for the token starts. Must not be greater
1762 than the length of str.
1765 the index of the next token, or -1 if no more tokens follow.
1767 SAL_DLLPUBLIC sal_Int32 SAL_CALL
rtl_uString_getToken(
1768 rtl_uString
** newStr
, rtl_uString
* str
, sal_Int32 token
, sal_Unicode cTok
, sal_Int32 idx
) SAL_THROW_EXTERN_C();
1770 /* ======================================================================= */
1772 /** Supply an ASCII string literal together with its length and text encoding.
1774 This macro can be used to compute (some of) the arguments in function calls
1775 like rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo")).
1777 @param constAsciiStr
1778 must be an expression of type "(possibly cv-qualified reference to) array of
1779 (possibly cv-qualified) char." Each element of the referenced array must
1780 represent an ASCII value in the range 0x00--0x7F. The last element of the
1781 referenced array is not considered part of the represented ASCII string, and
1782 its value should be 0x00. Depending on where this macro is used, the nature
1783 of the supplied expression might be further restricted.
1785 // The &foo[0] trick is intentional, it makes sure the type is char* or const char*
1786 // (plain cast to const char* would not work with non-const char foo[]="a", which seems to be allowed).
1787 // This is to avoid mistaken use with functions that accept string literals
1788 // (i.e. const char (&)[N]) where usage of this macro otherwise could match
1789 // the argument and a following int argument with a default value (e.g. OUString::match()).
1790 #define RTL_CONSTASCII_USTRINGPARAM( constAsciiStr ) (&(constAsciiStr)[0]), \
1791 ((sal_Int32)(SAL_N_ELEMENTS(constAsciiStr)-1)), RTL_TEXTENCODING_ASCII_US
1793 /* ======================================================================= */
1795 /* predefined constants for String-Conversion */
1796 #define OSTRING_TO_OUSTRING_CVTFLAGS (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE |\
1797 RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT |\
1798 RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT)
1800 /* ----------------------------------------------------------------------- */
1802 /** Create a new Unicode string by converting a byte string, using a specific
1805 The lengths of the byte string and the Unicode string may differ (e.g.,
1806 for double-byte encodings, UTF-7, UTF-8).
1808 If the length of the byte string is greater than zero, the reference count
1809 of the new string will be 1.
1811 If an out-of-memory condition occurs, newStr will point to a null pointer
1815 pointer to the new string. The pointed-to data must be null or a valid
1819 a byte character array. Need not be null-terminated, but must be at
1820 least as long as the specified len.
1823 the length of the byte character array.
1826 the text encoding to use for conversion.
1829 flags which control the conversion. Either use
1830 OSTRING_TO_OUSTRING_CVTFLAGS, or see
1831 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more
1834 SAL_DLLPUBLIC
void SAL_CALL
rtl_string2UString(
1835 rtl_uString
** newStr
, const sal_Char
* str
, sal_Int32 len
, rtl_TextEncoding encoding
, sal_uInt32 convertFlags
) SAL_THROW_EXTERN_C();
1837 /* ======================================================================= */
1838 /* Interning methods */
1840 /** Return a canonical representation for a string.
1842 A pool of strings, initially empty is maintained privately
1843 by the string class. On invocation, if present in the pool
1844 the original string will be returned. Otherwise this string,
1845 or a copy thereof will be added to the pool and returned.
1848 pointer to the new string. The pointed-to data must be null or a valid
1851 If an out-of-memory condition occurs, newStr will point to a null pointer
1855 pointer to the string to be interned.
1859 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_intern(
1860 rtl_uString
** newStr
, rtl_uString
* str
) SAL_THROW_EXTERN_C();
1862 /** Return a canonical representation for a string.
1864 A pool of strings, initially empty is maintained privately
1865 by the string class. On invocation, if present in the pool
1866 the original string will be returned. Otherwise this string,
1867 or a copy thereof will be added to the pool and returned.
1870 pointer to the new string. The pointed-to data must be null or a valid
1873 If an out-of-memory condition occurs, newStr will point to a null pointer
1877 a byte character array. Need not be null-terminated, but must be at
1878 least as long as the specified len.
1881 the length of the byte character array.
1884 the text encoding to use for conversion.
1887 flags which control the conversion. Either use
1888 OSTRING_TO_OUSTRING_CVTFLAGS, or see
1889 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more
1893 pointer to return conversion status in, or NULL.
1897 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_internConvert(
1898 rtl_uString
** newStr
,
1899 const sal_Char
* str
,
1901 rtl_TextEncoding encoding
,
1902 sal_uInt32 convertFlags
,
1903 sal_uInt32
*pInfo
) SAL_THROW_EXTERN_C();
1905 /** Iterate through a string based on code points instead of UTF-16 code units.
1907 See Chapter 3 of The Unicode Standard 5.0 (Addison--Wesley, 2006) for
1908 definitions of the various terms used in this description.
1910 The given string is interpreted as a sequence of zero or more UTF-16 code
1911 units. For each index into this sequence (from zero to one less than the
1912 length of the sequence, inclusive), a code point represented starting at the
1913 given index is computed as follows:
1915 - If the UTF-16 code unit addressed by the index constitutes a well-formed
1916 UTF-16 code unit sequence, the computed code point is the scalar value
1917 encoded by that UTF-16 code unit sequence.
1919 - Otherwise, if the index is at least two UTF-16 code units away from the
1920 end of the sequence, and the sequence of two UTF-16 code units addressed by
1921 the index constitutes a well-formed UTF-16 code unit sequence, the computed
1922 code point is the scalar value encoded by that UTF-16 code unit sequence.
1924 - Otherwise, the computed code point is the UTF-16 code unit addressed by
1925 the index. (This last case catches unmatched surrogates as well as indices
1926 pointing into the middle of surrogate pairs.)
1929 pointer to a valid string; must not be null.
1932 pointer to a UTF-16 based index into the given string; must not be null. On
1933 entry, the index must be in the range from zero to the length of the string
1934 (in UTF-16 code units), inclusive. Upon successful return, the index will
1935 be updated to address the UTF-16 code unit that is the given
1936 incrementCodePoints away from the initial index.
1938 @param incrementCodePoints
1939 the number of code points to move the given *indexUtf16. If non-negative,
1940 moving is done after determining the code point at the index. If negative,
1941 moving is done before determining the code point at the (then updated)
1942 index. The value must be such that the resulting UTF-16 based index is in
1943 the range from zero to the length of the string (in UTF-16 code units),
1947 the code point (an integer in the range from 0 to 0x10FFFF, inclusive) that
1948 is represented within the string starting at the index computed as follows:
1949 If incrementCodePoints is non-negative, the index is the initial value of
1950 *indexUtf16; if incrementCodePoints is negative, the index is the updated
1951 value of *indexUtf16. In either case, the computed index must be in the
1952 range from zero to one less than the length of the string (in UTF-16 code
1957 SAL_DLLPUBLIC sal_uInt32 SAL_CALL
rtl_uString_iterateCodePoints(
1958 rtl_uString
const * string
, sal_Int32
* indexUtf16
,
1959 sal_Int32 incrementCodePoints
);
1961 /** Converts a byte string to a Unicode string, signalling failure.
1964 An out parameter receiving the converted string. Must not be null itself,
1965 and must contain either null or a pointer to a valid rtl_uString; the
1966 contents are unspecified if conversion fails (rtl_convertStringToUString
1970 The byte string. May only be null if length is zero.
1973 The length of the byte string. Must be non-negative.
1976 The text encoding to convert from. Must be an octet encoding (i.e.,
1977 rtl_isOctetTextEncoding(encoding) must return true).
1980 A combination of RTL_TEXTTOUNICODE_FLAGS that detail how to do the
1981 conversion (see rtl_convertTextToUnicode). RTL_TEXTTOUNICODE_FLAGS_FLUSH
1982 need not be included, it is implicitly assumed. Typical uses are either
1983 RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
1984 RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
1985 RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR (fail if a byte or multi-byte sequence
1986 cannot be converted from the source encoding) or
1987 OSTRING_TO_OUSTRING_CVTFLAGS (make a best efforts conversion).
1990 True if the conversion succeeded, false otherwise.
1994 SAL_DLLPUBLIC sal_Bool SAL_CALL
rtl_convertStringToUString(
1995 rtl_uString
** target
, char const * source
, sal_Int32 length
,
1996 rtl_TextEncoding encoding
, sal_uInt32 flags
) SAL_THROW_EXTERN_C();
1998 /** Ensure a string has enough space for a given number of characters.
2000 If the given string is large enough and has refcount of 1, it is not altered in any way.
2001 Otherwise it is replaced by a copy that has enough space for the given number of characters,
2002 data from the source string is copied to the beginning of it, the content of the remaining
2003 capacity undefined, the string has refcount of 1, and refcount of the original string is decreased.
2006 pointer to the string. The pointed-to data must be a valid string.
2009 the number of characters
2011 @since LibreOffice 4.1
2014 SAL_DLLPUBLIC
void SAL_CALL
rtl_uString_ensureCapacity( rtl_uString
** str
, sal_Int32 size
) SAL_THROW_EXTERN_C();
2020 #endif /* _RTL_USTRING_H_ */
2022 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */