sd: sidebars are now visible in LOOL
[LibreOffice.git] / include / rtl / ustring.h
blobcd6f75e889db55e61c4a36604bd487d9ab231087
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_RTL_USTRING_H
21 #define INCLUDED_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"
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
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.
42 @param str
43 a null-terminated string.
45 @return
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
57 null-terminated.
59 @param first
60 the first null-terminated string to be compared.
62 @param second
63 the second null-terminated string which is compared with the first one.
65 @return
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.
79 @param first
80 the first string to be compared. Need not be null-terminated, but must be
81 at least as long as the specified firstLen.
83 @param firstLen
84 the length of the first string.
86 @param second
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.
90 @param secondLen
91 the length of the second string.
93 @return
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.
107 @param first
108 the first string to be compared. Need not be null-terminated, but must be
109 at least as long as the specified firstLen.
111 @param firstLen
112 the length of the first string.
114 @param second
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.
118 @param secondLen
119 the length of the second string.
121 @param shortenedLen
122 the maximum number of characters to compare. This length can be greater
123 or smaller than the lengths of the two strings.
125 @return
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.
139 @param first
140 the first string to be compared. Need not be null-terminated, but must be
141 at least as long as the specified firstLen.
143 @param firstLen
144 the length of the first string.
146 @param second
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.
150 @param secondLen
151 the length of the second string.
153 @return
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, and only if, both strings are equal.
165 This function cannot be used for language-specific sorting.
167 @param first
168 the first string to be compared. Need not be null-terminated, but must be
169 at least as long as the specified len.
171 @param second
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.
175 @param len
176 the length of both strings.
178 @return
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.
193 @param first
194 the first null-terminated string to be compared.
196 @param second
197 the second null-terminated string which is compared with the first one.
199 @return
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
213 sorting.
215 @param first
216 the first string to be compared. Need not be null-terminated, but must be
217 at least as long as the specified firstLen.
219 @param firstLen
220 the length of the first string.
222 @param second
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.
226 @param secondLen
227 the length of the second string.
229 @return
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
238 of ASCII characters.
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
244 sorting.
246 @param first
247 the first string to be compared. Need not be null-terminated, but must be
248 at least as long as the specified firstLen.
250 @param firstLen
251 the length of the first string.
253 @param second
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.
257 @param secondLen
258 the length of the second string.
260 @param shortenedLen
261 the maximum number of characters to compare. This length can be greater
262 or smaller than the lengths of the two strings.
264 @return
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
277 null-terminated.
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.
283 @param first
284 the first null-terminated string to be compared.
286 @param second
287 the second null-terminated ASCII string which is compared with the first
288 one.
290 @return
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.
308 @param first
309 the first string to be compared. Need not be null-terminated, but must be
310 at least as long as the specified firstLen.
312 @param firstLen
313 the length of the first string.
315 @param second
316 the second null-terminated ASCII string which is compared with the first
317 one.
319 @return
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.
337 @param first
338 the first string to be compared. Need not be null-terminated, but must be
339 at least as long as the specified firstLen.
341 @param firstLen
342 the length of the first string.
344 @param second
345 the second null-terminated ASCII string which is compared with the first
346 one.
348 @param shortenedLen
349 the maximum number of characters to compare. This length can be greater
350 or smaller than the lengths of the two strings.
352 @return
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.
370 @param first
371 the first string to be compared. Need not be null-terminated, but must be
372 at least as long as the specified firstLen.
374 @param firstLen
375 the length of the first string.
377 @param second
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.
381 @param secondLen
382 the length of the second string.
384 @return
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.
404 @param first
405 the first null-terminated string to be compared.
407 @param second
408 the second null-terminated ASCII string which is compared with the first
409 one.
411 @return
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
425 sorting.
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.
431 @param first
432 the first string to be compared. Need not be null-terminated, but must be
433 at least as long as the specified firstLen.
435 @param firstLen
436 the length of the first string.
438 @param second
439 the second null-terminated ASCII string which is compared with the first
440 one.
442 @return
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
456 sorting.
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.
462 @param first
463 the first string to be compared. Need not be null-terminated, but must be
464 at least as long as the specified firstLen.
466 @param firstLen
467 the length of the first string.
469 @param second
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.
473 @param secondLen
474 the length of the second string.
476 @return
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
486 of ASCII characters.
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
492 sorting.
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.
498 @param first
499 the first string to be compared. Need not be null-terminated, but must be
500 at least as long as the specified firstLen.
502 @param firstLen
503 the length of the first string.
505 @param second
506 the second null-terminated ASCII string which is compared with the first
507 one.
509 @param shortenedLen
510 the maximum number of characters to compare. This length can be greater
511 or smaller than the lengths of the two strings.
513 @return
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
525 null-terminated.
527 @param str
528 a null-terminated string.
530 @return
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.
541 @param str
542 a string. Need not be null-terminated, but must be at least as long as
543 the specified len.
545 @param len
546 the length of the string.
548 @return
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.
558 @param str
559 a null-terminated string.
561 @param ch
562 the character to be searched for.
564 @return
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.
573 @param str
574 a string. Need not be null-terminated, but must be at least as long as
575 the specified len.
577 @param len
578 the length of the string.
580 @param ch
581 the character to be searched for.
583 @return
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.
594 @param str
595 a null-terminated string.
597 @param ch
598 the character to be searched for.
600 @return
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.
610 @param str
611 a string. Need not be null-terminated, but must be at least as long as
612 the specified len.
614 @param len
615 the length of the string.
617 @param ch
618 the character to be searched for.
620 @return
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.
633 @param str
634 a null-terminated string.
636 @param subStr
637 the null-terminated substring to be searched for.
639 @return
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.
650 @param str
651 a string. Need not be null-terminated, but must be at least as long as
652 the specified len.
654 @param len
655 the length of the string.
657 @param subStr
658 the substring to be searched for. Need not be null-terminated, but must
659 be at least as long as the specified subLen.
661 @param subLen
662 the length of the substring.
664 @return
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.
673 @param str
674 a string. Need not be null-terminated, but must be at least as long as
675 the specified len.
677 @param len
678 the length of the string; must be non-negative.
680 @param subStr
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.
685 @param subLen
686 the length of the substring; must be non-negative.
688 @return
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.
693 @since UDK 3.2.7
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.
704 @param str
705 a null-terminated string.
707 @param subStr
708 the null-terminated substring to be searched for.
710 @return
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.
721 @param str
722 a string. Need not be null-terminated, but must be at least as long as
723 the specified len.
725 @param len
726 the length of the string.
728 @param subStr
729 the substring to be searched for. Need not be null-terminated, but must
730 be at least as long as the specified subLen.
732 @param subLen
733 the length of the substring.
735 @return
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.
744 @param str
745 a string. Need not be null-terminated, but must be at least as long as
746 the specified len.
748 @param len
749 the length of the string; must be non-negative.
751 @param subStr
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.
756 @param subLen
757 the length of the substring; must be non-negative.
759 @return
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.
764 @since UDK 3.2.7
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.
775 @param str
776 a null-terminated string.
778 @param oldChar
779 the old character.
781 @param newChar
782 the new character.
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.
791 @param str
792 a string. Need not be null-terminated, but must be at least as long as
793 the specified len.
795 @param len
796 the length of the string.
798 @param oldChar
799 the old character.
801 @param newChar
802 the new character.
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
811 null-terminated.
813 @param str
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).
824 @param str
825 a string. Need not be null-terminated, but must be at least as long as
826 the specified len.
828 @param len
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
838 null-terminated.
840 @param str
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).
851 @param str
852 a string. Need not be null-terminated, but must be at least as long as
853 the specified len.
855 @param len
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.
867 @param str
868 a null-terminated string.
870 @return
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.
882 @param str
883 a string. Need not be null-terminated, but must be at least as long as
884 the specified len.
886 @param len
887 the original length of the string.
889 @return
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
900 operations.
902 @param str
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.
907 @param b
908 a boolean value.
910 @return
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.
919 @param str
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.
924 @param ch
925 a character value.
927 @return
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.
938 @param str
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.
943 @param i
944 an integer value.
946 @param radix
947 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
948 (36), inclusive.
950 @return
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.
963 @param str
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.
968 @param l
969 a long integer value.
971 @param radix
972 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
973 (36), inclusive.
975 @return
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.
986 @param str
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.
991 @param l
992 a long integer value.
994 @param radix
995 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
996 (36), inclusive.
998 @return
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.
1009 @param str
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.
1014 @param f
1015 a float value.
1017 @return
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.
1028 @param str
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.
1033 @param d
1034 a double value.
1036 @return
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.
1048 @param str
1049 a null-terminated string.
1051 @return
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.
1062 @param str
1063 a null-terminated string.
1065 @param radix
1066 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1067 (36), inclusive.
1069 @return
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 an unsigned integer.
1078 This function cannot be used for language-specific conversion. The string
1079 must be null-terminated.
1081 @param str
1082 a null-terminated string.
1084 @param radix
1085 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1086 (36), inclusive.
1088 @return
1089 the unsigned integer value represented by the string, or 0 if the string
1090 does not represent an unsigned integer.
1092 @since LibreOffice 4.2
1094 SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_ustr_toUInt32(
1095 const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
1097 /** Interpret a string as a long integer.
1099 This function cannot be used for language-specific conversion. The string
1100 must be null-terminated.
1102 @param str
1103 a null-terminated string.
1105 @param radix
1106 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1107 (36), inclusive.
1109 @return
1110 the long integer value represented by the string, or 0 if the string does
1111 not represent a long integer.
1113 SAL_DLLPUBLIC sal_Int64 SAL_CALL rtl_ustr_toInt64(
1114 const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
1116 /** Interpret a string as an unsigned long integer.
1118 This function cannot be used for language-specific conversion. The string
1119 must be null-terminated.
1121 @param str
1122 a null-terminated string.
1124 @param radix
1125 the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
1126 (36), inclusive.
1128 @return
1129 the unsigned long integer value represented by the string, or 0 if the
1130 string does not represent an unsigned long integer.
1132 @since LibreOffice 4.1
1134 SAL_DLLPUBLIC sal_uInt64 SAL_CALL rtl_ustr_toUInt64(
1135 const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
1137 /** Interpret a string as a float.
1139 This function cannot be used for language-specific conversion. The string
1140 must be null-terminated.
1142 @param str
1143 a null-terminated string.
1145 @return
1146 the float value represented by the string, or 0.0 if the string does not
1147 represent a float.
1149 SAL_DLLPUBLIC float SAL_CALL rtl_ustr_toFloat(
1150 const sal_Unicode * str ) SAL_THROW_EXTERN_C();
1152 /** Interpret a string as a double.
1154 This function cannot be used for language-specific conversion. The string
1155 must be null-terminated.
1157 @param str
1158 a null-terminated string.
1160 @return
1161 the float value represented by the string, or 0.0 if the string does not
1162 represent a double.
1164 SAL_DLLPUBLIC double SAL_CALL rtl_ustr_toDouble(
1165 const sal_Unicode * str ) SAL_THROW_EXTERN_C();
1167 /* ======================================================================= */
1169 #if defined(_WIN32)
1170 #pragma pack(push, 4)
1171 #endif
1173 /** @cond INTERNAL */
1174 /** The implementation of a Unicode string.
1176 typedef struct SAL_DLLPUBLIC_RTTI _rtl_uString
1178 oslInterlockedCount refCount; /* opaque */
1179 sal_Int32 length;
1180 sal_Unicode buffer[1];
1181 } rtl_uString;
1182 /** @endcond */
1184 #if defined(_WIN32)
1185 #pragma pack(pop)
1186 #endif
1188 /* ----------------------------------------------------------------------- */
1190 /** Increment the reference count of a string.
1192 @param str
1193 a string.
1195 SAL_DLLPUBLIC void SAL_CALL rtl_uString_acquire(
1196 rtl_uString * str ) SAL_THROW_EXTERN_C() SAL_HOT;
1198 /** Decrement the reference count of a string.
1200 If the count goes to zero than the string data is deleted.
1202 @param str
1203 a string.
1205 SAL_DLLPUBLIC void SAL_CALL rtl_uString_release(
1206 rtl_uString * str ) SAL_THROW_EXTERN_C() SAL_HOT;
1208 /** Allocate a new string containing no characters.
1210 @param newStr
1211 pointer to the new string. The pointed-to data must be null or a valid
1212 string.
1214 SAL_DLLPUBLIC void SAL_CALL rtl_uString_new(
1215 rtl_uString ** newStr ) SAL_THROW_EXTERN_C();
1217 /** Allocate a new string containing space for a given number of characters.
1219 The reference count of the new string will be 1. The length of the string
1220 will be nLen. This function does not handle out-of-memory conditions.
1222 For failed allocation this method returns NULL.
1224 The characters of the capacity are not cleared, and the length is set to
1225 nLen, unlike the similar method of rtl_uString_new_WithLength which
1226 zeros out the buffer, and sets the length to 0. So should be somewhat
1227 more efficient for allocating a new string.
1229 call rtl_uString_release to release the string
1230 alternatively pass ownership to an OUString with
1231 rtl::OUString(newStr, SAL_NO_ACQUIRE);
1233 @param[in] nLen the number of characters. Must be >= 0.
1235 @return pointer to the new string.
1237 @since LibreOffice 4.1
1239 SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_uString_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C();
1241 /** Allocate a new string containing space for a given number of characters.
1243 If len is greater than zero, the reference count of the new string will be
1244 1. The values of all characters are set to 0 and the length of the string
1245 is 0. This function does not handle out-of-memory conditions.
1247 @param newStr
1248 pointer to the new string. The pointed-to data must be null or a valid
1249 string.
1251 @param nLen
1252 the number of characters.
1254 SAL_DLLPUBLIC void SAL_CALL rtl_uString_new_WithLength(
1255 rtl_uString ** newStr, sal_Int32 nLen ) SAL_THROW_EXTERN_C();
1257 /** Allocate a new string that contains a copy of another string.
1259 If the length of value is greater than zero, the reference count of the
1260 new string will be 1. This function does not handle out-of-memory
1261 conditions.
1263 @param newStr
1264 pointer to the new string. The pointed-to data must be null or a valid
1265 string.
1267 @param value
1268 a valid string.
1270 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromString(
1271 rtl_uString ** newStr, const rtl_uString * value ) SAL_THROW_EXTERN_C();
1273 /** Allocate a new string that contains a copy of a character array.
1275 If the length of value is greater than zero, the reference count of the
1276 new string will be 1. This function does not handle out-of-memory
1277 conditions.
1279 @param newStr
1280 pointer to the new string. The pointed-to data must be null or a valid
1281 string.
1283 @param value
1284 a null-terminated character array.
1286 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromStr(
1287 rtl_uString ** newStr, const sal_Unicode * value ) SAL_THROW_EXTERN_C();
1289 /** Allocate a new string that contains a copy of a character array.
1291 If the length of value is greater than zero, the reference count of the
1292 new string will be 1. This function does not handle out-of-memory
1293 conditions.
1295 @param newStr
1296 pointer to the new string. The pointed-to data must be null or a valid
1297 string.
1299 @param value
1300 a character array. Need not be null-terminated, but must be at least as
1301 long as the specified len.
1303 @param len
1304 the length of the character array.
1306 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromStr_WithLength(
1307 rtl_uString ** newStr, const sal_Unicode * value, sal_Int32 len ) SAL_THROW_EXTERN_C();
1309 /** Allocate a new string that is a substring of this string.
1311 The substring begins at the specified beginIndex and contains count
1312 characters. Meaningless combinations such as negative beginIndex,
1313 or beginIndex + count greater than the length of the string have
1314 undefined behaviour.
1316 @param[out] newStr the specified substring.
1317 @param[in] from the String to take the substring from.
1318 @param[in] beginIndex the beginning index, inclusive.
1319 @param[in] count the number of characters.
1320 @return the specified substring.
1322 @since LibreOffice 4.0
1324 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromSubString(
1325 rtl_uString ** newStr, const rtl_uString * from,
1326 sal_Int32 beginIndex, sal_Int32 count ) SAL_THROW_EXTERN_C();
1328 /** Allocate a new string that contains a copy of a character array.
1330 If the length of value is greater than zero, the reference count of the
1331 new string will be 1. This function does not handle out-of-memory
1332 conditions.
1334 Since this function is optimized for performance, the ASCII character
1335 values are not converted in any way. The caller has to make sure that
1336 all ASCII characters are in the allowed range of 0 and 127, inclusive.
1338 @param newStr
1339 pointer to the new string. The pointed-to data must be null or a valid
1340 string.
1342 @param value
1343 a null-terminated ASCII character array.
1345 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromAscii(
1346 rtl_uString ** newStr, const sal_Char * value ) SAL_THROW_EXTERN_C();
1349 @internal
1350 @since LibreOffice 3.6
1352 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromLiteral(
1353 rtl_uString ** newStr, const sal_Char * value, sal_Int32 len,
1354 sal_Int32 allocExtra ) SAL_THROW_EXTERN_C();
1356 /** Allocate a new string from an array of Unicode code points.
1358 @param newString
1359 a non-null pointer to a (possibly null) rtl_uString pointer, which (if
1360 non-null) will have been passed to rtl_uString_release before the function
1361 returns. Upon return, points to the newly allocated string or to null if
1362 there was either an out-of-memory condition or the resulting number of
1363 UTF-16 code units would have been larger than SAL_MAX_INT32. The newly
1364 allocated string (if any) must ultimately be passed to rtl_uString_release.
1366 @param codePoints
1367 an array of at least codePointCount code points, which each must be in the
1368 range from 0 to 0x10FFFF, inclusive. May be null if codePointCount is zero.
1370 @param codePointCount
1371 the non-negative number of code points.
1373 @since UDK 3.2.7
1375 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromCodePoints(
1376 rtl_uString ** newString, sal_uInt32 const * codePoints,
1377 sal_Int32 codePointCount) SAL_THROW_EXTERN_C();
1379 /** Assign a new value to a string.
1381 First releases any value str might currently hold, then acquires
1382 rightValue.
1384 @param str
1385 pointer to the string. The pointed-to data must be null or a valid
1386 string.
1388 @param rightValue
1389 a valid string.
1391 SAL_DLLPUBLIC void SAL_CALL rtl_uString_assign(
1392 rtl_uString ** str, rtl_uString * rightValue ) SAL_THROW_EXTERN_C();
1394 /** Return the length of a string.
1396 The length is equal to the number of characters in the string.
1398 @param str
1399 a valid string.
1401 @return
1402 the length of the string.
1404 SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_uString_getLength(
1405 const rtl_uString * str ) SAL_THROW_EXTERN_C();
1407 /** Return a pointer to the underlying character array of a string.
1409 @param str
1410 a valid string.
1412 @return
1413 a pointer to the null-terminated character array.
1415 SAL_DLLPUBLIC sal_Unicode * SAL_CALL rtl_uString_getStr(
1416 rtl_uString * str ) SAL_THROW_EXTERN_C();
1418 /** Create a new string that is the concatenation of two other strings.
1420 The new string does not necessarily have a reference count of 1 (in cases
1421 where one of the two other strings is empty), so it must not be modified
1422 without checking the reference count. This function does not handle
1423 out-of-memory conditions.
1425 @param newStr
1426 pointer to the new string. The pointed-to data must be null or a valid
1427 string.
1429 @param left
1430 a valid string.
1432 @param right
1433 a valid string.
1435 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newConcat(
1436 rtl_uString ** newStr, rtl_uString * left, rtl_uString * right ) SAL_THROW_EXTERN_C();
1438 /** Create a new string that is the concatenation of two other strings.
1440 The new string does not necessarily have a reference count of 1 (in cases
1441 where the ASCII string is empty), so it must not be modified without
1442 checking the reference count.
1444 @param newString
1445 pointer to the new string. The pointed-to data must be null or a valid
1446 string.
1448 @param left
1449 a valid string.
1451 @param right must not be null and must point to memory of at least
1452 \p rightLength ASCII bytes
1454 @param rightLength the length of the \p right string; must be non-negative
1456 @since LibreOffice 5.1
1458 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newConcatAsciiL(
1459 rtl_uString ** newString, rtl_uString * left, char const * right,
1460 sal_Int32 rightLength);
1462 /** Create a new string that is the concatenation of two other strings.
1464 The new string does not necessarily have a reference count of 1 (in cases
1465 where the UTF-16 string is empty), so it must not be modified without
1466 checking the reference count.
1468 @param newString pointer to the new string. The pointed-to data must be null
1469 or a valid string.
1471 @param left a valid string.
1473 @param right must not be null and must point to memory of at least
1474 \p rightLength UTF-16 code units
1476 @param rightLength the length of the \p right string; must be non-negative
1478 @since LibreOffice 5.3
1480 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newConcatUtf16L(
1481 rtl_uString ** newString, rtl_uString * left, sal_Unicode const * right,
1482 sal_Int32 rightLength);
1484 /** Create a new string by replacing a substring of another string.
1486 The new string results from replacing a number of characters (count),
1487 starting at the specified position (index) in the original string (str),
1488 with some new substring (subStr). If subStr is null, than only a number
1489 of characters is deleted.
1491 The new string does not necessarily have a reference count of 1, so it
1492 must not be modified without checking the reference count. This function
1493 does not handle out-of-memory conditions.
1495 @param newStr
1496 pointer to the new string. The pointed-to data must be null or a valid
1497 string.
1499 @param str
1500 a valid string.
1502 @param idx
1503 the index into str at which to start replacement. Must be between 0 and
1504 the length of str, inclusive.
1506 @param count
1507 the number of characters to remove. Must not be negative, and the sum of
1508 index and count must not exceed the length of str.
1510 @param subStr
1511 either null or a valid string to be inserted.
1513 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceStrAt(
1514 rtl_uString ** newStr, rtl_uString * str, sal_Int32 idx, sal_Int32 count, rtl_uString * subStr ) SAL_THROW_EXTERN_C();
1516 /** Create a new string by replacing all occurrences of a single character
1517 within another string.
1519 The new string results from replacing all occurrences of oldChar in str
1520 with newChar.
1522 The new string does not necessarily have a reference count of 1 (in cases
1523 where oldChar does not occur in str), so it must not be modified without
1524 checking the reference count. This function does not handle out-of-memory
1525 conditions.
1527 @param newStr
1528 pointer to the new string. The pointed-to data must be null or a valid
1529 string.
1531 @param str
1532 a valid string.
1534 @param oldChar
1535 the old character.
1537 @param newChar
1538 the new character.
1540 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplace(
1541 rtl_uString ** newStr, rtl_uString * str, sal_Unicode oldChar, sal_Unicode newChar ) SAL_THROW_EXTERN_C();
1543 /** Create a new string by replacing the first occurrence of a given substring
1544 with another substring.
1546 @param[in, out] newStr pointer to the new string; must not be null; must
1547 point to null or a valid rtl_uString
1549 @param str pointer to the original string; must not be null
1551 @param from pointer to the substring to be replaced; must not be null
1553 @param to pointer to the replacing substring; must not be null
1555 @param[in,out] index pointer to a start index, must not be null; upon entry
1556 to the function its value is the index into the original string at which to
1557 start searching for the \p from substring, the value must be non-negative
1558 and not greater than the original string's length; upon exit from the
1559 function its value is the index into the original string at which the
1560 replacement took place or -1 if no replacement took place
1562 @since LibreOffice 3.6
1564 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirst(
1565 rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
1566 rtl_uString const * to, sal_Int32 * index) SAL_THROW_EXTERN_C();
1568 /** Create a new string by replacing the first occurrence of a given substring
1569 with another substring.
1571 @param[in, out] newStr pointer to the new string; must not be null; must
1572 point to null or a valid rtl_uString
1574 @param str pointer to the original string; must not be null
1576 @param from pointer to the substring to be replaced; must not be null and
1577 must point to memory of at least \p fromLength ASCII bytes
1579 @param fromLength the length of the \p from substring; must be non-negative
1581 @param to pointer to the replacing substring; must not be null
1583 @param[in,out] index pointer to a start index, must not be null; upon entry
1584 to the function its value is the index into the original string at which to
1585 start searching for the \p from substring, the value must be non-negative
1586 and not greater than the original string's length; upon exit from the
1587 function its value is the index into the original string at which the
1588 replacement took place or -1 if no replacement took place
1590 @since LibreOffice 3.6
1592 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstAsciiL(
1593 rtl_uString ** newStr, rtl_uString * str, char const * from,
1594 sal_Int32 fromLength, rtl_uString const * to, sal_Int32 * index)
1595 SAL_THROW_EXTERN_C();
1597 /** Create a new string by replacing the first occurrence of a given substring
1598 with another substring.
1600 @param[in, out] newStr pointer to the new string; must not be null; must
1601 point to null or a valid rtl_uString
1603 @param str pointer to the original string; must not be null
1605 @param from pointer to the substring to be replaced; must not be null
1607 @param to pointer to the replacing substring; must not be null and must
1608 point to memory of at least \p toLength ASCII bytes
1610 @param toLength the length of the \p to substring; must be non-negative
1612 @param[in,out] index pointer to a start index, must not be null; upon entry
1613 to the function its value is the index into the original string at which to
1614 start searching for the \p from substring, the value must be non-negative
1615 and not greater than the original string's length; upon exit from the
1616 function its value is the index into the original string at which the
1617 replacement took place or -1 if no replacement took place
1619 @since LibreOffice 5.1
1621 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstToAsciiL(
1622 rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
1623 char const * to, sal_Int32 toLength, sal_Int32 * index)
1624 SAL_THROW_EXTERN_C();
1626 /** Create a new string by replacing the first occurrence of a given substring
1627 with another substring.
1629 @param[in, out] newStr pointer to the new string; must not be null; must
1630 point to null or a valid rtl_uString
1632 @param str pointer to the original string; must not be null
1634 @param from pointer to the substring to be replaced; must not be null and
1635 must point to memory of at least \p fromLength ASCII bytes
1637 @param fromLength the length of the \p from substring; must be non-negative
1639 @param to pointer to the substring to be replaced; must not be null and
1640 must point to memory of at least \p toLength ASCII bytes
1642 @param toLength the length of the \p to substring; must be non-negative
1644 @param[in,out] index pointer to a start index, must not be null; upon entry
1645 to the function its value is the index into the original string at which to
1646 start searching for the \p from substring, the value must be non-negative
1647 and not greater than the original string's length; upon exit from the
1648 function its value is the index into the original string at which the
1649 replacement took place or -1 if no replacement took place
1651 @since LibreOffice 3.6
1653 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstAsciiLAsciiL(
1654 rtl_uString ** newStr, rtl_uString * str, char const * from,
1655 sal_Int32 fromLength, char const * to, sal_Int32 toLength,
1656 sal_Int32 * index) SAL_THROW_EXTERN_C();
1658 /** Create a new string by replacing the first occurrence of a given substring
1659 with another substring.
1661 @param[in, out] newStr pointer to the new string; must not be null; must
1662 point to null or a valid rtl_uString; upon return, points to the newly
1663 allocated string or to null if there was either an out-of-memory condition
1664 or the resulting number of UTF-16 code units would have been larger than
1665 SAL_MAX_INT32
1667 @param str pointer to the original string; must not be null
1669 @param from pointer to the substring to be replaced; must not be null and
1670 must point to memory of at least \p fromLength ASCII bytes
1672 @param fromLength the length of the \p from substring; must be non-negative
1674 @param to pointer to the substring to be replaced; must not be null and
1675 must point to memory of at least \p toLength UTF-16 code units
1677 @param toLength the length of the \p to substring; must be non-negative
1679 @param[in,out] index pointer to a start index, must not be null; upon entry
1680 to the function its value is the index into the original string at which to
1681 start searching for the \p from substring, the value must be non-negative
1682 and not greater than the original string's length; upon exit from the
1683 function its value is the index into the original string at which the
1684 replacement took place (or would have taken place if \p newStr points to
1685 null upon return) or -1 if no replacement took place
1687 @since LibreOffice 5.3
1689 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstAsciiLUtf16L(
1690 rtl_uString ** newStr, rtl_uString * str, char const * from,
1691 sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength,
1692 sal_Int32 * index) SAL_THROW_EXTERN_C();
1694 /** Create a new string by replacing the first occurrence of a given substring
1695 with another substring.
1697 @param[in, out] newStr pointer to the new string; must not be null; must
1698 point to null or a valid rtl_uString; upon return, points to the newly
1699 allocated string or to null if there was either an out-of-memory condition
1700 or the resulting number of UTF-16 code units would have been larger than
1701 SAL_MAX_INT32
1703 @param str pointer to the original string; must not be null
1705 @param from pointer to the substring to be replaced; must not be null and
1706 must point to memory of at least \p fromLength UTF-16 code units
1708 @param fromLength the length of the \p from substring; must be non-negative
1710 @param to pointer to the substring to be replaced; must not be null and
1711 must point to memory of at least \p toLength ASCII bytes
1713 @param toLength the length of the \p to substring; must be non-negative
1715 @param[in,out] index pointer to a start index, must not be null; upon entry
1716 to the function its value is the index into the original string at which to
1717 start searching for the \p from substring, the value must be non-negative
1718 and not greater than the original string's length; upon exit from the
1719 function its value is the index into the original string at which the
1720 replacement took place (or would have taken place if \p newStr points to
1721 null upon return) or -1 if no replacement took place
1723 @since LibreOffice 5.3
1725 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstUtf16LAsciiL(
1726 rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
1727 sal_Int32 fromLength, char const * to, sal_Int32 toLength,
1728 sal_Int32 * index) SAL_THROW_EXTERN_C();
1730 /** Create a new string by replacing the first occurrence of a given substring
1731 with another substring.
1733 @param[in, out] newStr pointer to the new string; must not be null; must
1734 point to null or a valid rtl_uString; upon return, points to the newly
1735 allocated string or to null if there was either an out-of-memory condition
1736 or the resulting number of UTF-16 code units would have been larger than
1737 SAL_MAX_INT32
1739 @param str pointer to the original string; must not be null
1741 @param from pointer to the substring to be replaced; must not be null and
1742 must point to memory of at least \p fromLength UTF-16 code units
1744 @param fromLength the length of the \p from substring; must be non-negative
1746 @param to pointer to the substring to be replaced; must not be null and
1747 must point to memory of at least \p toLength UTF-16 code units
1749 @param toLength the length of the \p to substring; must be non-negative
1751 @param[in,out] index pointer to a start index, must not be null; upon entry
1752 to the function its value is the index into the original string at which to
1753 start searching for the \p from substring, the value must be non-negative
1754 and not greater than the original string's length; upon exit from the
1755 function its value is the index into the original string at which the
1756 replacement took place (or would have taken place if \p newStr points to
1757 null upon return) or -1 if no replacement took place
1759 @since LibreOffice 5.3
1761 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstUtf16LUtf16L(
1762 rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
1763 sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength,
1764 sal_Int32 * index) SAL_THROW_EXTERN_C();
1766 /** Create a new string by replacing all occurrences of a given substring with
1767 another substring.
1769 Replacing subsequent occurrences picks up only after a given replacement.
1770 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1772 @param[in, out] newStr pointer to the new string; must not be null; must
1773 point to null or a valid rtl_uString
1775 @param str pointer to the original string; must not be null
1777 @param from pointer to the substring to be replaced; must not be null
1779 @param to pointer to the replacing substring; must not be null
1781 @since LibreOffice 3.6
1783 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAll(
1784 rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
1785 rtl_uString const * to) SAL_THROW_EXTERN_C();
1787 /** Create a new string by replacing all occurrences of a given substring with
1788 another substring.
1790 Replacing subsequent occurrences picks up only after a given replacement.
1791 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1793 @param[in, out] newStr pointer to the new string; must not be null; must
1794 point to null or a valid rtl_uString
1796 @param str pointer to the original string; must not be null
1798 @param from pointer to the substring to be replaced; must not be null
1800 @param to pointer to the replacing substring; must not be null
1802 @param fromIndex the position in the string where we will begin searching
1804 @since LibreOffice 4.0
1806 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllFromIndex(
1807 rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
1808 rtl_uString const * to, sal_Int32 fromIndex) SAL_THROW_EXTERN_C();
1810 /** Create a new string by replacing all occurrences of a given substring with
1811 another substring.
1813 Replacing subsequent occurrences picks up only after a given replacement.
1814 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1816 @param[in, out] newStr pointer to the new string; must not be null; must
1817 point to null or a valid rtl_uString
1819 @param str pointer to the original string; must not be null
1821 @param from pointer to the substring to be replaced; must not be null and
1822 must point to memory of at least \p fromLength ASCII bytes
1824 @param fromLength the length of the \p from substring; must be non-negative
1826 @param to pointer to the replacing substring; must not be null
1828 @since LibreOffice 3.6
1830 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllAsciiL(
1831 rtl_uString ** newStr, rtl_uString * str, char const * from,
1832 sal_Int32 fromLength, rtl_uString const * to) SAL_THROW_EXTERN_C();
1834 /** Create a new string by replacing all occurrences of a given substring with
1835 another substring.
1837 Replacing subsequent occurrences picks up only after a given replacement.
1838 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1840 @param[in, out] newStr pointer to the new string; must not be null; must
1841 point to null or a valid rtl_uString
1843 @param str pointer to the original string; must not be null
1845 @param from pointer to the substring to be replaced; must not be null
1847 @param to pointer to the replacing substring; must not be null and must
1848 point to memory of at least \p toLength ASCII bytes
1850 @param toLength the length of the \p to substring; must be non-negative
1852 @since LibreOffice 5.1
1854 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllToAsciiL(
1855 rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from,
1856 char const * to, sal_Int32 toLength) SAL_THROW_EXTERN_C();
1858 /** Create a new string by replacing all occurrences of a given substring with
1859 another substring.
1861 Replacing subsequent occurrences picks up only after a given replacement.
1862 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1864 @param[in, out] newStr pointer to the new string; must not be null; must
1865 point to null or a valid rtl_uString
1867 @param str pointer to the original string; must not be null
1869 @param from pointer to the substring to be replaced; must not be null and
1870 must point to memory of at least \p fromLength ASCII bytes
1872 @param fromLength the length of the \p from substring; must be non-negative
1874 @param to pointer to the substring to be replaced; must not be null and
1875 must point to memory of at least \p toLength ASCII bytes
1877 @param toLength the length of the \p to substring; must be non-negative
1879 @since LibreOffice 3.6
1881 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllAsciiLAsciiL(
1882 rtl_uString ** newStr, rtl_uString * str, char const * from,
1883 sal_Int32 fromLength, char const * to, sal_Int32 toLength)
1884 SAL_THROW_EXTERN_C();
1886 /** Create a new string by replacing all occurrences of a given substring with
1887 another substring.
1889 Replacing subsequent occurrences picks up only after a given replacement.
1890 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1892 @param[in, out] newStr pointer to the new string; must not be null; must
1893 point to null or a valid rtl_uString; upon return, points to the newly
1894 allocated string or to null if there was either an out-of-memory condition
1895 or the resulting number of UTF-16 code units would have been larger than
1896 SAL_MAX_INT32
1898 @param str pointer to the original string; must not be null
1900 @param from pointer to the substring to be replaced; must not be null and
1901 must point to memory of at least \p fromLength ASCII bytes
1903 @param fromLength the length of the \p from substring; must be non-negative
1905 @param to pointer to the substring to be replaced; must not be null and
1906 must point to memory of at least \p toLength UTF-16 code units
1908 @param toLength the length of the \p to substring; must be non-negative
1910 @since LibreOffice 3.6
1912 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllAsciiLUtf16L(
1913 rtl_uString ** newStr, rtl_uString * str, char const * from,
1914 sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength)
1915 SAL_THROW_EXTERN_C();
1917 /** Create a new string by replacing all occurrences of a given substring with
1918 another substring.
1920 Replacing subsequent occurrences picks up only after a given replacement.
1921 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1923 @param[in, out] newStr pointer to the new string; must not be null; must
1924 point to null or a valid rtl_uString; upon return, points to the newly
1925 allocated string or to null if there was either an out-of-memory condition
1926 or the resulting number of UTF-16 code units would have been larger than
1927 SAL_MAX_INT32
1929 @param str pointer to the original string; must not be null
1931 @param from pointer to the substring to be replaced; must not be null and
1932 must point to memory of at least \p fromLength UTF-16 code units
1934 @param fromLength the length of the \p from substring; must be non-negative
1936 @param to pointer to the substring to be replaced; must not be null and
1937 must point to memory of at least \p toLength ASCII bytes
1939 @param toLength the length of the \p to substring; must be non-negative
1941 @since LibreOffice 3.6
1943 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllUtf16LAsciiL(
1944 rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
1945 sal_Int32 fromLength, char const * to, sal_Int32 toLength)
1946 SAL_THROW_EXTERN_C();
1948 /** Create a new string by replacing all occurrences of a given substring with
1949 another substring.
1951 Replacing subsequent occurrences picks up only after a given replacement.
1952 That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx".
1954 @param[in, out] newStr pointer to the new string; must not be null; must
1955 point to null or a valid rtl_uString; upon return, points to the newly
1956 allocated string or to null if there was either an out-of-memory condition
1957 or the resulting number of UTF-16 code units would have been larger than
1958 SAL_MAX_INT32
1960 @param str pointer to the original string; must not be null
1962 @param from pointer to the substring to be replaced; must not be null and
1963 must point to memory of at least \p fromLength UTF-16 code units
1965 @param fromLength the length of the \p from substring; must be non-negative
1967 @param to pointer to the substring to be replaced; must not be null and
1968 must point to memory of at least \p toLength UTF-16 code units
1970 @param toLength the length of the \p to substring; must be non-negative
1972 @since LibreOffice 3.6
1974 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllUtf16LUtf16L(
1975 rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from,
1976 sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength)
1977 SAL_THROW_EXTERN_C();
1979 /** Create a new string by converting all ASCII uppercase letters to lowercase
1980 within another string.
1982 The new string results from replacing all characters with values between
1983 65 and 90 (ASCII A--Z) by values between 97 and 122 (ASCII a--z).
1985 This function cannot be used for language-specific conversion. The new
1986 string does not necessarily have a reference count of 1 (in cases where
1987 no characters need to be converted), so it must not be modified without
1988 checking the reference count. This function does not handle out-of-memory
1989 conditions.
1991 @param newStr
1992 pointer to the new string. The pointed-to data must be null or a valid
1993 string.
1995 @param str
1996 a valid string.
1998 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newToAsciiLowerCase(
1999 rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C();
2001 /** Create a new string by converting all ASCII lowercase letters to uppercase
2002 within another string.
2004 The new string results from replacing all characters with values between
2005 97 and 122 (ASCII a--z) by values between 65 and 90 (ASCII A--Z).
2007 This function cannot be used for language-specific conversion. The new
2008 string does not necessarily have a reference count of 1 (in cases where
2009 no characters need to be converted), so it must not be modified without
2010 checking the reference count. This function does not handle out-of-memory
2011 conditions.
2013 @param newStr
2014 pointer to the new string. The pointed-to data must be null or a valid
2015 string.
2017 @param str
2018 a valid string.
2020 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newToAsciiUpperCase(
2021 rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C();
2023 /** Create a new string by removing white space from both ends of another
2024 string.
2026 The new string results from removing all characters with values less than
2027 or equal to 32 (the space character), and also Unicode General Punctuation
2028 area Space and some Control characters, form both ends of str (see
2029 rtl_ImplIsWhitespace).
2031 This function cannot be used for language-specific conversion. The new
2032 string does not necessarily have a reference count of 1 (in cases where
2033 no characters need to be removed), so it must not be modified without
2034 checking the reference count. This function does not handle out-of-memory
2035 conditions.
2037 @param newStr
2038 pointer to the new string. The pointed-to data must be null or a valid
2039 string.
2041 @param str
2042 a valid string.
2044 SAL_DLLPUBLIC void SAL_CALL rtl_uString_newTrim(
2045 rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C();
2047 /** Create a new string by extracting a single token from another string.
2049 Starting at index, the token's next token is searched for. If there is no
2050 such token, the result is an empty string. Otherwise, all characters from
2051 the start of that token and up to, but not including the next occurrence
2052 of cTok make up the resulting token. The return value is the position of
2053 the next token, or -1 if no more tokens follow.
2055 Example code could look like
2056 rtl_uString * pToken = NULL;
2057 sal_Int32 nIndex = 0;
2061 nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex);
2064 while (nIndex >= 0);
2066 The new string does not necessarily have a reference count of 1, so it
2067 must not be modified without checking the reference count. This function
2068 does not handle out-of-memory conditions.
2070 @param newStr
2071 pointer to the new string. The pointed-to data must be null or a valid
2072 string. If either token or index is negative, an empty token is stored in
2073 newStr (and -1 is returned).
2075 @param str
2076 a valid string.
2078 @param token
2079 the number of the token to return, starting at index.
2081 @param cTok
2082 the character that separates the tokens.
2084 @param idx
2085 the position at which searching for the token starts. Must not be greater
2086 than the length of str.
2088 @return
2089 the index of the next token, or -1 if no more tokens follow.
2091 SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_uString_getToken(
2092 rtl_uString ** newStr , rtl_uString * str, sal_Int32 token, sal_Unicode cTok, sal_Int32 idx ) SAL_THROW_EXTERN_C();
2094 /* ======================================================================= */
2096 /** Supply an ASCII string literal together with its length and text encoding.
2098 This macro can be used to compute (some of) the arguments in function calls
2099 like rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo")).
2101 @param constAsciiStr
2102 must be an expression of type "(possibly cv-qualified reference to) array of
2103 (possibly cv-qualified) char." Each element of the referenced array must
2104 represent an ASCII value in the range 0x00--0x7F. The last element of the
2105 referenced array is not considered part of the represented ASCII string, and
2106 its value should be 0x00. Depending on where this macro is used, the nature
2107 of the supplied expression might be further restricted.
2109 // The &foo[0] trick is intentional, it makes sure the type is char* or const char*
2110 // (plain cast to const char* would not work with non-const char foo[]="a", which seems to be allowed).
2111 // This is to avoid mistaken use with functions that accept string literals
2112 // (i.e. const char (&)[N]) where usage of this macro otherwise could match
2113 // the argument and a following int argument with a default value (e.g. OUString::match()).
2114 #define RTL_CONSTASCII_USTRINGPARAM( constAsciiStr ) (&(constAsciiStr)[0]), \
2115 ((sal_Int32)(SAL_N_ELEMENTS(constAsciiStr)-1)), RTL_TEXTENCODING_ASCII_US
2117 /* ======================================================================= */
2119 /* predefined constants for String-Conversion */
2120 #define OSTRING_TO_OUSTRING_CVTFLAGS (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE |\
2121 RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT |\
2122 RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT)
2124 /* ----------------------------------------------------------------------- */
2126 /** Create a new Unicode string by converting a byte string, using a specific
2127 text encoding.
2129 The lengths of the byte string and the Unicode string may differ (e.g.,
2130 for double-byte encodings, UTF-7, UTF-8).
2132 If the length of the byte string is greater than zero, the reference count
2133 of the new string will be 1.
2135 If an out-of-memory condition occurs, newStr will point to a null pointer
2136 upon return.
2138 @param newStr
2139 pointer to the new string. The pointed-to data must be null or a valid
2140 string.
2142 @param str
2143 a byte character array. Need not be null-terminated, but must be at
2144 least as long as the specified len.
2146 @param len
2147 the length of the byte character array.
2149 @param encoding
2150 the text encoding to use for conversion.
2152 @param convertFlags
2153 flags which control the conversion. Either use
2154 OSTRING_TO_OUSTRING_CVTFLAGS, or see
2155 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more
2156 details.
2158 SAL_DLLPUBLIC void SAL_CALL rtl_string2UString(
2159 rtl_uString ** newStr, const sal_Char * str, sal_Int32 len, rtl_TextEncoding encoding, sal_uInt32 convertFlags ) SAL_THROW_EXTERN_C();
2161 /* ======================================================================= */
2162 /* Interning methods */
2164 /** Return a canonical representation for a string.
2166 A pool of strings, initially empty is maintained privately
2167 by the string class. On invocation, if present in the pool
2168 the original string will be returned. Otherwise this string,
2169 or a copy thereof will be added to the pool and returned.
2171 @param newStr
2172 pointer to the new string. The pointed-to data must be null or a valid
2173 string.
2175 If an out-of-memory condition occurs, newStr will point to a null pointer
2176 upon return.
2178 @param str
2179 pointer to the string to be interned.
2181 @since UDK 3.2.7
2183 SAL_DLLPUBLIC void SAL_CALL rtl_uString_intern(
2184 rtl_uString ** newStr, rtl_uString * str) SAL_THROW_EXTERN_C();
2186 /** Return a canonical representation for a string.
2188 A pool of strings, initially empty is maintained privately
2189 by the string class. On invocation, if present in the pool
2190 the original string will be returned. Otherwise this string,
2191 or a copy thereof will be added to the pool and returned.
2193 @param newStr
2194 pointer to the new string. The pointed-to data must be null or a valid
2195 string.
2197 If an out-of-memory condition occurs, newStr will point to a null pointer
2198 upon return.
2200 @param str
2201 a byte character array. Need not be null-terminated, but must be at
2202 least as long as the specified len.
2204 @param len
2205 the length of the byte character array.
2207 @param encoding
2208 the text encoding to use for conversion.
2210 @param convertFlags
2211 flags which control the conversion. Either use
2212 OSTRING_TO_OUSTRING_CVTFLAGS, or see
2213 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more
2214 details.
2216 @param pInfo
2217 pointer to return conversion status in, or NULL.
2219 @since UDK 3.2.7
2221 SAL_DLLPUBLIC void SAL_CALL rtl_uString_internConvert(
2222 rtl_uString ** newStr,
2223 const sal_Char * str,
2224 sal_Int32 len,
2225 rtl_TextEncoding encoding,
2226 sal_uInt32 convertFlags,
2227 sal_uInt32 *pInfo) SAL_THROW_EXTERN_C();
2229 /** Iterate through a string based on code points instead of UTF-16 code units.
2231 See Chapter 3 of The Unicode Standard 5.0 (Addison--Wesley, 2006) for
2232 definitions of the various terms used in this description.
2234 The given string is interpreted as a sequence of zero or more UTF-16 code
2235 units. For each index into this sequence (from zero to one less than the
2236 length of the sequence, inclusive), a code point represented starting at the
2237 given index is computed as follows:
2239 - If the UTF-16 code unit addressed by the index constitutes a well-formed
2240 UTF-16 code unit sequence, the computed code point is the scalar value
2241 encoded by that UTF-16 code unit sequence.
2243 - Otherwise, if the index is at least two UTF-16 code units away from the
2244 end of the sequence, and the sequence of two UTF-16 code units addressed by
2245 the index constitutes a well-formed UTF-16 code unit sequence, the computed
2246 code point is the scalar value encoded by that UTF-16 code unit sequence.
2248 - Otherwise, the computed code point is the UTF-16 code unit addressed by
2249 the index. (This last case catches unmatched surrogates as well as indices
2250 pointing into the middle of surrogate pairs.)
2252 @param string
2253 pointer to a valid string; must not be null.
2255 @param indexUtf16
2256 pointer to a UTF-16 based index into the given string; must not be null. On
2257 entry, the index must be in the range from zero to the length of the string
2258 (in UTF-16 code units), inclusive. Upon successful return, the index will
2259 be updated to address the UTF-16 code unit that is the given
2260 incrementCodePoints away from the initial index.
2262 @param incrementCodePoints
2263 the number of code points to move the given *indexUtf16. If non-negative,
2264 moving is done after determining the code point at the index. If negative,
2265 moving is done before determining the code point at the (then updated)
2266 index. The value must be such that the resulting UTF-16 based index is in
2267 the range from zero to the length of the string (in UTF-16 code units),
2268 inclusive.
2270 @return
2271 the code point (an integer in the range from 0 to 0x10FFFF, inclusive) that
2272 is represented within the string starting at the index computed as follows:
2273 If incrementCodePoints is non-negative, the index is the initial value of
2274 *indexUtf16; if incrementCodePoints is negative, the index is the updated
2275 value of *indexUtf16. In either case, the computed index must be in the
2276 range from zero to one less than the length of the string (in UTF-16 code
2277 units), inclusive.
2279 @since UDK 3.2.7
2281 SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_uString_iterateCodePoints(
2282 rtl_uString const * string, sal_Int32 * indexUtf16,
2283 sal_Int32 incrementCodePoints);
2285 /** Converts a byte string to a Unicode string, signalling failure.
2287 @param target
2288 An out parameter receiving the converted string. Must not be null itself,
2289 and must contain either null or a pointer to a valid rtl_uString; the
2290 contents are unspecified if conversion fails (rtl_convertStringToUString
2291 returns false).
2293 @param source
2294 The byte string. May only be null if length is zero.
2296 @param length
2297 The length of the byte string. Must be non-negative.
2299 @param encoding
2300 The text encoding to convert from. Must be an octet encoding (i.e.,
2301 rtl_isOctetTextEncoding(encoding) must return true).
2303 @param flags
2304 A combination of RTL_TEXTTOUNICODE_FLAGS that detail how to do the
2305 conversion (see rtl_convertTextToUnicode). RTL_TEXTTOUNICODE_FLAGS_FLUSH
2306 need not be included, it is implicitly assumed. Typical uses are either
2307 RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
2308 RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
2309 RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR (fail if a byte or multi-byte sequence
2310 cannot be converted from the source encoding) or
2311 OSTRING_TO_OUSTRING_CVTFLAGS (make a best efforts conversion).
2313 @return
2314 True if the conversion succeeded, false otherwise.
2316 @since UDK 3.2.9
2318 SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_convertStringToUString(
2319 rtl_uString ** target, char const * source, sal_Int32 length,
2320 rtl_TextEncoding encoding, sal_uInt32 flags) SAL_THROW_EXTERN_C();
2322 /** Ensure a string has enough space for a given number of characters.
2324 If the given string is large enough and has refcount of 1, it is not altered in any way.
2325 Otherwise it is replaced by a copy that has enough space for the given number of characters,
2326 data from the source string is copied to the beginning of it, the content of the remaining
2327 capacity undefined, the string has refcount of 1, and refcount of the original string is decreased.
2329 @param str
2330 pointer to the string. The pointed-to data must be a valid string.
2332 @param size
2333 the number of characters
2335 @since LibreOffice 4.1
2336 @internal
2338 SAL_DLLPUBLIC void SAL_CALL rtl_uString_ensureCapacity( rtl_uString ** str, sal_Int32 size ) SAL_THROW_EXTERN_C();
2340 #ifdef __cplusplus
2342 #endif
2344 #endif // INCLUDED_RTL_USTRING_H
2346 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */