1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _RTL_USTRING_HXX_ 29 #define _RTL_USTRING_HXX_ 30 31 #ifdef __cplusplus 32 33 #ifndef _RTL_DIAGNOSE_H_ 34 #include "osl/diagnose.h" 35 #endif 36 #include <rtl/ustring.h> 37 #include <rtl/string.hxx> 38 #include <rtl/memory.h> 39 40 #if defined EXCEPTIONS_OFF 41 #include <stdlib.h> 42 #else 43 #include <new> 44 #endif 45 46 namespace rtl 47 { 48 /* ======================================================================= */ 49 50 /** 51 This String class provide base functionality for C++ like Unicode 52 character array handling. The advantage of this class is, that it 53 handle all the memory managament for you - and it do it 54 more efficient. If you assign a string to another string, the 55 data of both strings are shared (without any copy operation or 56 memory allocation) as long as you do not change the string. This class 57 stores also the length of the string, so that many operations are 58 faster as the C-str-functions. 59 60 This class provide only readonly string handling. So you could create 61 a string and you could only query the content from this string. 62 It provide also functionality to change the string, but this results 63 in every case in a new string instance (in the most cases with an 64 memory allocation). You don't have functionality to change the 65 content of the string. If you want change the string content, than 66 you should us the OStringBuffer class, which provide these 67 functionality and avoid to much memory allocation. 68 69 The design of this class is similar to the string classes in Java 70 and so more people should have fewer understanding problems when they 71 use this class. 72 */ 73 74 class OUString 75 { 76 public: 77 /** @internal */ 78 rtl_uString * pData; 79 80 private: 81 /** @internal */ 82 class DO_NOT_ACQUIRE{}; 83 84 /** @internal */ 85 OUString( rtl_uString * value, DO_NOT_ACQUIRE * ) 86 { 87 pData = value; 88 } 89 90 public: 91 /** 92 New string containing no characters. 93 */ 94 OUString() SAL_THROW(()) 95 { 96 pData = 0; 97 rtl_uString_new( &pData ); 98 } 99 100 /** 101 New string from OUString. 102 103 @param str a OUString. 104 */ 105 OUString( const OUString & str ) SAL_THROW(()) 106 { 107 pData = str.pData; 108 rtl_uString_acquire( pData ); 109 } 110 111 /** 112 New string from OUString data. 113 114 @param str a OUString data. 115 */ 116 OUString( rtl_uString * str ) SAL_THROW(()) 117 { 118 pData = str; 119 rtl_uString_acquire( pData ); 120 } 121 /** New OUString from OUString data without acquiring it. Takeover of ownership. 122 123 @param str 124 OUString data 125 @param dummy 126 SAL_NO_ACQUIRE to distinguish from other ctors 127 */ 128 inline OUString( rtl_uString * str, __sal_NoAcquire ) SAL_THROW( () ) 129 { pData = str; } 130 131 132 /** 133 New string from a single Unicode character. 134 135 @param value a Unicode character. 136 */ 137 explicit OUString( sal_Unicode value ) SAL_THROW(()) 138 : pData (0) 139 { 140 rtl_uString_newFromStr_WithLength( &pData, &value, 1 ); 141 } 142 143 /** 144 New string from a Unicode character buffer array. 145 146 @param value a NULL-terminated Unicode character array. 147 */ 148 OUString( const sal_Unicode * value ) SAL_THROW(()) 149 { 150 pData = 0; 151 rtl_uString_newFromStr( &pData, value ); 152 } 153 154 /** 155 New string from a Uniocde character buffer array. 156 157 @param value a Unicode character array. 158 @param length the number of character which should be copied. 159 The character array length must be greater or 160 equal than this value. 161 */ 162 OUString( const sal_Unicode * value, sal_Int32 length ) SAL_THROW(()) 163 { 164 pData = 0; 165 rtl_uString_newFromStr_WithLength( &pData, value, length ); 166 } 167 168 /** 169 New string from a 8-Bit character buffer array. 170 171 @param value a 8-Bit character array. 172 @param length the number of character which should be converted. 173 The 8-Bit character array length must be 174 greater or equal than this value. 175 @param encoding the text encoding from which the 8-Bit character 176 sequence should be converted. 177 @param convertFlags flags which controls the conversion. 178 see RTL_TEXTTOUNICODE_FLAGS_... 179 180 @exception std::bad_alloc is thrown if an out-of-memory condition occurs 181 */ 182 OUString( const sal_Char * value, sal_Int32 length, 183 rtl_TextEncoding encoding, 184 sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS ) 185 { 186 pData = 0; 187 rtl_string2UString( &pData, value, length, encoding, convertFlags ); 188 #if defined EXCEPTIONS_OFF 189 OSL_ASSERT(pData != NULL); 190 #else 191 if (pData == 0) { 192 throw std::bad_alloc(); 193 } 194 #endif 195 } 196 197 /** Create a new string from an array of Unicode code points. 198 199 @param codePoints 200 an array of at least codePointCount code points, which each must be in 201 the range from 0 to 0x10FFFF, inclusive. May be null if codePointCount 202 is zero. 203 204 @param codePointCount 205 the non-negative number of code points. 206 207 @exception std::bad_alloc 208 is thrown if either an out-of-memory condition occurs or the resulting 209 number of UTF-16 code units would have been larger than SAL_MAX_INT32. 210 211 @since UDK 3.2.7 212 */ 213 inline explicit OUString( 214 sal_uInt32 const * codePoints, sal_Int32 codePointCount): 215 pData(NULL) 216 { 217 rtl_uString_newFromCodePoints(&pData, codePoints, codePointCount); 218 if (pData == NULL) { 219 #if defined EXCEPTIONS_OFF 220 abort(); 221 #else 222 throw std::bad_alloc(); 223 #endif 224 } 225 } 226 227 /** 228 Release the string data. 229 */ 230 ~OUString() SAL_THROW(()) 231 { 232 rtl_uString_release( pData ); 233 } 234 235 /** Provides an OUString const & passing a storage pointer of an 236 rtl_uString * handle. 237 It is more convenient to use C++ OUString member functions when dealing 238 with rtl_uString * handles. Using this function avoids unnecessary 239 acquire()/release() calls for a temporary OUString object. 240 241 @param ppHandle 242 pointer to storage 243 @return 244 OUString const & based on given storage 245 */ 246 static inline OUString const & unacquired( rtl_uString * const * ppHandle ) 247 { return * reinterpret_cast< OUString const * >( ppHandle ); } 248 249 /** 250 Assign a new string. 251 252 @param str a OUString. 253 */ 254 OUString & operator=( const OUString & str ) SAL_THROW(()) 255 { 256 rtl_uString_assign( &pData, str.pData ); 257 return *this; 258 } 259 260 /** 261 Append a string to this string. 262 263 @param str a OUString. 264 */ 265 OUString & operator+=( const OUString & str ) SAL_THROW(()) 266 { 267 rtl_uString_newConcat( &pData, pData, str.pData ); 268 return *this; 269 } 270 271 /** 272 Returns the length of this string. 273 274 The length is equal to the number of Unicode characters in this string. 275 276 @return the length of the sequence of characters represented by this 277 object. 278 */ 279 sal_Int32 getLength() const SAL_THROW(()) { return pData->length; } 280 281 /** 282 Returns a pointer to the Unicode character buffer from this string. 283 284 It isn't necessarily NULL terminated. 285 286 @return a pointer to the Unicode characters buffer from this object. 287 */ 288 operator const sal_Unicode *() const SAL_THROW(()) { return pData->buffer; } 289 290 /** 291 Returns a pointer to the Unicode character buffer from this string. 292 293 It isn't necessarily NULL terminated. 294 295 @return a pointer to the Unicode characters buffer from this object. 296 */ 297 const sal_Unicode * getStr() const SAL_THROW(()) { return pData->buffer; } 298 299 /** 300 Compares two strings. 301 302 The comparison is based on the numeric value of each character in 303 the strings and return a value indicating their relationship. 304 This function can't be used for language specific sorting. 305 306 @param str the object to be compared. 307 @return 0 - if both strings are equal 308 < 0 - if this string is less than the string argument 309 > 0 - if this string is greater than the string argument 310 */ 311 sal_Int32 compareTo( const OUString & str ) const SAL_THROW(()) 312 { 313 return rtl_ustr_compare_WithLength( pData->buffer, pData->length, 314 str.pData->buffer, str.pData->length ); 315 } 316 317 /** 318 Compares two strings with an maximum count of characters. 319 320 The comparison is based on the numeric value of each character in 321 the strings and return a value indicating their relationship. 322 This function can't be used for language specific sorting. 323 324 @param str the object to be compared. 325 @param maxLength the maximum count of characters to be compared. 326 @return 0 - if both strings are equal 327 < 0 - if this string is less than the string argument 328 > 0 - if this string is greater than the string argument 329 */ 330 sal_Int32 compareTo( const OUString & str, sal_Int32 maxLength ) const SAL_THROW(()) 331 { 332 return rtl_ustr_shortenedCompare_WithLength( pData->buffer, pData->length, 333 str.pData->buffer, str.pData->length, maxLength ); 334 } 335 336 /** 337 Compares two strings in reverse order. 338 339 The comparison is based on the numeric value of each character in 340 the strings and return a value indicating their relationship. 341 This function can't be used for language specific sorting. 342 343 @param str the object to be compared. 344 @return 0 - if both strings are equal 345 < 0 - if this string is less than the string argument 346 > 0 - if this string is greater than the string argument 347 */ 348 sal_Int32 reverseCompareTo( const OUString & str ) const SAL_THROW(()) 349 { 350 return rtl_ustr_reverseCompare_WithLength( pData->buffer, pData->length, 351 str.pData->buffer, str.pData->length ); 352 } 353 354 /** 355 Perform a comparison of two strings. 356 357 The result is true if and only if second string 358 represents the same sequence of characters as the first string. 359 This function can't be used for language specific comparison. 360 361 @param str the object to be compared. 362 @return sal_True if the strings are equal; 363 sal_False, otherwise. 364 */ 365 sal_Bool equals( const OUString & str ) const SAL_THROW(()) 366 { 367 if ( pData->length != str.pData->length ) 368 return sal_False; 369 if ( pData == str.pData ) 370 return sal_True; 371 return rtl_ustr_reverseCompare_WithLength( pData->buffer, pData->length, 372 str.pData->buffer, str.pData->length ) == 0; 373 } 374 375 /** 376 Perform a ASCII lowercase comparison of two strings. 377 378 The result is true if and only if second string 379 represents the same sequence of characters as the first string, 380 ignoring the case. 381 Character values between 65 and 90 (ASCII A-Z) are interpreted as 382 values between 97 and 122 (ASCII a-z). 383 This function can't be used for language specific comparison. 384 385 @param str the object to be compared. 386 @return sal_True if the strings are equal; 387 sal_False, otherwise. 388 */ 389 sal_Bool equalsIgnoreAsciiCase( const OUString & str ) const SAL_THROW(()) 390 { 391 if ( pData->length != str.pData->length ) 392 return sal_False; 393 if ( pData == str.pData ) 394 return sal_True; 395 return rtl_ustr_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, 396 str.pData->buffer, str.pData->length ) == 0; 397 } 398 399 /** 400 Match against a substring appearing in this string. 401 402 The result is true if and only if the second string appears as a substring 403 of this string, at the given position. 404 This function can't be used for language specific comparison. 405 406 @param str the object (substring) to be compared. 407 @param fromIndex the index to start the comparion from. 408 The index must be greater or equal than 0 409 and less or equal as the string length. 410 @return sal_True if str match with the characters in the string 411 at the given position; 412 sal_False, otherwise. 413 */ 414 sal_Bool match( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 415 { 416 return rtl_ustr_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, 417 str.pData->buffer, str.pData->length, str.pData->length ) == 0; 418 } 419 420 /** 421 Match against a substring appearing in this string, ignoring the case of 422 ASCII letters. 423 424 The result is true if and only if the second string appears as a substring 425 of this string, at the given position. 426 Character values between 65 and 90 (ASCII A-Z) are interpreted as 427 values between 97 and 122 (ASCII a-z). 428 This function can't be used for language specific comparison. 429 430 @param str the object (substring) to be compared. 431 @param fromIndex the index to start the comparion from. 432 The index must be greater or equal than 0 433 and less or equal as the string length. 434 @return sal_True if str match with the characters in the string 435 at the given position; 436 sal_False, otherwise. 437 */ 438 sal_Bool matchIgnoreAsciiCase( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 439 { 440 return rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, 441 str.pData->buffer, str.pData->length, 442 str.pData->length ) == 0; 443 } 444 445 /** 446 Compares two strings. 447 448 The comparison is based on the numeric value of each character in 449 the strings and return a value indicating their relationship. 450 Since this method is optimized for performance, the ASCII character 451 values are not converted in any way. The caller has to make sure that 452 all ASCII characters are in the allowed range between 0 and 453 127. The ASCII string must be NULL-terminated. 454 This function can't be used for language specific sorting. 455 456 @param asciiStr the 8-Bit ASCII character string to be compared. 457 @return 0 - if both strings are equal 458 < 0 - if this string is less than the string argument 459 > 0 - if this string is greater than the string argument 460 */ 461 sal_Int32 compareToAscii( const sal_Char* asciiStr ) const SAL_THROW(()) 462 { 463 return rtl_ustr_ascii_compare_WithLength( pData->buffer, pData->length, asciiStr ); 464 } 465 466 /** 467 Compares two strings with an maximum count of characters. 468 469 The comparison is based on the numeric value of each character in 470 the strings and return a value indicating their relationship. 471 Since this method is optimized for performance, the ASCII character 472 values are not converted in any way. The caller has to make sure that 473 all ASCII characters are in the allowed range between 0 and 474 127. The ASCII string must be NULL-terminated. 475 This function can't be used for language specific sorting. 476 477 @param asciiStr the 8-Bit ASCII character string to be compared. 478 @param maxLength the maximum count of characters to be compared. 479 @return 0 - if both strings are equal 480 < 0 - if this string is less than the string argument 481 > 0 - if this string is greater than the string argument 482 */ 483 sal_Int32 compareToAscii( const sal_Char * asciiStr, sal_Int32 maxLength ) const SAL_THROW(()) 484 { 485 return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer, pData->length, 486 asciiStr, maxLength ); 487 } 488 489 /** 490 Compares two strings in reverse order. 491 492 This could be useful, if normally both strings start with the same 493 content. The comparison is based on the numeric value of each character 494 in the strings and return a value indicating their relationship. 495 Since this method is optimized for performance, the ASCII character 496 values are not converted in any way. The caller has to make sure that 497 all ASCII characters are in the allowed range between 0 and 498 127. The ASCII string must be NULL-terminated and must be greater or 499 equal as asciiStrLength. 500 This function can't be used for language specific sorting. 501 502 @param asciiStr the 8-Bit ASCII character string to be compared. 503 @param asciiStrLength the length of the ascii string 504 @return 0 - if both strings are equal 505 < 0 - if this string is less than the string argument 506 > 0 - if this string is greater than the string argument 507 */ 508 sal_Int32 reverseCompareToAsciiL( const sal_Char * asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) 509 { 510 return rtl_ustr_asciil_reverseCompare_WithLength( pData->buffer, pData->length, 511 asciiStr, asciiStrLength ); 512 } 513 514 /** 515 Perform a comparison of two strings. 516 517 The result is true if and only if second string 518 represents the same sequence of characters as the first string. 519 Since this method is optimized for performance, the ASCII character 520 values are not converted in any way. The caller has to make sure that 521 all ASCII characters are in the allowed range between 0 and 522 127. The ASCII string must be NULL-terminated. 523 This function can't be used for language specific comparison. 524 525 @param asciiStr the 8-Bit ASCII character string to be compared. 526 @return sal_True if the strings are equal; 527 sal_False, otherwise. 528 */ 529 sal_Bool equalsAscii( const sal_Char* asciiStr ) const SAL_THROW(()) 530 { 531 return rtl_ustr_ascii_compare_WithLength( pData->buffer, pData->length, 532 asciiStr ) == 0; 533 } 534 535 /** 536 Perform a comparison of two strings. 537 538 The result is true if and only if second string 539 represents the same sequence of characters as the first string. 540 Since this method is optimized for performance, the ASCII character 541 values are not converted in any way. The caller has to make sure that 542 all ASCII characters are in the allowed range between 0 and 543 127. The ASCII string must be NULL-terminated and must be greater or 544 equal as asciiStrLength. 545 This function can't be used for language specific comparison. 546 547 @param asciiStr the 8-Bit ASCII character string to be compared. 548 @param asciiStrLength the length of the ascii string 549 @return sal_True if the strings are equal; 550 sal_False, otherwise. 551 */ 552 sal_Bool equalsAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) 553 { 554 if ( pData->length != asciiStrLength ) 555 return sal_False; 556 557 return rtl_ustr_asciil_reverseEquals_WithLength( 558 pData->buffer, asciiStr, asciiStrLength ); 559 } 560 561 /** 562 Perform a ASCII lowercase comparison of two strings. 563 564 The result is true if and only if second string 565 represents the same sequence of characters as the first string, 566 ignoring the case. 567 Character values between 65 and 90 (ASCII A-Z) are interpreted as 568 values between 97 and 122 (ASCII a-z). 569 Since this method is optimized for performance, the ASCII character 570 values are not converted in any way. The caller has to make sure that 571 all ASCII characters are in the allowed range between 0 and 572 127. The ASCII string must be NULL-terminated. 573 This function can't be used for language specific comparison. 574 575 @param asciiStr the 8-Bit ASCII character string to be compared. 576 @return sal_True if the strings are equal; 577 sal_False, otherwise. 578 */ 579 sal_Bool equalsIgnoreAsciiCaseAscii( const sal_Char * asciiStr ) const SAL_THROW(()) 580 { 581 return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, asciiStr ) == 0; 582 } 583 584 /** 585 Perform a ASCII lowercase comparison of two strings. 586 587 The result is true if and only if second string 588 represents the same sequence of characters as the first string, 589 ignoring the case. 590 Character values between 65 and 90 (ASCII A-Z) are interpreted as 591 values between 97 and 122 (ASCII a-z). 592 Since this method is optimized for performance, the ASCII character 593 values are not converted in any way. The caller has to make sure that 594 all ASCII characters are in the allowed range between 0 and 595 127. The ASCII string must be NULL-terminated and must be greater or 596 equal as asciiStrLength. 597 This function can't be used for language specific comparison. 598 599 @param asciiStr the 8-Bit ASCII character string to be compared. 600 @param asciiStrLength the length of the ascii string 601 @return sal_True if the strings are equal; 602 sal_False, otherwise. 603 */ 604 sal_Bool equalsIgnoreAsciiCaseAsciiL( const sal_Char * asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) 605 { 606 if ( pData->length != asciiStrLength ) 607 return sal_False; 608 609 return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, asciiStr ) == 0; 610 } 611 612 /** 613 Match against a substring appearing in this string. 614 615 The result is true if and only if the second string appears as a substring 616 of this string, at the given position. 617 Since this method is optimized for performance, the ASCII character 618 values are not converted in any way. The caller has to make sure that 619 all ASCII characters are in the allowed range between 0 and 620 127. The ASCII string must be NULL-terminated and must be greater or 621 equal as asciiStrLength. 622 This function can't be used for language specific comparison. 623 624 @param str the object (substring) to be compared. 625 @param fromIndex the index to start the comparion from. 626 The index must be greater or equal than 0 627 and less or equal as the string length. 628 @return sal_True if str match with the characters in the string 629 at the given position; 630 sal_False, otherwise. 631 */ 632 sal_Bool matchAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 633 { 634 return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, 635 asciiStr, asciiStrLength ) == 0; 636 } 637 638 /** 639 Match against a substring appearing in this string, ignoring the case of 640 ASCII letters. 641 642 The result is true if and only if the second string appears as a substring 643 of this string, at the given position. 644 Character values between 65 and 90 (ASCII A-Z) are interpreted as 645 values between 97 and 122 (ASCII a-z). 646 Since this method is optimized for performance, the ASCII character 647 values are not converted in any way. The caller has to make sure that 648 all ASCII characters are in the allowed range between 0 and 649 127. The ASCII string must be NULL-terminated and must be greater or 650 equal as asciiStrLength. 651 This function can't be used for language specific comparison. 652 653 @param asciiStr the 8-Bit ASCII character string to be compared. 654 @param asciiStrLength the length of the ascii string 655 @param fromIndex the index to start the comparion from. 656 The index must be greater or equal than 0 657 and less or equal as the string length. 658 @return sal_True if str match with the characters in the string 659 at the given position; 660 sal_False, otherwise. 661 */ 662 sal_Bool matchIgnoreAsciiCaseAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 663 { 664 return rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, 665 asciiStr, asciiStrLength ) == 0; 666 } 667 668 /** 669 Check whether this string ends with a given ASCII string. 670 671 @param asciiStr a sequence of at least asciiStrLength ASCII characters 672 (bytes in the range 0x00--0x7F) 673 @param asciiStrLen the length of asciiStr; must be non-negative 674 @return true if this string ends with asciiStr; otherwise, false is 675 returned 676 677 @since UDK 3.2.7 678 */ 679 inline bool endsWithAsciiL(char const * asciiStr, sal_Int32 asciiStrLength) 680 const 681 { 682 return asciiStrLength <= pData->length 683 && rtl_ustr_asciil_reverseEquals_WithLength( 684 pData->buffer + pData->length - asciiStrLength, asciiStr, 685 asciiStrLength); 686 } 687 688 /** 689 Check whether this string ends with a given ASCII string, ignoring the 690 case of ASCII letters. 691 692 @param asciiStr a sequence of at least asciiStrLength ASCII characters 693 (bytes in the range 0x00--0x7F) 694 @param asciiStrLen the length of asciiStr; must be non-negative 695 @return true if this string ends with asciiStr, ignoring the case of ASCII 696 letters ("A"--"Z" and "a"--"z"); otherwise, false is returned 697 */ 698 inline bool endsWithIgnoreAsciiCaseAsciiL( 699 char const * asciiStr, sal_Int32 asciiStrLength) const 700 { 701 return asciiStrLength <= pData->length 702 && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( 703 pData->buffer + pData->length - asciiStrLength, 704 asciiStrLength, asciiStr, asciiStrLength) 705 == 0); 706 } 707 708 friend sal_Bool operator == ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 709 { return rStr1.getLength() == rStr2.getLength() && rStr1.compareTo( rStr2 ) == 0; } 710 friend sal_Bool operator == ( const OUString& rStr1, const sal_Unicode * pStr2 ) SAL_THROW(()) 711 { return rStr1.compareTo( pStr2 ) == 0; } 712 friend sal_Bool operator == ( const sal_Unicode * pStr1, const OUString& rStr2 ) SAL_THROW(()) 713 { return OUString( pStr1 ).compareTo( rStr2 ) == 0; } 714 715 friend sal_Bool operator != ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 716 { return !(operator == ( rStr1, rStr2 )); } 717 friend sal_Bool operator != ( const OUString& rStr1, const sal_Unicode * pStr2 ) SAL_THROW(()) 718 { return !(operator == ( rStr1, pStr2 )); } 719 friend sal_Bool operator != ( const sal_Unicode * pStr1, const OUString& rStr2 ) SAL_THROW(()) 720 { return !(operator == ( pStr1, rStr2 )); } 721 722 friend sal_Bool operator < ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 723 { return rStr1.compareTo( rStr2 ) < 0; } 724 friend sal_Bool operator > ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 725 { return rStr1.compareTo( rStr2 ) > 0; } 726 friend sal_Bool operator <= ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 727 { return rStr1.compareTo( rStr2 ) <= 0; } 728 friend sal_Bool operator >= ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 729 { return rStr1.compareTo( rStr2 ) >= 0; } 730 731 /** 732 Returns a hashcode for this string. 733 734 @return a hash code value for this object. 735 736 @see rtl::OUStringHash for convenient use of STLPort's hash_map 737 */ 738 sal_Int32 hashCode() const SAL_THROW(()) 739 { 740 return rtl_ustr_hashCode_WithLength( pData->buffer, pData->length ); 741 } 742 743 /** 744 Returns the index within this string of the first occurrence of the 745 specified character, starting the search at the specified index. 746 747 @param ch character to be located. 748 @param fromIndex the index to start the search from. 749 The index must be greater or equal than 0 750 and less or equal as the string length. 751 @return the index of the first occurrence of the character in the 752 character sequence represented by this string that is 753 greater than or equal to fromIndex, or 754 -1 if the character does not occur. 755 */ 756 sal_Int32 indexOf( sal_Unicode ch, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 757 { 758 sal_Int32 ret = rtl_ustr_indexOfChar_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, ch ); 759 return (ret < 0 ? ret : ret+fromIndex); 760 } 761 762 /** 763 Returns the index within this string of the last occurrence of the 764 specified character, searching backward starting at the end. 765 766 @param ch character to be located. 767 @return the index of the last occurrence of the character in the 768 character sequence represented by this string, or 769 -1 if the character does not occur. 770 */ 771 sal_Int32 lastIndexOf( sal_Unicode ch ) const SAL_THROW(()) 772 { 773 return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, pData->length, ch ); 774 } 775 776 /** 777 Returns the index within this string of the last occurrence of the 778 specified character, searching backward starting before the specified 779 index. 780 781 @param ch character to be located. 782 @param fromIndex the index before which to start the search. 783 @return the index of the last occurrence of the character in the 784 character sequence represented by this string that 785 is less than fromIndex, or -1 786 if the character does not occur before that point. 787 */ 788 sal_Int32 lastIndexOf( sal_Unicode ch, sal_Int32 fromIndex ) const SAL_THROW(()) 789 { 790 return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, fromIndex, ch ); 791 } 792 793 /** 794 Returns the index within this string of the first occurrence of the 795 specified substring, starting at the specified index. 796 797 If str doesn't include any character, always -1 is 798 returned. This is also the case, if both strings are empty. 799 800 @param str the substring to search for. 801 @param fromIndex the index to start the search from. 802 @return If the string argument occurs one or more times as a substring 803 within this string at the starting index, then the index 804 of the first character of the first such substring is 805 returned. If it does not occur as a substring starting 806 at fromIndex or beyond, -1 is returned. 807 */ 808 sal_Int32 indexOf( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) 809 { 810 sal_Int32 ret = rtl_ustr_indexOfStr_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, 811 str.pData->buffer, str.pData->length ); 812 return (ret < 0 ? ret : ret+fromIndex); 813 } 814 815 /** 816 Returns the index within this string of the first occurrence of the 817 specified ASCII substring, starting at the specified index. 818 819 @param str 820 the substring to be searched for. Need not be null-terminated, but must 821 be at least as long as the specified len. Must only contain characters 822 in the ASCII range 0x00--7F. 823 824 @param len 825 the length of the substring; must be non-negative. 826 827 @param fromIndex 828 the index to start the search from. Must be in the range from zero to 829 the length of this string, inclusive. 830 831 @return 832 the index (starting at 0) of the first character of the first occurrence 833 of the substring within this string starting at the given fromIndex, or 834 -1 if the substring does not occur. If len is zero, -1 is returned. 835 836 @since UDK 3.2.7 837 */ 838 sal_Int32 indexOfAsciiL( 839 char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) const 840 SAL_THROW(()) 841 { 842 sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( 843 pData->buffer + fromIndex, pData->length - fromIndex, str, len); 844 return ret < 0 ? ret : ret + fromIndex; 845 } 846 847 /** 848 Returns the index within this string of the last occurrence of 849 the specified substring, searching backward starting at the end. 850 851 The returned index indicates the starting index of the substring 852 in this string. 853 If str doesn't include any character, always -1 is 854 returned. This is also the case, if both strings are empty. 855 856 @param str the substring to search for. 857 @return If the string argument occurs one or more times as a substring 858 within this string, then the index of the first character of 859 the last such substring is returned. If it does not occur as 860 a substring, -1 is returned. 861 */ 862 sal_Int32 lastIndexOf( const OUString & str ) const SAL_THROW(()) 863 { 864 return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, pData->length, 865 str.pData->buffer, str.pData->length ); 866 } 867 868 /** 869 Returns the index within this string of the last occurrence of 870 the specified substring, searching backward starting before the specified 871 index. 872 873 The returned index indicates the starting index of the substring 874 in this string. 875 If str doesn't include any character, always -1 is 876 returned. This is also the case, if both strings are empty. 877 878 @param str the substring to search for. 879 @param fromIndex the index before which to start the search. 880 @return If the string argument occurs one or more times as a substring 881 within this string before the starting index, then the index 882 of the first character of the last such substring is 883 returned. Otherwise, -1 is returned. 884 */ 885 sal_Int32 lastIndexOf( const OUString & str, sal_Int32 fromIndex ) const SAL_THROW(()) 886 { 887 return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, fromIndex, 888 str.pData->buffer, str.pData->length ); 889 } 890 891 /** 892 Returns the index within this string of the last occurrence of the 893 specified ASCII substring. 894 895 @param str 896 the substring to be searched for. Need not be null-terminated, but must 897 be at least as long as the specified len. Must only contain characters 898 in the ASCII range 0x00--7F. 899 900 @param len 901 the length of the substring; must be non-negative. 902 903 @return 904 the index (starting at 0) of the first character of the last occurrence 905 of the substring within this string, or -1 if the substring does not 906 occur. If len is zero, -1 is returned. 907 908 @since UDK 3.2.7 909 */ 910 sal_Int32 lastIndexOfAsciiL(char const * str, sal_Int32 len) const 911 SAL_THROW(()) 912 { 913 return rtl_ustr_lastIndexOfAscii_WithLength( 914 pData->buffer, pData->length, str, len); 915 } 916 917 /** 918 Returns a new string that is a substring of this string. 919 920 The substring begins at the specified beginIndex. It is an error for 921 beginIndex to be negative or to be greater than the length of this string. 922 923 @param beginIndex the beginning index, inclusive. 924 @return the specified substring. 925 */ 926 OUString copy( sal_Int32 beginIndex ) const SAL_THROW(()) 927 { 928 OSL_ASSERT(beginIndex >= 0 && beginIndex <= getLength()); 929 if ( beginIndex == 0 ) 930 return *this; 931 else 932 { 933 rtl_uString* pNew = 0; 934 rtl_uString_newFromStr_WithLength( &pNew, pData->buffer+beginIndex, getLength()-beginIndex ); 935 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 936 } 937 } 938 939 /** 940 Returns a new string that is a substring of this string. 941 942 The substring begins at the specified beginIndex and contains count 943 characters. It is an error for either beginIndex or count to be negative, 944 or for beginIndex + count to be greater than the length of this string. 945 946 @param beginIndex the beginning index, inclusive. 947 @param count the number of characters. 948 @return the specified substring. 949 */ 950 OUString copy( sal_Int32 beginIndex, sal_Int32 count ) const SAL_THROW(()) 951 { 952 OSL_ASSERT(beginIndex >= 0 && beginIndex <= getLength() 953 && count >= 0 && count <= getLength() - beginIndex); 954 if ( (beginIndex == 0) && (count == getLength()) ) 955 return *this; 956 else 957 { 958 rtl_uString* pNew = 0; 959 rtl_uString_newFromStr_WithLength( &pNew, pData->buffer+beginIndex, count ); 960 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 961 } 962 } 963 964 /** 965 Concatenates the specified string to the end of this string. 966 967 @param str the string that is concatenated to the end 968 of this string. 969 @return a string that represents the concatenation of this string 970 followed by the string argument. 971 */ 972 OUString concat( const OUString & str ) const SAL_THROW(()) 973 { 974 rtl_uString* pNew = 0; 975 rtl_uString_newConcat( &pNew, pData, str.pData ); 976 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 977 } 978 979 friend OUString operator+( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) 980 { 981 return rStr1.concat( rStr2 ); 982 } 983 984 /** 985 Returns a new string resulting from replacing n = count characters 986 from position index in this string with newStr. 987 988 @param index the replacing index in str. 989 The index must be greater or equal as 0 and 990 less or equal as the length of the string. 991 @param count the count of charcters that will replaced 992 The count must be greater or equal as 0 and 993 less or equal as the length of the string minus index. 994 @param newStr the new substring. 995 @return the new string. 996 */ 997 OUString replaceAt( sal_Int32 index, sal_Int32 count, const OUString& newStr ) const SAL_THROW(()) 998 { 999 rtl_uString* pNew = 0; 1000 rtl_uString_newReplaceStrAt( &pNew, pData, index, count, newStr.pData ); 1001 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1002 } 1003 1004 /** 1005 Returns a new string resulting from replacing all occurrences of 1006 oldChar in this string with newChar. 1007 1008 If the character oldChar does not occur in the character sequence 1009 represented by this object, then the string is assigned with 1010 str. 1011 1012 @param oldChar the old character. 1013 @param newChar the new character. 1014 @return a string derived from this string by replacing every 1015 occurrence of oldChar with newChar. 1016 */ 1017 OUString replace( sal_Unicode oldChar, sal_Unicode newChar ) const SAL_THROW(()) 1018 { 1019 rtl_uString* pNew = 0; 1020 rtl_uString_newReplace( &pNew, pData, oldChar, newChar ); 1021 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1022 } 1023 1024 /** 1025 Converts from this string all ASCII uppercase characters (65-90) 1026 to ASCII lowercase characters (97-122). 1027 1028 This function can't be used for language specific conversion. 1029 If the string doesn't contain characters which must be converted, 1030 then the new string is assigned with str. 1031 1032 @return the string, converted to ASCII lowercase. 1033 */ 1034 OUString toAsciiLowerCase() const SAL_THROW(()) 1035 { 1036 rtl_uString* pNew = 0; 1037 rtl_uString_newToAsciiLowerCase( &pNew, pData ); 1038 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1039 } 1040 1041 /** 1042 Converts from this string all ASCII lowercase characters (97-122) 1043 to ASCII uppercase characters (65-90). 1044 1045 This function can't be used for language specific conversion. 1046 If the string doesn't contain characters which must be converted, 1047 then the new string is assigned with str. 1048 1049 @return the string, converted to ASCII uppercase. 1050 */ 1051 OUString toAsciiUpperCase() const SAL_THROW(()) 1052 { 1053 rtl_uString* pNew = 0; 1054 rtl_uString_newToAsciiUpperCase( &pNew, pData ); 1055 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1056 } 1057 1058 /** 1059 Returns a new string resulting from removing white space from both ends 1060 of the string. 1061 1062 All characters that have codes less than or equal to 1063 32 (the space character) are considered to be white space. 1064 If the string doesn't contain white spaces at both ends, 1065 then the new string is assigned with str. 1066 1067 @return the string, with white space removed from the front and end. 1068 */ 1069 OUString trim() const SAL_THROW(()) 1070 { 1071 rtl_uString* pNew = 0; 1072 rtl_uString_newTrim( &pNew, pData ); 1073 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1074 } 1075 1076 /** 1077 Returns a token in the string. 1078 1079 Example: 1080 sal_Int32 nIndex = 0; 1081 do 1082 { 1083 ... 1084 OUString aToken = aStr.getToken( 0, ';', nIndex ); 1085 ... 1086 } 1087 while ( nIndex >= 0 ); 1088 1089 @param token the number of the token to return 1090 @param cTok the character which seperate the tokens. 1091 @param index the position at which the token is searched in the 1092 string. 1093 The index must not be greater than the length of the 1094 string. 1095 This param is set to the position of the 1096 next token or to -1, if it is the last token. 1097 @return the token; if either token or index is negative, an empty token 1098 is returned (and index is set to -1) 1099 */ 1100 OUString getToken( sal_Int32 token, sal_Unicode cTok, sal_Int32& index ) const SAL_THROW(()) 1101 { 1102 rtl_uString * pNew = 0; 1103 index = rtl_uString_getToken( &pNew, pData, token, cTok, index ); 1104 return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); 1105 } 1106 1107 /** 1108 Returns the Boolean value from this string. 1109 1110 This function can't be used for language specific conversion. 1111 1112 @return sal_True, if the string is 1 or "True" in any ASCII case. 1113 sal_False in any other case. 1114 */ 1115 sal_Bool toBoolean() const SAL_THROW(()) 1116 { 1117 return rtl_ustr_toBoolean( pData->buffer ); 1118 } 1119 1120 /** 1121 Returns the first character from this string. 1122 1123 @return the first character from this string or 0, if this string 1124 is emptry. 1125 */ 1126 sal_Unicode toChar() const SAL_THROW(()) 1127 { 1128 return pData->buffer[0]; 1129 } 1130 1131 /** 1132 Returns the int32 value from this string. 1133 1134 This function can't be used for language specific conversion. 1135 1136 @param radix the radix (between 2 and 36) 1137 @return the int32 represented from this string. 1138 0 if this string represents no number. 1139 */ 1140 sal_Int32 toInt32( sal_Int16 radix = 10 ) const SAL_THROW(()) 1141 { 1142 return rtl_ustr_toInt32( pData->buffer, radix ); 1143 } 1144 1145 /** 1146 Returns the int64 value from this string. 1147 1148 This function can't be used for language specific conversion. 1149 1150 @param radix the radix (between 2 and 36) 1151 @return the int64 represented from this string. 1152 0 if this string represents no number. 1153 */ 1154 sal_Int64 toInt64( sal_Int16 radix = 10 ) const SAL_THROW(()) 1155 { 1156 return rtl_ustr_toInt64( pData->buffer, radix ); 1157 } 1158 1159 /** 1160 Returns the float value from this string. 1161 1162 This function can't be used for language specific conversion. 1163 1164 @return the float represented from this string. 1165 0.0 if this string represents no number. 1166 */ 1167 float toFloat() const SAL_THROW(()) 1168 { 1169 return rtl_ustr_toFloat( pData->buffer ); 1170 } 1171 1172 /** 1173 Returns the double value from this string. 1174 1175 This function can't be used for language specific conversion. 1176 1177 @return the double represented from this string. 1178 0.0 if this string represents no number. 1179 */ 1180 double toDouble() const SAL_THROW(()) 1181 { 1182 return rtl_ustr_toDouble( pData->buffer ); 1183 } 1184 1185 1186 /** 1187 Return a canonical representation for a string. 1188 1189 A pool of strings, initially empty is maintained privately 1190 by the string class. On invocation, if present in the pool 1191 the original string will be returned. Otherwise this string, 1192 or a copy thereof will be added to the pool and returned. 1193 1194 @return 1195 a version of the string from the pool. 1196 1197 @exception std::bad_alloc is thrown if an out-of-memory condition occurs 1198 1199 @since UDK 3.2.7 1200 */ 1201 OUString intern() const 1202 { 1203 rtl_uString * pNew = 0; 1204 rtl_uString_intern( &pNew, pData ); 1205 #if defined EXCEPTIONS_OFF 1206 OSL_ASSERT(pNew != NULL); 1207 #else 1208 if (pNew == 0) { 1209 throw std::bad_alloc(); 1210 } 1211 #endif 1212 return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); 1213 } 1214 1215 /** 1216 Return a canonical representation for a converted string. 1217 1218 A pool of strings, initially empty is maintained privately 1219 by the string class. On invocation, if present in the pool 1220 the original string will be returned. Otherwise this string, 1221 or a copy thereof will be added to the pool and returned. 1222 1223 @param value a 8-Bit character array. 1224 @param length the number of character which should be converted. 1225 The 8-Bit character array length must be 1226 greater or equal than this value. 1227 @param encoding the text encoding from which the 8-Bit character 1228 sequence should be converted. 1229 @param convertFlags flags which controls the conversion. 1230 see RTL_TEXTTOUNICODE_FLAGS_... 1231 @param pInfo pointer to return conversion status or NULL. 1232 1233 @return 1234 a version of the converted string from the pool. 1235 1236 @exception std::bad_alloc is thrown if an out-of-memory condition occurs 1237 1238 @since UDK 3.2.7 1239 */ 1240 static OUString intern( const sal_Char * value, sal_Int32 length, 1241 rtl_TextEncoding encoding, 1242 sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS, 1243 sal_uInt32 *pInfo = NULL ) 1244 { 1245 rtl_uString * pNew = 0; 1246 rtl_uString_internConvert( &pNew, value, length, encoding, 1247 convertFlags, pInfo ); 1248 #if defined EXCEPTIONS_OFF 1249 OSL_ASSERT(pNew != NULL); 1250 #else 1251 if (pNew == 0) { 1252 throw std::bad_alloc(); 1253 } 1254 #endif 1255 return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); 1256 } 1257 1258 /** 1259 Converts to an OString, signalling failure. 1260 1261 @param pTarget 1262 An out parameter receiving the converted OString. Must not be null; the 1263 contents are not modified if conversion fails (convertToOString returns 1264 false). 1265 1266 @param nEncoding 1267 The text encoding to convert into. Must be an octet encoding (i.e., 1268 rtl_isOctetTextEncoding(nEncoding) must return true). 1269 1270 @param nFlags 1271 A combination of RTL_UNICODETOTEXT_FLAGS that detail how to do the 1272 conversion (see rtl_convertUnicodeToText). RTL_UNICODETOTEXT_FLAGS_FLUSH 1273 need not be included, it is implicitly assumed. Typical uses are either 1274 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | 1275 RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR (fail if a Unicode character cannot 1276 be converted to the target nEncoding) or OUSTRING_TO_OSTRING_CVTFLAGS 1277 (make a best efforts conversion). 1278 1279 @return 1280 True if the conversion succeeded, false otherwise. 1281 */ 1282 inline bool convertToString(OString * pTarget, rtl_TextEncoding nEncoding, 1283 sal_uInt32 nFlags) const 1284 { 1285 return rtl_convertUStringToString(&pTarget->pData, pData->buffer, 1286 pData->length, nEncoding, nFlags); 1287 } 1288 1289 /** Iterate through this string based on code points instead of UTF-16 code 1290 units. 1291 1292 See Chapter 3 of The Unicode Standard 5.0 (Addison--Wesley, 2006) for 1293 definitions of the various terms used in this description. 1294 1295 This string is interpreted as a sequence of zero or more UTF-16 code 1296 units. For each index into this sequence (from zero to one less than 1297 the length of the sequence, inclusive), a code point represented 1298 starting at the given index is computed as follows: 1299 1300 - If the UTF-16 code unit addressed by the index constitutes a 1301 well-formed UTF-16 code unit sequence, the computed code point is the 1302 scalar value encoded by that UTF-16 code unit sequence. 1303 1304 - Otherwise, if the index is at least two UTF-16 code units away from 1305 the end of the sequence, and the sequence of two UTF-16 code units 1306 addressed by the index constitutes a well-formed UTF-16 code unit 1307 sequence, the computed code point is the scalar value encoded by that 1308 UTF-16 code unit sequence. 1309 1310 - Otherwise, the computed code point is the UTF-16 code unit addressed 1311 by the index. (This last case catches unmatched surrogates as well as 1312 indices pointing into the middle of surrogate pairs.) 1313 1314 @param indexUtf16 1315 pointer to a UTF-16 based index into this string; must not be null. On 1316 entry, the index must be in the range from zero to the length of this 1317 string (in UTF-16 code units), inclusive. Upon successful return, the 1318 index will be updated to address the UTF-16 code unit that is the given 1319 incrementCodePoints away from the initial index. 1320 1321 @param incrementCodePoints 1322 the number of code points to move the given *indexUtf16. If 1323 non-negative, moving is done after determining the code point at the 1324 index. If negative, moving is done before determining the code point 1325 at the (then updated) index. The value must be such that the resulting 1326 UTF-16 based index is in the range from zero to the length of this 1327 string (in UTF-16 code units), inclusive. 1328 1329 @return 1330 the code point (an integer in the range from 0 to 0x10FFFF, inclusive) 1331 that is represented within this string starting at the index computed as 1332 follows: If incrementCodePoints is non-negative, the index is the 1333 initial value of *indexUtf16; if incrementCodePoints is negative, the 1334 index is the updated value of *indexUtf16. In either case, the computed 1335 index must be in the range from zero to one less than the length of this 1336 string (in UTF-16 code units), inclusive. 1337 1338 @since UDK 3.2.7 1339 */ 1340 inline sal_uInt32 iterateCodePoints( 1341 sal_Int32 * indexUtf16, sal_Int32 incrementCodePoints = 1) const 1342 { 1343 return rtl_uString_iterateCodePoints( 1344 pData, indexUtf16, incrementCodePoints); 1345 } 1346 1347 /** 1348 Returns the string representation of the sal_Bool argument. 1349 1350 If the sal_Bool is true, the string "true" is returned. 1351 If the sal_Bool is false, the string "false" is returned. 1352 This function can't be used for language specific conversion. 1353 1354 @param b a sal_Bool. 1355 @return a string with the string representation of the argument. 1356 */ 1357 static OUString valueOf( sal_Bool b ) SAL_THROW(()) 1358 { 1359 sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFBOOLEAN]; 1360 rtl_uString* pNewData = 0; 1361 rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfBoolean( aBuf, b ) ); 1362 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); 1363 } 1364 1365 /** 1366 Returns the string representation of the char argument. 1367 1368 @param c a character. 1369 @return a string with the string representation of the argument. 1370 */ 1371 static OUString valueOf( sal_Unicode c ) SAL_THROW(()) 1372 { 1373 return OUString( &c, 1 ); 1374 } 1375 1376 /** 1377 Returns the string representation of the int argument. 1378 1379 This function can't be used for language specific conversion. 1380 1381 @param i a int32. 1382 @param radix the radix (between 2 and 36) 1383 @return a string with the string representation of the argument. 1384 */ 1385 static OUString valueOf( sal_Int32 i, sal_Int16 radix = 10 ) SAL_THROW(()) 1386 { 1387 sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFINT32]; 1388 rtl_uString* pNewData = 0; 1389 rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfInt32( aBuf, i, radix ) ); 1390 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); 1391 } 1392 1393 /** 1394 Returns the string representation of the long argument. 1395 1396 This function can't be used for language specific conversion. 1397 1398 @param ll a int64. 1399 @param radix the radix (between 2 and 36) 1400 @return a string with the string representation of the argument. 1401 */ 1402 static OUString valueOf( sal_Int64 ll, sal_Int16 radix = 10 ) SAL_THROW(()) 1403 { 1404 sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFINT64]; 1405 rtl_uString* pNewData = 0; 1406 rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfInt64( aBuf, ll, radix ) ); 1407 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); 1408 } 1409 1410 /** 1411 Returns the string representation of the float argument. 1412 1413 This function can't be used for language specific conversion. 1414 1415 @param f a float. 1416 @return a string with the string representation of the argument. 1417 */ 1418 static OUString valueOf( float f ) SAL_THROW(()) 1419 { 1420 sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFFLOAT]; 1421 rtl_uString* pNewData = 0; 1422 rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfFloat( aBuf, f ) ); 1423 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); 1424 } 1425 1426 /** 1427 Returns the string representation of the double argument. 1428 1429 This function can't be used for language specific conversion. 1430 1431 @param d a double. 1432 @return a string with the string representation of the argument. 1433 */ 1434 static OUString valueOf( double d ) SAL_THROW(()) 1435 { 1436 sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFDOUBLE]; 1437 rtl_uString* pNewData = 0; 1438 rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfDouble( aBuf, d ) ); 1439 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); 1440 } 1441 1442 /** 1443 Returns a OUString copied without conversion from an ASCII 1444 character string. 1445 1446 Since this method is optimized for performance, the ASCII character 1447 values are not converted in any way. The caller has to make sure that 1448 all ASCII characters are in the allowed range between 0 and 1449 127. The ASCII string must be NULL-terminated. 1450 1451 @param value the 8-Bit ASCII character string 1452 @return a string with the string representation of the argument. 1453 */ 1454 static OUString createFromAscii( const sal_Char * value ) SAL_THROW(()) 1455 { 1456 rtl_uString* pNew = 0; 1457 rtl_uString_newFromAscii( &pNew, value ); 1458 return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); 1459 } 1460 }; 1461 1462 /* ======================================================================= */ 1463 1464 /** A helper to use OUStrings with hash maps. 1465 1466 Instances of this class are unary function objects that can be used as 1467 hash function arguments to STLPort's hash_map and similar constructs. 1468 */ 1469 struct OUStringHash 1470 { 1471 /** Compute a hash code for a string. 1472 1473 @param rString 1474 a string. 1475 1476 @return 1477 a hash code for the string. This hash code should not be stored 1478 persistently, as its computation may change in later revisions. 1479 */ 1480 size_t operator()(const rtl::OUString& rString) const 1481 { return (size_t)rString.hashCode(); } 1482 }; 1483 1484 /* ======================================================================= */ 1485 1486 /** Convert an OString to an OUString, using a specific text encoding. 1487 1488 The lengths of the two strings may differ (e.g., for double-byte 1489 encodings, UTF-7, UTF-8). 1490 1491 @param rStr 1492 an OString to convert. 1493 1494 @param encoding 1495 the text encoding to use for conversion. 1496 1497 @param convertFlags 1498 flags which control the conversion. Either use 1499 OSTRING_TO_OUSTRING_CVTFLAGS, or see 1500 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more 1501 details. 1502 */ 1503 inline OUString OStringToOUString( const OString & rStr, 1504 rtl_TextEncoding encoding, 1505 sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS ) 1506 { 1507 return OUString( rStr.getStr(), rStr.getLength(), encoding, convertFlags ); 1508 } 1509 1510 /** Convert an OUString to an OString, using a specific text encoding. 1511 1512 The lengths of the two strings may differ (e.g., for double-byte 1513 encodings, UTF-7, UTF-8). 1514 1515 @param rStr 1516 an OUString to convert. 1517 1518 @param encoding 1519 the text encoding to use for conversion. 1520 1521 @param convertFlags 1522 flags which control the conversion. Either use 1523 OUSTRING_TO_OSTRING_CVTFLAGS, or see 1524 <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more 1525 details. 1526 */ 1527 inline OString OUStringToOString( const OUString & rUnicode, 1528 rtl_TextEncoding encoding, 1529 sal_uInt32 convertFlags = OUSTRING_TO_OSTRING_CVTFLAGS ) 1530 { 1531 return OString( rUnicode.getStr(), rUnicode.getLength(), encoding, convertFlags ); 1532 } 1533 1534 /* ======================================================================= */ 1535 1536 } /* Namespace */ 1537 1538 #endif /* __cplusplus */ 1539 1540 #endif /* _RTL_USTRING_HXX */ 1541