16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1998-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File unistr.h 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 09/25/98 stephen Creation. 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 11/11/98 stephen Changed per 11/9 code review. 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 04/20/99 stephen Overhauled per 4/16 code review. 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 11/18/99 aliu Made to inherit from Replaceable. Added method 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* handleReplaceBetween(); other methods unchanged. 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 06/25/01 grhoten Remove dependency on iostream. 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UNISTR_H 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UNISTR_H 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Unicode String 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/rep.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/std_string.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/stringpiece.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/bytestream.h" 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucasemap.h" 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct UConverter; // unicode/ucnv.h 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass StringThreadTest; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_COMPARE_CODE_POINT_ORDER 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* see also ustring.h and unorm.h */ 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare strings in code point order instead of code unit order. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMPARE_CODE_POINT_ORDER 0x8000 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef USTRING_H 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \ingroup ustring_ustrlen 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_strlen(const UChar *s); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_STRING_CASE_MAPPER_DEFINED 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_STRING_CASE_MAPPER_DEFINED 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_STRING_CASE_MAPPER_DEFINED 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Internal string case mapping function type. 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef int32_t U_CALLCONV 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUStringCaseMapper(const UCaseMap *csm, 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *dest, int32_t destCapacity, 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *src, int32_t srcLength, 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode); 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass BreakIterator; // unicode/brkiter.h 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Locale; // unicode/locid.h 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass StringCharacterIterator; 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass UnicodeStringAppendable; // unicode/appendable.h 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* The <iostream> include has been moved to unicode/ustream.h */ 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which constructs a Unicode string from an invariant-character char * string. 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * About invariant characters see utypes.h. 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This constructor has no runtime dependency on conversion code and is 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * therefore recommended over ones taking a charset name string 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (where the empty string "" indicates invariant-character conversion). 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.2 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define US_INV icu::UnicodeString::kInvariant 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode String literals in C++. 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Dependent on the platform properties, different UnicodeString 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructors should be used to create a UnicodeString object from 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a string literal. 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The macros are defined for maximum performance. 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * They work only for strings that contain "invariant characters", i.e., 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * only latin letters, digits, and some punctuation. 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See utypes.h for details. 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The string parameter must be a C string literal. 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The length of the string, not including the terminating 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>NUL</code>, must be specified as a constant. 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The U_STRING_DECL macro should be invoked exactly once for one 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * such string variable before it is used. 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(U_DECLARE_UTF16) 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)U_DECLARE_UTF16(cs), _length) 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)L ## cs, _length) 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)cs, _length) 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNICODE_STRING(cs, _length) icu::UnicodeString(cs, _length, US_INV) 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode String literals in C++. 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Dependent on the platform properties, different UnicodeString 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructors should be used to create a UnicodeString object from 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a string literal. 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The macros are defined for improved performance. 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * They work only for strings that contain "invariant characters", i.e., 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * only latin letters, digits, and some punctuation. 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See utypes.h for details. 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The string parameter must be a C string literal. 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1) 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def UNISTR_FROM_CHAR_EXPLICIT 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be defined to be empty or "explicit". 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If explicit, then the UnicodeString(UChar) and UnicodeString(UChar32) 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructors are marked as explicit, preventing their inadvertent use. 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 49 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UNISTR_FROM_CHAR_EXPLICIT 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Auto-"explicit" in ICU library code. 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNISTR_FROM_CHAR_EXPLICIT explicit 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# else 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Empty by default for source code compatibility. 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNISTR_FROM_CHAR_EXPLICIT 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# endif 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def UNISTR_FROM_STRING_EXPLICIT 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be defined to be empty or "explicit". 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If explicit, then the UnicodeString(const char *) and UnicodeString(const UChar *) 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructors are marked as explicit, preventing their inadvertent use. 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In particular, this helps prevent accidentally depending on ICU conversion code 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by passing a string literal into an API with a const UnicodeString & parameter. 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 49 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UNISTR_FROM_STRING_EXPLICIT 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Auto-"explicit" in ICU library code. 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNISTR_FROM_STRING_EXPLICIT explicit 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# else 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Empty by default for source code compatibility. 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UNISTR_FROM_STRING_EXPLICIT 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# endif 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString is a string class that stores Unicode characters directly and provides 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * similar functionality as the Java String and StringBuffer classes. 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is a concrete implementation of the abstract class Replaceable (for transliteration). 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The UnicodeString class is not suitable for subclassing. 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>For an overview of Unicode strings in C and C++ see the 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p> 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>In ICU, a Unicode string consists of 16-bit Unicode <em>code units</em>. 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A Unicode character may be stored with either one code unit 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (the most common case) or with a matched pair of special code units 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ("surrogates"). The data type for code units is UChar. 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For single-character handling, a Unicode character code <em>point</em> is a value 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range 0..0x10ffff. ICU uses the UChar32 type for code points.</p> 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Indexes and offsets into and lengths of strings always count code units, not code points. 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is the same as with multi-byte char* strings in traditional string handling. 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Operations on partial strings typically do not test for code point boundaries. 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If necessary, the user needs to take care of such boundaries by testing for the code unit 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * values or by using functions like 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString::getChar32Start() and UnicodeString::getChar32Limit() 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (or, in C, the equivalent macros U16_SET_CP_START() and U16_SET_CP_LIMIT(), see utf.h).</p> 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString methods are more lenient with regard to input parameter values 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * than other ICU APIs. In particular: 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - If indexes are out of bounds for a UnicodeString object 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (<0 or >length()) then they are "pinned" to the nearest boundary. 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - If primitive string pointer values (e.g., const UChar * or char *) 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for input strings are NULL, then those input string parameters are treated 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as if they pointed to an empty string. 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * However, this is <em>not</em> the case for char * parameters for charset names 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or other IDs. 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - Most UnicodeString methods do not take a UErrorCode parameter because 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * there are usually very few opportunities for failure other than a shortage 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of memory, error codes in low-level C++ string methods would be inconvenient, 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the error code as the last parameter (ICU convention) would prevent 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the use of default parameter values. 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Instead, such methods set the UnicodeString into a "bogus" state 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see isBogus()) if an error occurs. 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In string comparisons, two UnicodeString objects that are both "bogus" 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compare equal (to be transitive and prevent endless loops in sorting), 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a "bogus" string compares less than any non-"bogus" one. 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Const UnicodeString methods are thread-safe. Multiple threads can use 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * const methods on the same UnicodeString object simultaneously, 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but non-const methods must not be called concurrently (in multiple threads) 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with any other (const or non-const) methods. 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Similarly, const UnicodeString & parameters are thread-safe. 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * One object may be passed in as such a parameter concurrently in multiple threads. 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This includes the const UnicodeString & parameters for 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * copy construction, assignment, and cloning. 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>UnicodeString uses several storage methods. 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * String contents can be stored inside the UnicodeString object itself, 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in an allocated and shared buffer, or in an outside buffer that is "aliased". 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Most of this is done transparently, but careful aliasing in particular provides 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * significant performance improvements. 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Also, the internal buffer is accessible via special functions. 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For details see the 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p> 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see utf.h 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see CharacterIterator 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_COMMON_API UnicodeString : public Replaceable 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which constructs a Unicode string from an invariant-character char * string. 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use the macro US_INV instead of the full qualification for this value. 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see US_INV 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.2 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum EInvariant { 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see EInvariant 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.2 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kInvariant 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Read-only operations 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Comparison - bitwise only - for international comparison use collation */ 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Equality operator. Performs only bitwise comparison. 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if <TT>text</TT> contains the same characters as this one, 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise. 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator== (const UnicodeString& text) const; 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Inequality operator. Performs only bitwise comparison. 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return FALSE if <TT>text</TT> contains the same characters as this one, 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TRUE otherwise. 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator!= (const UnicodeString& text) const; 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Greater than operator. Performs only bitwise comparison. 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the characters in this are bitwise 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * greater than the characters in <code>text</code>, FALSE otherwise 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator> (const UnicodeString& text) const; 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Less than operator. Performs only bitwise comparison. 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the characters in this are bitwise 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * less than the characters in <code>text</code>, FALSE otherwise 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator< (const UnicodeString& text) const; 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Greater than or equal operator. Performs only bitwise comparison. 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the characters in this are bitwise 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * greater than or equal to the characters in <code>text</code>, FALSE otherwise 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator>= (const UnicodeString& text) const; 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Less than or equal operator. Performs only bitwise comparison. 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the characters in this are bitwise 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * less than or equal to the characters in <code>text</code>, FALSE otherwise 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool operator<= (const UnicodeString& text) const; 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in this UnicodeString to 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the characters in <code>text</code>. 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The UnicodeString to compare to this one. 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>text</code>, -1 if the characters in 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>text</code>, +1 if the 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>text</code>. 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(const UnicodeString& text) const; 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in the range 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the <b>entire string</b> <TT>text</TT>. 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (The parameters "start" and "length" are not applied to the other text "text".) 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the compare operation begins 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters of text to compare. 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text the other text to be compared against this string. 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>text</code>, -1 if the characters in 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>text</code>, +1 if the 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>text</code>. 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(int32_t start, 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& text) const; 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in the range 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the compare operation begins 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to compare. 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the text to be compared 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start comparison 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>src</TT> to compare 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>srcText</code>, -1 if the characters in 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>srcText</code>, +1 if the 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>srcText</code>. 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(int32_t start, 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in this UnicodeString with the first 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcLength</TT> characters in <TT>srcChars</TT>. 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The characters to compare to this UnicodeString. 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to compare 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>srcChars</code>, -1 if the characters in 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>srcChars</code>, +1 if the 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>srcChars</code>. 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(const UChar *srcChars, 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in the range 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the first 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>length</TT> characters in <TT>srcChars</TT> 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the compare operation begins 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to compare. 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the characters to be compared 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>srcChars</code>, -1 if the characters in 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>srcChars</code>, +1 if the 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>srcChars</code>. 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(int32_t start, 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars) const; 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in the range 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT> in the range 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the compare operation begins 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to compare 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the characters to be compared 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> to start comparison 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to compare 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>srcChars</code>, -1 if the characters in 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>srcChars</code>, +1 if the 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>srcChars</code>. 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compare(int32_t start, 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare the characters bitwise in the range 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>limit</TT>) with the characters 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcLimit</TT>). 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the compare operation begins 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the offset immediately following the compare operation 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the text to be compared 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start comparison 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLimit the offset into <TT>srcText</TT> to limit comparison 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The result of bitwise character comparison: 0 if this 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contains the same characters as <code>srcText</code>, -1 if the characters in 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this are bitwise less than the characters in <code>srcText</code>, +1 if the 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters in this are bitwise greater than the characters 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <code>srcText</code>. 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareBetween(int32_t start, 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit) const; 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text Another string to compare this one to. 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(const UnicodeString& text) const; 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(int32_t start, 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) const; 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(int32_t start, 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(const UChar *srcChars, 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(int32_t start, 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars) const; 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrder(int32_t start, 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two Unicode strings in code point order. 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be different from the results of compare(), operator<, etc. 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if supplementary characters are present: 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, supplementary characters (with code points U+10000 and above) are 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which means that they compare as less than some other BMP characters like U+feff. 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function compares Unicode strings in code point order. 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit The offset after the last code unit from this string to compare. 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLimit The offset after the last code unit from that string to compare. 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a negative/zero/positive integer corresponding to whether 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this string is less than/equal to/greater than the second one 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in code point order 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t compareCodePointOrderBetween(int32_t start, 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit) const; 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(text.foldCase(options)). 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text Another string to compare this one to. 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(const UnicodeString& text, uint32_t options) const; 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)). 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(int32_t start, 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)). 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(int32_t start, 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(const UChar *srcChars, 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(int32_t start, 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of code units from this string to compare. 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars A pointer to another string to compare this one to. 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of code units from that string to compare. 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompare(int32_t start, 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compare two strings case-insensitively using full case folding. 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is equivalent to this->foldCase(options).compareBetween(text.foldCase(options)). 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The start offset in this string at which the compare operation begins. 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit The offset after the last code unit from this string to compare. 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText Another string to compare this one to. 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The start offset in that string at which the compare operation begins. 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLimit The offset after the last code unit from that string to compare. 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options A bit set of options: 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_DEFAULT or 0 is used for default options: 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Comparison in code unit order with default case folding. 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_COMPARE_CODE_POINT_ORDER 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to choose code point order instead of code unit order 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (see u_strCompare for details). 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - U_FOLD_CASE_EXCLUDE_SPECIAL_I 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A negative, zero, or positive integer indicating the comparison result. 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t caseCompareBetween(int32_t start, 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit, 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this starts with the characters in <TT>text</TT> 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to match. 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this starts with the characters in <TT>text</TT>, 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool startsWith(const UnicodeString& text) const; 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this starts with the characters in <TT>srcText</TT> 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText The text to match. 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start matching 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> to match 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this starts with the characters in <TT>text</TT>, 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool startsWith(const UnicodeString& srcText, 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this starts with the characters in <TT>srcChars</TT> 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The characters to match. 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this starts with the characters in <TT>srcChars</TT>, 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool startsWith(const UChar *srcChars, 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this ends with the characters in <TT>srcChars</TT> 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The characters to match. 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start matching 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this ends with the characters in <TT>srcChars</TT>, FALSE otherwise 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool startsWith(const UChar *srcChars, 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this ends with the characters in <TT>text</TT> 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to match. 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this ends with the characters in <TT>text</TT>, 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool endsWith(const UnicodeString& text) const; 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this ends with the characters in <TT>srcText</TT> 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText The text to match. 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start matching 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> to match 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this ends with the characters in <TT>text</TT>, 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool endsWith(const UnicodeString& srcText, 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this ends with the characters in <TT>srcChars</TT> 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The characters to match. 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this ends with the characters in <TT>srcChars</TT>, 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool endsWith(const UChar *srcChars, 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this ends with the characters in <TT>srcChars</TT> 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The characters to match. 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> to start matching 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this ends with the characters in <TT>srcChars</TT>, 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool endsWith(const UChar *srcChars, 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Searching - bitwise only */ 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the characters in <TT>text</TT>, 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UnicodeString& text) const; 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the characters in <TT>text</TT> 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UnicodeString& text, 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence in the range 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>text</TT>, using bitwise comparison. 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to search 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UnicodeString& text, 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence in the range 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>), 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText The text to search for. 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> at which 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to start matching 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> to match 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UnicodeString& srcText, 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the characters in 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChars</TT> 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UChar *srcChars, 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence in the range 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT>, using bitwise comparison. 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to search 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>srcChars</TT>, 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(const UChar *srcChars, 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence in the range 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT> in the range 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>), 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> at which 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to start matching 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t indexOf(const UChar *srcChars, 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the BMP code point <code>c</code>, 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar c) const; 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the code point <TT>c</TT>, 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar32 c) const; 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the BMP code point <code>c</code>, 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar c, 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the code point <TT>c</TT> 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar32 c, 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the BMP code point <code>c</code> 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>), 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar c, 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the first occurrence of the code point <TT>c</TT> 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>), 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t indexOf(UChar32 c, 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the characters in <TT>text</TT>, 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UnicodeString& text) const; 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the characters in <TT>text</TT> 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UnicodeString& text, 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence in the range 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>text</TT>, using bitwise comparison. 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The text to search for. 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to search 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UnicodeString& text, 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence in the range 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>), 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText The text to search for. 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> at which 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to start matching 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> to match 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UnicodeString& srcText, 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the characters in <TT>srcChars</TT> 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UChar *srcChars, 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence in the range 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT>, using bitwise comparison. 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to search 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>srcChars</TT>, 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(const UChar *srcChars, 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence in the range 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) of the characters 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT> in the range 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>), 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars The text to search for. 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> at which 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to start matching 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> to match 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of the start of <TT>text</TT>, 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or -1 if not found. 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lastIndexOf(const UChar *srcChars, 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the BMP code point <code>c</code>, 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar c) const; 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the code point <TT>c</TT>, 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar32 c) const; 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the BMP code point <code>c</code> 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar c, 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the code point <TT>c</TT> 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * starting at offset <TT>start</TT>, using bitwise comparison. 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start The offset at which searching will start. 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar32 c, 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const; 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the BMP code point <code>c</code> 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>), 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code unit to search for. 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar c, 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Locate in this the last occurrence of the code point <TT>c</TT> 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>), 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using bitwise comparison. 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c The code point to search for. 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset into this at which to start matching 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters in this to search 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The offset into this of <TT>c</TT>, or -1 if not found. 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t lastIndexOf(UChar32 c, 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Character access */ 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the code unit at offset <tt>offset</tt>. 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the offset is not valid (0..length()-1) then U+ffff is returned. 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a valid offset into the text 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the code unit at offset <tt>offset</tt> 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or 0xffff if the offset is not valid for this string 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UChar charAt(int32_t offset) const; 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the code unit at offset <tt>offset</tt>. 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the offset is not valid (0..length()-1) then U+ffff is returned. 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a valid offset into the text 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the code unit at offset <tt>offset</tt> 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UChar operator[] (int32_t offset) const; 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the code point that contains the code unit 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at offset <tt>offset</tt>. 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the offset is not valid (0..length()-1) then U+ffff is returned. 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a valid offset into the text 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that indicates the text offset of any of the code units 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that will be assembled into a code point (21-bit value) and returned 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the code point of text at <tt>offset</tt> 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or 0xffff if the offset is not valid for this string 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 char32At(int32_t offset) const; 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Adjust a random-access offset so that 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it points to the beginning of a Unicode character. 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The offset that is passed in points to 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * any code unit of a code point, 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * while the returned offset will point to the first code unit 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the same code point. 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, if the input offset points to a second surrogate 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of a surrogate pair, then the returned offset will point 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to the first surrogate. 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a valid offset into one code point of the text 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return offset of the first code unit of the same code point 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U16_SET_CP_START 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getChar32Start(int32_t offset) const; 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Adjust a random-access offset so that 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it points behind a Unicode character. 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The offset that is passed in points behind 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * any code unit of a code point, 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * while the returned offset will point behind the last code unit 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the same code point. 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In UTF-16, if the input offset points behind the first surrogate 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (i.e., to the second surrogate) 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of a surrogate pair, then the returned offset will point 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * behind the second surrogate (i.e., to the first surrogate). 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a valid offset after any code unit of a code point of the text 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return offset of the first code unit after the same code point 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U16_SET_CP_LIMIT 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getChar32Limit(int32_t offset) const; 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Move the code unit index along the string by delta code points. 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Interpret the input index as a code unit-based offset into the string, 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * move the index forward or backward by delta code points, and 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return the resulting index. 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The input index should point to the first code unit of a code point, 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if there is more than one. 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Both input and output indexes are code unit-based as for all 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string indexes/offsets in ICU (and other libraries, like MBCS char*). 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If delta<0 then the index is moved backward (toward the start of the string). 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If delta>0 then the index is moved forward (toward the end of the string). 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This behaves like CharacterIterator::move32(delta, kCurrent). 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Behavior for out-of-bounds indexes: 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>moveIndex32</code> pins the input index to 0..length(), i.e., 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if the input index<0 then it is pinned to 0; 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if it is index>length() then it is pinned to length(). 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Afterwards, the index is moved by <code>delta</code> code points 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * forward or backward, 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but no further backward than to 0 and no further forward than to length(). 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The resulting index return value will be in between 0 and length(), inclusively. 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Examples: 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre> 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // s has code points 'a' U+10000 'b' U+10ffff U+2029 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString s=UNICODE_STRING("a\\U00010000b\\U0010ffff\\u2029", 31).unescape(); 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // initial index: position of U+10000 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t index=1; 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // the following examples will all result in index==4, position of U+10ffff 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // skip 2 code points from some position in the string 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * index=s.moveIndex32(index, 2); // skips U+10000 and 'b' 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // go to the 3rd code point from the start of s (0-based) 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * index=s.moveIndex32(0, 3); // skips 'a', U+10000, and 'b' 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // go to the next-to-last code point of s 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * index=s.moveIndex32(s.length(), -2); // backward-skips U+2029 and U+10ffff 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre> 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param index input code unit index 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param delta (signed) code point count to move the index forward or backward 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the string 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the resulting code unit index 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t moveIndex32(int32_t index, int32_t delta) const; 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Substring extraction */ 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</tt>, <tt>start + length</tt>) into the array <tt>dst</tt>, 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * beginning at <tt>dstStart</tt>. 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the string aliases to <code>dst</code> itself as an external buffer, 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then extract() will not copy the contents. 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied into the array 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to extract 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dst array in which to copy characters. The length of <tt>dst</tt> 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be at least (<tt>dstStart + length</tt>). 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dstStart the offset in <TT>dst</TT> where the first character 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be extracted 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void extract(int32_t start, 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *dst, 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dstStart = 0) const; 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the contents of the string into dest. 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a convenience function that 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * checks if there is enough space in dest, 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * extracts the entire string if possible, 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and NUL-terminates dest if possible. 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the string fits into dest but cannot be NUL-terminated 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (length()==destCapacity) then the error code is set to U_STRING_NOT_TERMINATED_WARNING. 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the string itself does not fit into dest 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (length()>destCapacity) then the error code is set to U_BUFFER_OVERFLOW_ERROR. 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the string aliases to <code>dest</code> itself as an external buffer, 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then extract() will not copy the contents. 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dest Destination string buffer. 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param destCapacity Number of UChars available at dest. 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param errorCode ICU error code. 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return length() 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extract(UChar *dest, int32_t destCapacity, 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &errorCode) const; 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</tt>, <tt>start + length</tt>) into the UnicodeString 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <tt>target</tt>. 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to extract 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target UnicodeString into which to copy characters. 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to <TT>target</TT> 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void extract(int32_t start, 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& target) const; 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>) 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * into the array <tt>dst</tt>, beginning at <tt>dstStart</tt>. 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied into the array 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit offset immediately following the last character to be copied 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dst array in which to copy characters. The length of <tt>dst</tt> 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be at least (<tt>dstStart + (limit - start)</tt>). 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dstStart the offset in <TT>dst</TT> where the first character 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be extracted 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void extractBetween(int32_t start, 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *dst, 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dstStart = 0) const; 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>) 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * into the UnicodeString <tt>target</tt>. Replaceable API. 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit offset immediately following the last character to be copied 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target UnicodeString into which to copy characters. 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to <TT>target</TT> 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void extractBetween(int32_t start, 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& target) const; 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters. 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * All characters must be invariant (see utypes.h). 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use US_INV as the last, signature-distinguishing parameter. 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function does not write any more than <code>targetLength</code> 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters but returns the length of the entire output string 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that one can allocate a larger buffer and call the function again 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if necessary. 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The output string is NUL-terminated if possible. 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param startLength the number of characters to extract 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target the target buffer for extraction, can be NULL 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if targetLength is 0 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetCapacity the length of the target buffer 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param inv Signature-distinguishing paramater, use US_INV. 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the output string length, not including the terminating NUL 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.2 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t extract(int32_t start, 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t startLength, 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *target, 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t targetCapacity, 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum EInvariant inv) const; 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the platform's default codepage. 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function does not write any more than <code>targetLength</code> 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters but returns the length of the entire output string 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that one can allocate a larger buffer and call the function again 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if necessary. 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The output string is NUL-terminated if possible. 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param startLength the number of characters to extract 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target the target buffer for extraction 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetLength the length of the target buffer 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <TT>target</TT> is NULL, then the number of bytes required for 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>target</TT> is returned. 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the output string length, not including the terminating NUL 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t extract(int32_t start, 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t startLength, 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *target, 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t targetLength) const; 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_CONVERSION 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in a specified codepage. 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The output string is NUL-terminated. 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Recommendation: For invariant-character strings use 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because it avoids object code dependencies of UnicodeString on 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the conversion code. 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param startLength the number of characters to extract 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target the target buffer for extraction 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepage the desired codepage for the characters. 0 has 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the special meaning of the default codepage 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage</code> is an empty string (<code>""</code>), 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then a simple conversion is performed on the codepage-invariant 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subset ("invariant characters") of the platform encoding. See utypes.h. 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <TT>target</TT> is NULL, then the number of bytes required for 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>target</TT> is returned. It is assumed that the target is big enough 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to fit all of the characters. 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the output string length, not including the terminating NUL 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t extract(int32_t start, 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t startLength, 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *target, 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *codepage = 0) const; 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy the characters in the range 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<tt>start</TT>, <tt>start + length</TT>) into an array of characters 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in a specified codepage. 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function does not write any more than <code>targetLength</code> 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters but returns the length of the entire output string 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that one can allocate a larger buffer and call the function again 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if necessary. 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The output string is NUL-terminated if possible. 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Recommendation: For invariant-character strings use 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because it avoids object code dependencies of UnicodeString on 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the conversion code. 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of first character which will be copied 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param startLength the number of characters to extract 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param target the target buffer for extraction 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetLength the length of the target buffer 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepage the desired codepage for the characters. 0 has 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the special meaning of the default codepage 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage</code> is an empty string (<code>""</code>), 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then a simple conversion is performed on the codepage-invariant 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subset ("invariant characters") of the platform encoding. See utypes.h. 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <TT>target</TT> is NULL, then the number of bytes required for 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>target</TT> is returned. 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the output string length, not including the terminating NUL 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t extract(int32_t start, 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t startLength, 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *target, 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t targetLength, 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *codepage) const; 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the UnicodeString into a codepage string using an existing UConverter. 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The output string is NUL-terminated if possible. 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function avoids the overhead of opening and closing a converter if 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * multiple strings are extracted. 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dest destination string buffer, can be NULL if destCapacity==0 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param destCapacity the number of chars available at dest 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called), 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or NULL for the default converter 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param errorCode normal ICU error code 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the output string, not counting the terminating NUL; 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if the length is greater than destCapacity, then the string will not fit 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a buffer of the indicated length would need to be passed in 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t extract(char *dest, int32_t destCapacity, 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UConverter *cnv, 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &errorCode) const; 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create a temporary substring for the specified range. 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unlike the substring constructor and setTo() functions, 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the object returned here will be a read-only alias (using getBuffer()) 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * rather than copying the text. 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * As a result, this substring operation is much faster but requires 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that the original string not be modified or deleted during the lifetime 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the returned substring object. 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of the first character visible in the substring 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length length of the substring 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a read-only alias UnicodeString object for the substring 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString tempSubString(int32_t start=0, int32_t length=INT32_MAX) const; 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create a temporary substring for the specified range. 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Same as tempSubString(start, length) except that the substring range 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is specified as a (start, limit) pair (with an exclusive limit index) 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * rather than a (start, length) pair. 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start offset of the first character visible in the substring 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit offset immediately following the last character visible in the substring 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a read-only alias UnicodeString object for the substring 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString tempSubStringBetween(int32_t start, int32_t limit=INT32_MAX) const; 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the UnicodeString to UTF-8 and write the result 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to a ByteSink. This is called by toUTF8String(). 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unpaired surrogates are replaced with U+FFFD. 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls u_strToUTF8WithSub(). 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sink A ByteSink to which the UTF-8 version of the string is written. 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * sink.Flush() is called at the end. 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see toUTF8String 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void toUTF8(ByteSink &sink) const; 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_HAVE_STD_STRING 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the UnicodeString to UTF-8 and append the result 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to a standard string. 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unpaired surrogates are replaced with U+FFFD. 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls toUTF8(). 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A standard string (or a compatible object) 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to which the UTF-8 version of the string is appended. 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The string object. 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see toUTF8 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org template<typename StringClass> 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringClass &toUTF8String(StringClass &result) const { 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringByteSink<StringClass> sbs(&result); 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org toUTF8(sbs); 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the UnicodeString to UTF-32. 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unpaired surrogates are replaced with U+FFFD. 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls u_strToUTF32WithSub(). 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param utf32 destination string buffer, can be NULL if capacity==0 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param capacity the number of UChar32s available at utf32 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param errorCode Standard ICU error code. Its input value must 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pass the U_SUCCESS() test, or else the function returns 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * immediately. Check for U_FAILURE() on output or use with 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * function chaining. (See User Guide for details.) 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The length of the UTF-32 string. 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see fromUTF32 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) const; 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Length operations */ 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the length of the UnicodeString object. 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The length is the number of UChar code units are in the UnicodeString. 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If you want the number of code points, please use countChar32(). 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the UnicodeString object 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see countChar32 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t length(void) const; 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Count Unicode code points in the length UChar code units of the string. 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A code point may occupy either one or two UChar code units. 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Counting code points involves reading all code units. 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This functions is basically the inverse of moveIndex32(). 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the index of the first code unit to check 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of UChar code units to check 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the number of code points in the specified code units 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see length 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org countChar32(int32_t start=0, int32_t length=INT32_MAX) const; 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Check if the length UChar code units of the string 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * contain more Unicode code points than a certain number. 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is more efficient than counting all code points in this part of the string 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and comparing that number with a threshold. 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may not need to scan the string at all if the length 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * falls within a certain range, and 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * never needs to count more than 'number+1' code points. 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Logically equivalent to (countChar32(start, length)>number). 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A Unicode code point may occupy either one or two UChar code units. 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the index of the first code unit to check (0 for the entire string) 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of UChar code units to check 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (use INT32_MAX for the entire string; remember that start/length 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * values are pinned) 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number The number of code points in the (sub)string is compared against 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the 'number' parameter. 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return Boolean value for whether the string contains more Unicode code points 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * than 'number'. Same as (u_countChar32(s, length)>number). 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see countChar32 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_strHasMoreChar32Than 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hasMoreChar32Than(int32_t start, int32_t length, int32_t number) const; 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this string is empty. 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this string contains 0 characters, FALSE otherwise. 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool isEmpty(void) const; 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the capacity of the internal buffer of the UnicodeString object. 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is useful together with the getBuffer functions. 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See there for details. 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the number of UChars available in the internal buffer 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getBuffer 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t getCapacity(void) const; 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Other operations */ 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Generate a hash code for this object. 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The hash code of this UnicodeString. 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t hashCode(void) const; 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Determine if this object contains a valid string. 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A bogus string has no value. It is different from an empty string, 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * although in both cases isEmpty() returns TRUE and length() returns 0. 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * setToBogus() and isBogus() can be used to indicate that no string value is available. 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length() returns 0. 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the string is bogus/invalid, FALSE otherwise 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see setToBogus() 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool isBogus(void) const; 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Write operations 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Assignment operations */ 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Assignment operator. Replace the characters in this UnicodeString 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the characters from <TT>srcText</TT>. 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText The text containing the characters to replace 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &operator=(const UnicodeString &srcText); 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Almost the same as the assignment operator. 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in this UnicodeString 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the characters from <code>srcText</code>. 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function works the same as the assignment operator 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for all strings except for ones that are readonly aliases. 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Starting with ICU 2.4, the assignment operator and the copy constructor 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * allocate a new buffer and copy the buffer contents even for readonly aliases. 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function implements the old, more efficient but less safe behavior 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of making this string also a readonly alias to the same buffer. 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The fastCopyFrom function must be used only if it is known that the lifetime of 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this UnicodeString does not exceed the lifetime of the aliased buffer 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * including its contents, for example for strings from resource bundles 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or aliases to string constants. 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param src The text containing the characters to replace. 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &fastCopyFrom(const UnicodeString &src); 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Assignment operator. Replace the characters in this UnicodeString 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the code unit <TT>ch</TT>. 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the code unit to replace 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& operator= (UChar ch); 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Assignment operator. Replace the characters in this UnicodeString 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the code point <TT>ch</TT>. 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the code point to replace 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& operator= (UChar32 ch); 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the text in the UnicodeString object to the characters 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcText.length()</TT>). 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> is not modified. 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> where new characters 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& setTo(const UnicodeString& srcText, 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart); 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the text in the UnicodeString object to the characters 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> is not modified. 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> where new characters 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> in the 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replace string. 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& setTo(const UnicodeString& srcText, 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the text in the UnicodeString object to the characters in 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT>. 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> is not modified. 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& setTo(const UnicodeString& srcText); 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the characters in the UnicodeString object to the characters 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcChars</TT>. <TT>srcChars</TT> is not modified. 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of Unicode characters in srcChars. 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& setTo(const UChar *srcChars, 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the characters in the UnicodeString object to the code unit 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChar</TT>. 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code unit which becomes the UnicodeString's character 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * content 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& setTo(UChar srcChar); 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the characters in the UnicodeString object to the code point 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChar</TT>. 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code point which becomes the UnicodeString's character 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * content 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& setTo(UChar32 srcChar); 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Aliasing setTo() function, analogous to the readonly-aliasing UChar* constructor. 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The text will be used for the UnicodeString object, but 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it will not be released when the UnicodeString is destroyed. 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This has copy-on-write semantics: 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When the string is modified, then the buffer is first copied into 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * newly allocated memory. 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The aliased buffer is never modified. 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In an assignment to another UnicodeString, when using the copy constructor 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or the assignment operator, the text will be copied. 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When using fastCopyFrom(), the text will be aliased again, 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that both strings then alias the same readonly-text. 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param isTerminated specifies if <code>text</code> is <code>NUL</code>-terminated. 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This must be true if <code>textLength==-1</code>. 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The characters to alias for the UnicodeString. 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param textLength The number of Unicode characters in <code>text</code> to alias. 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If -1, then this constructor will determine the length 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by calling <code>u_strlen()</code>. 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &setTo(UBool isTerminated, 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *text, 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength); 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Aliasing setTo() function, analogous to the writable-aliasing UChar* constructor. 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The text will be used for the UnicodeString object, but 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it will not be released when the UnicodeString is destroyed. 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This has write-through semantics: 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For as long as the capacity of the buffer is sufficient, write operations 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will directly affect the buffer. When more capacity is necessary, then 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a new buffer will be allocated and the contents copied as with regularly 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructed strings. 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In an assignment to another UnicodeString, the buffer will be copied. 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The extract(UChar *dst) function detects whether the dst pointer is the same 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as the string buffer itself and will in this case not copy the contents. 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffer The characters to alias for the UnicodeString. 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffLength The number of Unicode characters in <code>buffer</code> to alias. 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffCapacity The size of <code>buffer</code> in UChars. 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &setTo(UChar *buffer, 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t buffLength, 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t buffCapacity); 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make this UnicodeString object invalid. 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The string will test TRUE with isBogus(). 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A bogus string has no value. It is different from an empty string. 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It can be used to indicate that no string value is available. 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getBuffer() and getTerminatedBuffer() return NULL, and 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length() returns 0. 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This utility function is used throughout the UnicodeString 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * implementation to indicate that a UnicodeString operation failed, 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and may be used in other functions, 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * especially but not exclusively when such functions do not 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * take a UErrorCode for simplicity. 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following methods, and no others, will clear a string object's bogus flag: 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - remove() 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - remove(0, INT32_MAX) 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - truncate(0) 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - operator=() (assignment operator) 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - setTo(...) 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The simplest ways to turn a bogus string into an empty one 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is to use the remove() function. 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Examples for other functions that are equivalent to "set to empty string": 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if(s.isBogus()) { 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s.remove(); // set to an empty string (remove all), or 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s.remove(0, INT32_MAX); // set to an empty string (remove all), or 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s.truncate(0); // set to an empty string (complete truncation), or 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s=UnicodeString(); // assign an empty string, or 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s.setTo((UChar32)-1); // set to a pseudo code point that is out of range, or 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * static const UChar nul=0; 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * s.setTo(&nul, 0); // set to an empty C Unicode string 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see isBogus() 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setToBogus(); 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the character at the specified offset to the specified character. 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset A valid offset into the text of the character to set 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch The new character 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& setCharAt(int32_t offset, 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ch); 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Append operations */ 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append operator. Append the code unit <TT>ch</TT> to the UnicodeString 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object. 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the code unit to be appended 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& operator+= (UChar ch); 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append operator. Append the code point <TT>ch</TT> to the UnicodeString 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object. 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the code point to be appended 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& operator+= (UChar32 ch); 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append operator. Append the characters in <TT>srcText</TT> to the 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString object. <TT>srcText</TT> is not modified. 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& operator+= (const UnicodeString& srcText); 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the characters 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> in the range 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString object at offset <TT>start</TT>. <TT>srcText</TT> 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is not modified. 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> where new characters 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> in 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the append string 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& append(const UnicodeString& srcText, 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the characters in <TT>srcText</TT> to the UnicodeString object. 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> is not modified. 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& append(const UnicodeString& srcText); 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the characters in <TT>srcChars</TT> in the range 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the UnicodeString 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object at offset 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start</TT>. <TT>srcChars</TT> is not modified. 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> where new characters 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> in 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the append string; can be -1 if <TT>srcChars</TT> is NUL-terminated 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& append(const UChar *srcChars, 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the characters in <TT>srcChars</TT> to the UnicodeString object 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at offset <TT>start</TT>. <TT>srcChars</TT> is not modified. 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of Unicode characters in <TT>srcChars</TT>; 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * can be -1 if <TT>srcChars</TT> is NUL-terminated 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& append(const UChar *srcChars, 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the code unit <TT>srcChar</TT> to the UnicodeString object. 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code unit to append 21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& append(UChar srcChar); 21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Append the code point <TT>srcChar</TT> to the UnicodeString object. 21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code point to append 21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& append(UChar32 srcChar); 21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Insert operations */ 21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the characters in <TT>srcText</TT> in the range 21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString 21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object at offset <TT>start</TT>. <TT>srcText</TT> is not modified. 21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset where the insertion begins 21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> where new characters 21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> in 21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the insert string 21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the characters in <TT>srcText</TT> into the UnicodeString object 21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at offset <TT>start</TT>. <TT>srcText</TT> is not modified. 21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset where the insertion begins 21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText); 21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the characters in <TT>srcChars</TT> in the range 21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString 21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object at offset <TT>start</TT>. <TT>srcChars</TT> is not modified. 21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the insertion begins 21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> where new characters 21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the insert string 21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the characters in <TT>srcChars</TT> into the UnicodeString object 21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at offset <TT>start</TT>. <TT>srcChars</TT> is not modified. 21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset where the insertion begins 21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of Unicode characters in srcChars. 21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the code unit <TT>srcChar</TT> into the UnicodeString object at 22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * offset <TT>start</TT>. 22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the insertion occurs 22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code unit to insert 22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar srcChar); 22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Insert the code point <TT>srcChar</TT> into the UnicodeString object at 22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * offset <TT>start</TT>. 22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the insertion occurs 22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the code point to insert 22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& insert(int32_t start, 22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 srcChar); 22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Replace operations */ 22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters in 22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> in the range 22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). 22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcText</TT> is not modified. 22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to replace. The character at 22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcText</TT> where new characters 22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcText</TT> in 22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the replace string 22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& replace(int32_t start, 22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) 22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the characters in <TT>srcText</TT>. <TT>srcText</TT> is 22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * not modified. 22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to replace. The character at 22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& replace(int32_t start, 22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText); 22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters in 22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChars</TT> in the range 22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). <TT>srcChars</TT> 22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is not modified. 22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 22716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to replace. The character at 22726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 22736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 22746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> where new characters 22756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 22766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of characters in <TT>srcChars</TT> 22776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the replace string 22786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& replace(int32_t start, 22826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 22836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 22846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 22856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 22866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 22886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 22896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the characters in 22906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChars</TT>. <TT>srcChars</TT> is not modified. 22916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 22926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length number of characters to replace. The character at 22936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 22946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChars the source for the new characters 22956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength the number of Unicode characters in srcChars 22966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 22976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 22986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& replace(int32_t start, 23006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 23016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 23026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 23036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 23066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the code unit 23076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChar</TT>. 23086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 23096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to replace. The character at 23106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 23116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the new code unit 23126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 23136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 23146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& replace(int32_t start, 23166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 23176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar srcChar); 23186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range 23216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) with the code point 23226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>srcChar</TT>. 23236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 23246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to replace. The character at 23256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <TT>start + length</TT> is not modified. 23266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcChar the new code point 23276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 23286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 23296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& replace(int32_t start, int32_t length, UChar32 srcChar); 23316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range [<TT>start</TT>, <TT>limit</TT>) 23346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the characters in <TT>srcText</TT>. <TT>srcText</TT> is not modified. 23356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 23366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the offset immediately following the replace range 23376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 23386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 23396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 23406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& replaceBetween(int32_t start, 23426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 23436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText); 23446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace the characters in the range [<TT>start</TT>, <TT>limit</TT>) 23476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with the characters in <TT>srcText</TT> in the range 23486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>srcStart</TT>, <TT>srcLimit</TT>). <TT>srcText</TT> is not modified. 23496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset at which the replace operation begins 23506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the offset immediately following the replace range 23516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcText the source for the new characters 23526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart the offset into <TT>srcChars</TT> where new characters 23536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be obtained 23546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLimit the offset immediately following the range to copy 23556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in <TT>srcText</TT> 23566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 23576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 23586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& replaceBetween(int32_t start, 23606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 23616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 23626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 23636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit); 23646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace a substring of this object with the given text. 23676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the beginning index, inclusive; <code>0 <= start 23686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <= limit</code>. 23696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the ending index, exclusive; <code>start <= limit 23706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <= length()</code>. 23716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text the text to replace characters <code>start</code> 23726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to <code>limit - 1</code> 23736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 23746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void handleReplaceBetween(int32_t start, 23766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 23776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& text); 23786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replaceable API 23816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if it has MetaData 23826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 23836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool hasMetaData() const; 23856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 23876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy a substring of this object, retaining attribute (out-of-band) 23886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * information. This method is used to duplicate or reorder substrings. 23896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The destination index must not overlap the source range. 23906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 23916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the beginning index, inclusive; <code>0 <= start <= 23926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * limit</code>. 23936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the ending index, exclusive; <code>start <= limit <= 23946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length()</code>. 23956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dest the destination index. The characters from 23966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>start..limit-1</code> will be copied to <code>dest</code>. 23976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Implementations of this method may assume that <code>dest <= start || 23986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * dest >= limit</code>. 23996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void copy(int32_t start, int32_t limit, int32_t dest); 24026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Search and replace operations */ 24046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace all occurrences of characters in oldText with the characters 24076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in newText 24086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param oldText the text containing the search text 24096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newText the text containing the replacement text 24106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& findAndReplace(const UnicodeString& oldText, 24146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& newText); 24156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace all occurrences of characters in oldText with characters 24186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in newText 24196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>). 24206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the start of the range in which replace will performed 24216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the length of the range in which replace will be performed 24226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param oldText the text containing the search text 24236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newText the text containing the replacement text 24246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& findAndReplace(int32_t start, 24286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 24296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& oldText, 24306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& newText); 24316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Replace all occurrences of characters in oldText in the range 24346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>oldStart</TT>, <TT>oldStart + oldLength</TT>) with the characters 24356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in newText in the range 24366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>newStart</TT>, <TT>newStart + newLength</TT>) 24376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the range [<TT>start</TT>, <TT>start + length</TT>). 24386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the start of the range in which replace will performed 24396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the length of the range in which replace will be performed 24406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param oldText the text containing the search text 24416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param oldStart the start of the search range in <TT>oldText</TT> 24426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param oldLength the length of the search range in <TT>oldText</TT> 24436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newText the text containing the replacement text 24446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newStart the start of the replacement range in <TT>newText</TT> 24456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newLength the length of the replacement range in <TT>newText</TT> 24466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& findAndReplace(int32_t start, 24506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 24516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& oldText, 24526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t oldStart, 24536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t oldLength, 24546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& newText, 24556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t newStart, 24566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t newLength); 24576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Remove operations */ 24606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Remove all characters from the UnicodeString object. 24636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& remove(void); 24676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Remove the characters in the range 24706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>start + length</TT>) from the UnicodeString object. 24716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset of the first character to remove 24726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to remove 24736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& remove(int32_t start, 24776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length = (int32_t)INT32_MAX); 24786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Remove the characters in the range 24816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<TT>start</TT>, <TT>limit</TT>) from the UnicodeString object. 24826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset of the first character to remove 24836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the offset immediately following the range to remove 24846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 24866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& removeBetween(int32_t start, 24886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit = (int32_t)INT32_MAX); 24896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 24916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Retain only the characters in the range 24926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * [<code>start</code>, <code>limit</code>) from the UnicodeString object. 24936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Removes characters before <code>start</code> and at and after <code>limit</code>. 24946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the offset of the first character to retain 24956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param limit the offset immediately following the range to retain 24966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 24976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 24986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 24996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString &retainBetween(int32_t start, int32_t limit = INT32_MAX); 25006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Length operations */ 25026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Pad the start of this UnicodeString with the character <TT>padChar</TT>. 25056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the length of this UnicodeString is less than targetLength, 25066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length() - targetLength copies of padChar will be added to the 25076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * beginning of this UnicodeString. 25086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetLength the desired length of the string 25096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param padChar the character to use for padding. Defaults to 25106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * space (U+0020) 25116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the text was padded, FALSE otherwise. 25126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool padLeading(int32_t targetLength, 25156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar padChar = 0x0020); 25166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Pad the end of this UnicodeString with the character <TT>padChar</TT>. 25196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the length of this UnicodeString is less than targetLength, 25206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length() - targetLength copies of padChar will be added to the 25216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * end of this UnicodeString. 25226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetLength the desired length of the string 25236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param padChar the character to use for padding. Defaults to 25246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * space (U+0020) 25256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the text was padded, FALSE otherwise. 25266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool padTrailing(int32_t targetLength, 25296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar padChar = 0x0020); 25306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Truncate this UnicodeString to the <TT>targetLength</TT>. 25336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param targetLength the desired length of this UnicodeString. 25346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the text was truncated, FALSE otherwise 25356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool truncate(int32_t targetLength); 25386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Trims leading and trailing whitespace from this UnicodeString. 25416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 25426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& trim(void); 25456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Miscellaneous operations */ 25486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Reverse this UnicodeString in place. 25516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 25526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& reverse(void); 25556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Reverse the range [<TT>start</TT>, <TT>start + length</TT>) in 25586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this UnicodeString. 25596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param start the start of the range to reverse 25606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length the number of characters to to reverse 25616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to this 25626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& reverse(int32_t start, 25656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length); 25666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the characters in this to UPPER CASE following the conventions of 25696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the default locale. 25706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 25716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& toUpper(void); 25746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the characters in this to UPPER CASE following the conventions of 25776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a specific locale. 25786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale containing the conventions to use. 25796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 25806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& toUpper(const Locale& locale); 25836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the characters in this to lower case following the conventions of 25866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the default locale. 25876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 25886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& toLower(void); 25916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 25936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the characters in this to lower case following the conventions of 25946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a specific locale. 25956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale containing the conventions to use. 25966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 25976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 25986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 25996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& toLower(const Locale& locale); 26006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 26026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 26046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecase this string, convenience function using the default locale. 26056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Casing is locale-dependent and context-sensitive. 26076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecasing uses a break iterator to find the first characters of words 26086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. It titlecases those characters and lowercases 26096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * all others. 26106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The titlecase break iterator can be provided to customize for arbitrary 26126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * styles, using rules and dictionaries beyond the standard iterators. 26136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It may be more efficient to always provide an iterator to avoid 26146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * opening and closing one for each string. 26156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The standard titlecase iterator for the root locale implements the 26166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * algorithm of Unicode TR 21. 26176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function uses only the setText(), first() and next() methods of the 26196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * provided break iterator. 26206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param titleIter A break iterator to find the first characters of words 26226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. 26236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If none is provided (0), then a standard titlecase 26246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * break iterator is opened. 26256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Otherwise the provided iterator is set to the string's text. 26266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 26276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.1 26286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 26296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &toTitle(BreakIterator *titleIter); 26306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 26326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecase this string. 26336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Casing is locale-dependent and context-sensitive. 26356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecasing uses a break iterator to find the first characters of words 26366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. It titlecases those characters and lowercases 26376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * all others. 26386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The titlecase break iterator can be provided to customize for arbitrary 26406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * styles, using rules and dictionaries beyond the standard iterators. 26416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It may be more efficient to always provide an iterator to avoid 26426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * opening and closing one for each string. 26436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The standard titlecase iterator for the root locale implements the 26446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * algorithm of Unicode TR 21. 26456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function uses only the setText(), first() and next() methods of the 26476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * provided break iterator. 26486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param titleIter A break iterator to find the first characters of words 26506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. 26516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If none is provided (0), then a standard titlecase 26526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * break iterator is opened. 26536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Otherwise the provided iterator is set to the string's text. 26546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale to consider. 26556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 26566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.1 26576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 26586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale); 26596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 26616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecase this string, with options. 26626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Casing is locale-dependent and context-sensitive. 26646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Titlecasing uses a break iterator to find the first characters of words 26656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. It titlecases those characters and lowercases 26666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * all others. (This can be modified with options.) 26676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The titlecase break iterator can be provided to customize for arbitrary 26696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * styles, using rules and dictionaries beyond the standard iterators. 26706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It may be more efficient to always provide an iterator to avoid 26716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * opening and closing one for each string. 26726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The standard titlecase iterator for the root locale implements the 26736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * algorithm of Unicode TR 21. 26746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function uses only the setText(), first() and next() methods of the 26766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * provided break iterator. 26776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param titleIter A break iterator to find the first characters of words 26796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are to be titlecased. 26806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If none is provided (0), then a standard titlecase 26816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * break iterator is opened. 26826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Otherwise the provided iterator is set to the string's text. 26836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale to consider. 26846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options Options bit set, see ucasemap_open(). 26856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 26866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U_TITLECASE_NO_LOWERCASE 26876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U_TITLECASE_NO_BREAK_ADJUSTMENT 26886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see ucasemap_open 26896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.8 26906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 26916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options); 26926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 26946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 26966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Case-folds the characters in this string. 26976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 26986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Case-folding is locale-independent and not context-sensitive, 26996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but there is an option for whether to include or exclude mappings for dotted I 27006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and dotless i that are marked with 'T' in CaseFolding.txt. 27016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The result may be longer or shorter than the original. 27036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I 27056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to this. 27066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 27076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 27086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &foldCase(uint32_t options=0 /*U_FOLD_CASE_DEFAULT*/); 27096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 27116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Access to the internal buffer 27126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 27136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 27156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Get a read/write pointer to the internal buffer. 27166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer is guaranteed to be large enough for at least minCapacity UChars, 27176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * writable, and is still owned by the UnicodeString object. 27186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls to getBuffer(minCapacity) must not be nested, and 27196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be matched with calls to releaseBuffer(newLength). 27206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the string buffer was read-only or shared, 27216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then it will be reallocated and copied. 27226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * An attempted nested call will return 0, and will not further modify the 27246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * state of the UnicodeString object. 27256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It also returns 0 if the string is bogus. 27266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The actual capacity of the string buffer may be larger than minCapacity. 27286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getCapacity() returns the actual capacity. 27296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For many operations, the full capacity should be used to avoid reallocations. 27306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * While the buffer is "open" between getBuffer(minCapacity) 27326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and releaseBuffer(newLength), the following applies: 27336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - The string length is set to 0. 27346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - Any read API call on the UnicodeString object will behave like on a 0-length string. 27356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - Any write API call on the UnicodeString object is disallowed and will have no effect. 27366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - You can read from and write to the returned buffer. 27376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - The previous string contents will still be in the buffer; 27386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if you want to use it, then you need to call length() before getBuffer(minCapacity). 27396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the length() was greater than minCapacity, then any contents after minCapacity 27406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * may be lost. 27416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer contents is not NUL-terminated by getBuffer(). 27426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If length()<getCapacity() then you can terminate it by writing a NUL 27436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at index length(). 27446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - You must call releaseBuffer(newLength) before and in order to 27456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return to normal UnicodeString operation. 27466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param minCapacity the minimum number of UChars that are to be available 27486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the buffer, starting at the returned pointer; 27496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * default to the current string capacity if minCapacity==-1 27506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a writable pointer to the internal string buffer, 27516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or 0 if an error occurs (nested calls, out of memory) 27526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see releaseBuffer 27546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getTerminatedBuffer() 27556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 27566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 27576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *getBuffer(int32_t minCapacity); 27586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 27606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Release a read/write buffer on a UnicodeString object with an 27616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "open" getBuffer(minCapacity). 27626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function must be called in a matched pair with getBuffer(minCapacity). 27636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * releaseBuffer(newLength) must be called if and only if a getBuffer(minCapacity) is "open". 27646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It will set the string length to newLength, at most to the current capacity. 27666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If newLength==-1 then it will set the length according to the 27676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * first NUL in the buffer, or to the capacity if there is no NUL. 27686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * After calling releaseBuffer(newLength) the UnicodeString is back to normal operation. 27706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newLength the new length of the UnicodeString object; 27726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * defaults to the current capacity if newLength is greater than that; 27736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if newLength==-1, it defaults to u_strlen(buffer) but not more than 27746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the current capacity of the string 27756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getBuffer(int32_t minCapacity) 27776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 27786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 27796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void releaseBuffer(int32_t newLength=-1); 27806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 27826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Get a read-only pointer to the internal buffer. 27836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be called at any time on a valid UnicodeString. 27846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It returns 0 if the string is bogus, or 27866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * during an "open" getBuffer(minCapacity). 27876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It can be called as many times as desired. 27896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The pointer that it returns will remain valid until the UnicodeString object is modified, 27906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at which time the pointer is semantically invalidated and must not be used any more. 27916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The capacity of the buffer can be determined with getCapacity(). 27936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The part after length() may or may not be initialized and valid, 27946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * depending on the history of the UnicodeString object. 27956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 27966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer contents is (probably) not NUL-terminated. 27976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can check if it is with 27986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>(s.length()<s.getCapacity() && buffer[s.length()]==0)</code>. 27996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (See getTerminatedBuffer().) 28006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer may reside in read-only memory. Its contents must not 28026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * be modified. 28036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a read-only pointer to the internal string buffer, 28056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or 0 if the string is empty or bogus 28066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getBuffer(int32_t minCapacity) 28086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getTerminatedBuffer() 28096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 28106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline const UChar *getBuffer() const; 28126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 28146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Get a read-only pointer to the internal buffer, 28156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * making sure that it is NUL-terminated. 28166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be called at any time on a valid UnicodeString. 28176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It returns 0 if the string is bogus, or 28196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * during an "open" getBuffer(minCapacity), or if the buffer cannot 28206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * be NUL-terminated (because memory allocation failed). 28216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It can be called as many times as desired. 28236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The pointer that it returns will remain valid until the UnicodeString object is modified, 28246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at which time the pointer is semantically invalidated and must not be used any more. 28256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The capacity of the buffer can be determined with getCapacity(). 28276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The part after length()+1 may or may not be initialized and valid, 28286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * depending on the history of the UnicodeString object. 28296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer contents is guaranteed to be NUL-terminated. 28316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getTerminatedBuffer() may reallocate the buffer if a terminating NUL 28326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is written. 28336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For this reason, this function is not const, unlike getBuffer(). 28346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note that a UnicodeString may also contain NUL characters as part of its contents. 28356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer may reside in read-only memory. Its contents must not 28376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * be modified. 28386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a read-only pointer to the internal string buffer, 28406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or 0 if the string is empty or bogus 28416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getBuffer(int32_t minCapacity) 28436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getBuffer() 28446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 28456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *getTerminatedBuffer(); 28476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 28496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Constructors 28506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 28516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** Construct an empty UnicodeString. 28536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 28546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString(); 28566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 28586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Construct a UnicodeString with capacity to hold <TT>capacity</TT> UChars 28596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param capacity the number of UChars this UnicodeString should hold 28606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * before a resize is necessary; if count is greater than 0 and count 28616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * code points c take up more space than capacity, then capacity is adjusted 28626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * accordingly. 28636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param c is used to initially fill the string 28646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count specifies how many code points c are to be written in the 28656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string 28666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 28676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(int32_t capacity, UChar32 c, int32_t count); 28696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 28716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Single UChar (code unit) constructor. 28726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is recommended to mark this constructor "explicit" by 28746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code> 28756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on the compiler command line or similar. 28766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the character to place in the UnicodeString 28776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 28786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar ch); 28806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 28826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Single UChar32 (code point) constructor. 28836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is recommended to mark this constructor "explicit" by 28856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code> 28866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on the compiler command line or similar. 28876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ch the character to place in the UnicodeString 28886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 28896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 28906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar32 ch); 28916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 28936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar* constructor. 28946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 28956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is recommended to mark this constructor "explicit" by 28966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code> 28976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on the compiler command line or similar. 28986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The characters to place in the UnicodeString. <TT>text</TT> 28996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be NULL (U+0000) terminated. 29006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNISTR_FROM_STRING_EXPLICIT UnicodeString(const UChar *text); 29036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar* constructor. 29066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The characters to place in the UnicodeString. 29076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param textLength The number of Unicode characters in <TT>text</TT> 29086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to copy. 29096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const UChar *text, 29126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength); 29136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Readonly-aliasing UChar* constructor. 29166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The text will be used for the UnicodeString object, but 29176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it will not be released when the UnicodeString is destroyed. 29186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This has copy-on-write semantics: 29196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When the string is modified, then the buffer is first copied into 29206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * newly allocated memory. 29216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The aliased buffer is never modified. 29226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 29236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In an assignment to another UnicodeString, when using the copy constructor 29246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or the assignment operator, the text will be copied. 29256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When using fastCopyFrom(), the text will be aliased again, 29266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that both strings then alias the same readonly-text. 29276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 29286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param isTerminated specifies if <code>text</code> is <code>NUL</code>-terminated. 29296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This must be true if <code>textLength==-1</code>. 29306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text The characters to alias for the UnicodeString. 29316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param textLength The number of Unicode characters in <code>text</code> to alias. 29326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If -1, then this constructor will determine the length 29336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by calling <code>u_strlen()</code>. 29346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(UBool isTerminated, 29376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *text, 29386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength); 29396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Writable-aliasing UChar* constructor. 29426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The text will be used for the UnicodeString object, but 29436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it will not be released when the UnicodeString is destroyed. 29446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This has write-through semantics: 29456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For as long as the capacity of the buffer is sufficient, write operations 29466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will directly affect the buffer. When more capacity is necessary, then 29476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a new buffer will be allocated and the contents copied as with regularly 29486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructed strings. 29496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In an assignment to another UnicodeString, the buffer will be copied. 29506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The extract(UChar *dst) function detects whether the dst pointer is the same 29516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as the string buffer itself and will in this case not copy the contents. 29526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 29536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffer The characters to alias for the UnicodeString. 29546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffLength The number of Unicode characters in <code>buffer</code> to alias. 29556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param buffCapacity The size of <code>buffer</code> in UChars. 29566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(UChar *buffer, int32_t buffLength, int32_t buffCapacity); 29596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION 29616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char* constructor. 29646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Uses the default converter (and thus depends on the ICU conversion code) 29656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unless U_CHARSET_IS_UTF8 is set to 1. 29666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 29676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For ASCII (really "invariant character") strings it is more efficient to use 29686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the constructor that takes a US_INV (for its enum EInvariant). 29696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For ASCII (invariant-character) string literals, see UNICODE_STRING and 29706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNICODE_STRING_SIMPLE. 29716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 29726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is recommended to mark this constructor "explicit" by 29736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code> 29746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on the compiler command line or similar. 29756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepageData an array of bytes, null-terminated, 29766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the platform's default codepage. 29776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UNICODE_STRING 29796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UNICODE_STRING_SIMPLE 29806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char *codepageData); 29826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char* constructor. 29856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Uses the default converter (and thus depends on the ICU conversion code) 29866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unless U_CHARSET_IS_UTF8 is set to 1. 29876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepageData an array of bytes in the platform's default codepage. 29886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dataLength The number of bytes in <TT>codepageData</TT>. 29896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 29906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const char *codepageData, int32_t dataLength); 29926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 29946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_CONVERSION 29966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 29986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char* constructor. 29996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepageData an array of bytes, null-terminated 30006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepage the encoding of <TT>codepageData</TT>. The special 30016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value 0 for <TT>codepage</TT> indicates that the text is in the 30026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * platform's default codepage. 30036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage</code> is an empty string (<code>""</code>), 30056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then a simple conversion is performed on the codepage-invariant 30066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subset ("invariant characters") of the platform encoding. See utypes.h. 30076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Recommendation: For invariant-character strings use the constructor 30086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString(const char *src, int32_t length, enum EInvariant inv) 30096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because it avoids object code dependencies of UnicodeString on 30106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the conversion code. 30116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 30136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 30146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const char *codepageData, const char *codepage); 30156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 30176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char* constructor. 30186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepageData an array of bytes. 30196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dataLength The number of bytes in <TT>codepageData</TT>. 30206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param codepage the encoding of <TT>codepageData</TT>. The special 30216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value 0 for <TT>codepage</TT> indicates that the text is in the 30226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * platform's default codepage. 30236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage</code> is an empty string (<code>""</code>), 30246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then a simple conversion is performed on the codepage-invariant 30256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subset ("invariant characters") of the platform encoding. See utypes.h. 30266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Recommendation: For invariant-character strings use the constructor 30276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString(const char *src, int32_t length, enum EInvariant inv) 30286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because it avoids object code dependencies of UnicodeString on 30296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the conversion code. 30306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 30326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 30336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage); 30346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 30366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char * / UConverter constructor. 30376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This constructor uses an existing UConverter object to 30386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * convert the codepage string to Unicode and construct a UnicodeString 30396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * from that. 30406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The converter is reset at first. 30426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the error code indicates a failure before this constructor is called, 30436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or if an error occurs during conversion or construction, 30446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then the string will be bogus. 30456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function avoids the overhead of opening and closing a converter if 30476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * multiple strings are constructed. 30486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param src input codepage string 30506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength length of the input string, can be -1 for NUL-terminated strings 30516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param cnv converter object (ucnv_resetToUnicode() will be called), 30526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * can be NULL for the default converter 30536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param errorCode normal ICU error code 30546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 30556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 30566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString( 30576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *src, int32_t srcLength, 30586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UConverter *cnv, 30596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &errorCode); 30606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 30626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 30646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a Unicode string from an invariant-character char * string. 30656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * About invariant characters see utypes.h. 30666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This constructor has no runtime dependency on conversion code and is 30676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * therefore recommended over ones taking a charset name string 30686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (where the empty string "" indicates invariant-character conversion). 30696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use the macro US_INV as the third, signature-distinguishing parameter. 30716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For example: 30736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code 30746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * void fn(const char *s) { 30756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString ustr(s, -1, US_INV); 30766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * // use ustr ... 30776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 30786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode 30796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param src String using only invariant characters. 30816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length Length of src, or -1 if NUL-terminated. 30826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param inv Signature-distinguishing paramater, use US_INV. 30836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see US_INV 30856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.2 30866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 30876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const char *src, int32_t length, enum EInvariant inv); 30886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 30916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy constructor. 30926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param that The UnicodeString object to copy. 30936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 30946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 30956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const UnicodeString& that); 30966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 30986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 'Substring' constructor from tail of source string. 30996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param src The UnicodeString object to copy. 31006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The offset into <tt>src</tt> at which to start copying. 31016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 31026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const UnicodeString& src, int32_t srcStart); 31046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 31066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 'Substring' constructor from subrange of source string. 31076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param src The UnicodeString object to copy. 31086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcStart The offset into <tt>src</tt> at which to start copying. 31096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param srcLength The number of characters from <tt>src</tt> to copy. 31106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 31116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(const UnicodeString& src, int32_t srcStart, int32_t srcLength); 31136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 31156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clone this object, an instance of a subclass of Replaceable. 31166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clones can be used concurrently in multiple threads. 31176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If a subclass does not implement clone(), or if an error occurs, 31186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then NULL is returned. 31196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The clone functions in all subclasses return a pointer to a Replaceable 31206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because some compilers do not support covariant (same-as-this) 31216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return types; cast to the appropriate subclass if necessary. 31226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The caller must delete the clone. 31236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a clone of this object 31256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see Replaceable::clone 31276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getDynamicClassID 31286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.6 31296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Replaceable *clone() const; 31316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** Destructor. 31336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 31346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~UnicodeString(); 31366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 31386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create a UnicodeString from a UTF-8 string. 31396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string. 31406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls u_strFromUTF8WithSub(). 31416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param utf8 UTF-8 input string. 31436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note that a StringPiece can be implicitly constructed 31446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * from a std::string or a NUL-terminated const char * string. 31456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A UnicodeString with equivalent UTF-16 contents. 31466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see toUTF8 31476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see toUTF8String 31486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 31496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UnicodeString fromUTF8(const StringPiece &utf8); 31516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 31536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create a UnicodeString from a UTF-32 string. 31546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string. 31556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Calls u_strFromUTF32WithSub(). 31566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param utf32 UTF-32 input string. Must not be NULL. 31586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length Length of the input string, or -1 if NUL-terminated. 31596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A UnicodeString with equivalent UTF-16 contents. 31606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see toUTF32 31616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 31626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UnicodeString fromUTF32(const UChar32 *utf32, int32_t length); 31646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Miscellaneous operations */ 31666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 31686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unescape a string of characters and return a string containing 31696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the result. The following escape sequences are recognized: 31706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\uhhhh 4 hex digits; h in [0-9A-Fa-f] 31726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\Uhhhhhhhh 8 hex digits 31736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\xhh 1-2 hex digits 31746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\ooo 1-3 octal digits; o in [0-7] 31756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\cX control-X; X is masked with 0x1F 31766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as well as the standard ANSI C escapes: 31786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A, 31806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B, 31816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \\" => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C 31826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Anything else following a backslash is generically escaped. For 31846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * example, "[a\\-z]" returns "[a-z]". 31856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If an escape sequence is ill-formed, this method returns an empty 31876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string. An example of an ill-formed sequence is "\\u" followed by 31886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fewer than 4 hex digits. 31896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is similar to u_unescape() but not identical to it. 31916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The latter takes a source char*, so it does escape recognition 31926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and also invariant conversion. 31936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 31946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a string with backslash escapes interpreted, or an 31956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * empty string on error. 31966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UnicodeString#unescapeAt() 31976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_unescape() 31986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_unescapeAt() 31996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 32006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString unescape() const; 32026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unescape a single escape sequence and return the represented 32056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * character. See unescape() for a listing of the recognized escape 32066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * sequences. The character at offset-1 is assumed (without 32076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * checking) to be a backslash. If the escape sequence is 32086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ill-formed, or the offset is out of range, U_SENTINEL=-1 is 32096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * returned. 32106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 32116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset an input output parameter. On input, it is the 32126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * offset into this string where the escape sequence is located, 32136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * after the initial backslash. On output, it is advanced after the 32146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * last character parsed. On error, it is not advanced at all. 32156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the character represented by the escape sequence at 32166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * offset, or U_SENTINEL=-1 on error. 32176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UnicodeString#unescape() 32186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_unescape() 32196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_unescapeAt() 32206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 32216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 unescapeAt(int32_t &offset) const; 32236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU "poor man's RTTI", returns a UClassID for this class. 32266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 32276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 32286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UClassID U_EXPORT2 getStaticClassID(); 32306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU "poor man's RTTI", returns a UClassID for the actual class. 32336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 32346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 32356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID() const; 32376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 32396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Implementation methods 32406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //======================================== 32416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 32436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Implement Replaceable::getLength() (see jitterbug 1027). 32456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 32466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t getLength() const; 32486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The change in Replaceable to use virtual getCharAt() allows 32516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString::charAt() to be inline again (see jitterbug 709). 32526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 32536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UChar getCharAt(int32_t offset) const; 32556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The change in Replaceable to use virtual getChar32At() allows 32586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString::char32At() to be inline again (see jitterbug 709). 32596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 32606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UChar32 getChar32At(int32_t offset) const; 32626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 32646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // For char* constructors. Could be made public. 32656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &setToUTF8(const StringPiece &utf8); 32666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // For extract(char*). 32676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // We could make a toUTF8(target, capacity, errorCode) public but not 32686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // this version: New API will be cleaner if we make callers create substrings 32696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // rather than having start+length on every method, 32706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // and it should take a UErrorCode&. 32716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t 32726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org toUTF8(int32_t start, int32_t len, 32736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *target, int32_t capacity) const; 32746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 32766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Internal string contents comparison, called by operator==. 32776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Requires: this & text not bogus and have same lengths. 32786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool doEquals(const UnicodeString &text, int32_t len) const; 32806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t 32826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doCompare(int32_t start, 32836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 32846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 32856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 32866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 32876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t doCompare(int32_t start, 32896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 32906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 32916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 32926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 32936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t 32956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doCompareCodePointOrder(int32_t start, 32966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 32976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 32986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 32996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 33006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t doCompareCodePointOrder(int32_t start, 33026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 33046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 33056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const; 33066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int8_t 33086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doCaseCompare(int32_t start, 33096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString &srcText, 33116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 33126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 33136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 33146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t 33166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doCaseCompare(int32_t start, 33176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 33196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 33206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 33216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const; 33226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doIndexOf(UChar c, 33246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 33256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 33266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doIndexOf(UChar32 c, 33286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 33296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 33306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doLastIndexOf(UChar c, 33326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 33336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 33346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doLastIndexOf(UChar32 c, 33366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 33376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length) const; 33386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void doExtract(int32_t start, 33406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *dst, 33426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dstStart) const; 33436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void doExtract(int32_t start, 33456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& target) const; 33476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UChar doCharAt(int32_t offset) const; 33496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& doReplace(int32_t start, 33516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 33536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 33546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 33556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& doReplace(int32_t start, 33576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, 33586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 33596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 33606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength); 33616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& doReverse(int32_t start, 33636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length); 33646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // calculate hash code 33666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doHashCode(void) const; 33676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // get pointer to start of array 33696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // these do not check for kOpenGetBuffer, unlike the public getBuffer() function 33706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UChar* getArrayStart(void); 33716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline const UChar* getArrayStart(void) const; 33726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // A UnicodeString object (not necessarily its current buffer) 33746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // is writable unless it isBogus() or it has an "open" getBuffer(minCapacity). 33756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool isWritable() const; 33766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Is the current buffer writable? 33786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UBool isBufferWritable() const; 33796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // None of the following does releaseArray(). 33816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void setLength(int32_t len); // sets only fShortLength and fLength 33826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void setToEmpty(); // sets fFlags=kShortString 33836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void setArray(UChar *array, int32_t len, int32_t capacity); // does not set fFlags 33846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // allocate the array; result may be fStackBuffer 33866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // sets refCount to 1 if appropriate 33876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // sets fArray, fCapacity, and fFlags 33886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // returns boolean for success or failure 33896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool allocate(int32_t capacity); 33906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // release the array if owned 33926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void releaseArray(void); 33936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // turn a bogus string into an empty one 33956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void unBogus(); 33966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // implements assigment operator, copy constructor, and fastCopyFrom() 33986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString ©From(const UnicodeString &src, UBool fastCopy=FALSE); 33996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Pin start and limit to acceptable values. 34016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void pinIndex(int32_t& start) const; 34026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline void pinIndices(int32_t& start, 34036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t& length) const; 34046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_CONVERSION 34066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Internal extract() using UConverter. */ 34086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t doExtract(int32_t start, int32_t length, 34096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *dest, int32_t destCapacity, 34106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UConverter *cnv, 34116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &errorCode) const; 34126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 34146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Real constructor for converting from codepage data. 34156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It assumes that it is called with !fRefCounted. 34166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 34176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage==0</code>, then the default converter 34186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is used for the platform encoding. 34196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If <code>codepage</code> is an empty string (<code>""</code>), 34206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then a simple conversion is performed on the codepage-invariant 34216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subset ("invariant characters") of the platform encoding. See utypes.h. 34226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void doCodepageCreate(const char *codepageData, 34246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dataLength, 34256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *codepage); 34266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 34286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Worker function for creating a UnicodeString from 34296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a codepage string using a UConverter. 34306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void 34326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doCodepageCreate(const char *codepageData, 34336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dataLength, 34346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UConverter *converter, 34356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &status); 34366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 34386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 34406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is called when write access to the array 34416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is necessary. 34426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 34436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * We need to make a copy of the array if 34446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the buffer is read-only, or 34456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the buffer is refCounted (shared), and refCount>1, or 34466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the buffer is too small. 34476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 34486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return FALSE if memory could not be allocated. 34496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool cloneArrayIfNeeded(int32_t newCapacity = -1, 34516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t growCapacity = -1, 34526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool doCopyArray = TRUE, 34536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t **pBufferToDelete = 0, 34546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool forceClone = FALSE); 34556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 34576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Common function for UnicodeString case mappings. 34586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The stringCaseMapper has the same type UStringCaseMapper 34596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as in ustr_imp.h for ustrcase_map(). 34606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString & 34626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org caseMap(const UCaseMap *csm, UStringCaseMapper *stringCaseMapper); 34636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ref counting 34656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void addRef(void); 34666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t removeRef(void); 34676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t refCount(void) const; 34686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // constants 34706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum { 34716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Set the stack buffer size so that sizeof(UnicodeString) is, 34726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // naturally (without padding), a multiple of sizeof(pointer). 34736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org US_STACKBUF_SIZE= sizeof(void *)==4 ? 13 : 15, // Size of stack buffer for short strings 34746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kInvalidUChar=0xffff, // invalid UChar index 34756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kGrowSize=128, // grow size for this buffer 34766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kInvalidHashCode=0, // invalid hash code 34776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kEmptyHashCode=1, // hash code for empty string 34786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // bit flag values for fFlags 34806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kIsBogus=1, // this string is bogus, i.e., not valid or NULL 34816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kUsingStackBuffer=2,// using fUnion.fStackBuffer instead of fUnion.fFields 34826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kRefCounted=4, // there is a refCount field before the characters in fArray 34836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kBufferIsReadonly=8,// do not write to this buffer 34846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kOpenGetBuffer=16, // getBuffer(minCapacity) was called (is "open"), 34856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // and releaseBuffer(newLength) must be called 34866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // combined values for convenience 34886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kShortString=kUsingStackBuffer, 34896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kLongString=kRefCounted, 34906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kReadonlyAlias=kBufferIsReadonly, 34916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kWritableAlias=0 34926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 34936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org friend class StringThreadTest; 34956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org friend class UnicodeStringAppendable; 34966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org union StackBufferOrFields; // forward declaration necessary before friend declaration 34986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org friend union StackBufferOrFields; // make US_STACKBUF_SIZE visible inside fUnion 34996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 35016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following are all the class fields that are stored 35026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in each UnicodeString object. 35036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note that UnicodeString has virtual functions, 35046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * therefore there is an implicit vtable pointer 35056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as the first real field. 35066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The fields should be aligned such that no padding is necessary. 35076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * On 32-bit machines, the size should be 32 bytes, 35086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on 64-bit machines (8-byte pointers), it should be 40 bytes. 35096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * We use a hack to achieve this. 35116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * With at least some compilers, each of the following is forced to 35136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a multiple of sizeof(pointer) [the largest field base unit here is a data pointer], 35146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * rounded up with additional padding if the fields do not already fit that requirement: 35156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - sizeof(class UnicodeString) 35166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - offsetof(UnicodeString, fUnion) 35176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - sizeof(fUnion) 35186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - sizeof(fFields) 35196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In order to avoid padding, we make sizeof(fStackBuffer)=16 (=8 UChars) 35216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which is at least as large as sizeof(fFields) on 32-bit and 64-bit machines. 35226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Padding at the end of fFields is ok: 35236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * As long as there is no padding after fStackBuffer, it is not wasted space.) 35246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * We further assume that the compiler does not reorder the fields, 35266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that fRestOfStackBuffer (which holds a few more UChars) immediately follows after fUnion, 35276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with at most some padding (but no other field) in between. 35286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (Padding there would be wasted space, but functionally harmless.) 35296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * We use a few more sizeof(pointer)'s chunks of space with 35316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fRestOfStackBuffer, fShortLength and fFlags, 35326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to get up exactly to the intended sizeof(UnicodeString). 35336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 35346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // (implicit) *vtable; 35356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org union StackBufferOrFields { 35366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // fStackBuffer is used iff (fFlags&kUsingStackBuffer) 35376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // else fFields is used 35386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar fStackBuffer[8]; // buffer for short strings, together with fRestOfStackBuffer 35396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org struct { 35406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *fArray; // the Unicode data 35416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fCapacity; // capacity of fArray (in UChars) 35426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fLength; // number of characters in fArray if >127; else undefined 35436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } fFields; 35446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } fUnion; 35456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar fRestOfStackBuffer[US_STACKBUF_SIZE-8]; 35466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t fShortLength; // 0..127: length <0: real length is in fUnion.fFields.fLength 35476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint8_t fFlags; // bit flags: see constants above 35486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 35496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 35516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create a new UnicodeString with the concatenation of two others. 35526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 35536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param s1 The first string to be copied to the new one. 35546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param s2 The second string to be copied to the new one, after s1. 35556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return UnicodeString(s1).append(s2) 35566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 35576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 35586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_COMMON_API UnicodeString U_EXPORT2 35596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator+ (const UnicodeString &s1, const UnicodeString &s2); 35606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 35626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Inline members 35636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 35646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 35666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Privates 35676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 35686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 35706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::pinIndex(int32_t& start) const 35716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 35726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // pin index 35736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start < 0) { 35746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = 0; 35756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(start > length()) { 35766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = length(); 35776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 35786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 35796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 35816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::pinIndices(int32_t& start, 35826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t& _length) const 35836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 35846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // pin indices 35856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = length(); 35866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start < 0) { 35876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = 0; 35886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(start > len) { 35896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = len; 35906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 35916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(_length < 0) { 35926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _length = 0; 35936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(_length > (len - start)) { 35946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _length = (len - start); 35956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 35966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 35976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UChar* 35996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::getArrayStart() 36006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; } 36016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline const UChar* 36036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::getArrayStart() const 36046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; } 36056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Default constructor 36086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline 36116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::UnicodeString() 36126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : fShortLength(0), 36136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fFlags(kShortString) 36146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{} 36156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Read-only implementation methods 36186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 36206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::length() const 36216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return fShortLength>=0 ? fShortLength : fUnion.fFields.fLength; } 36226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 36246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::getCapacity() const 36256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (fFlags&kUsingStackBuffer) ? US_STACKBUF_SIZE : fUnion.fFields.fCapacity; } 36266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 36286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::hashCode() const 36296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doHashCode(); } 36306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::isBogus() const 36336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (UBool)(fFlags & kIsBogus); } 36346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::isWritable() const 36376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (UBool)!(fFlags&(kOpenGetBuffer|kIsBogus)); } 36386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::isBufferWritable() const 36416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 36426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UBool)( 36436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !(fFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) && 36446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (!(fFlags&kRefCounted) || refCount()==1)); 36456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 36466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline const UChar * 36486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::getBuffer() const { 36496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fFlags&(kIsBogus|kOpenGetBuffer)) { 36506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 36516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(fFlags&kUsingStackBuffer) { 36526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fUnion.fStackBuffer; 36536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 36546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fUnion.fFields.fArray; 36556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 36566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 36576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Read-only alias methods 36606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 36616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 36626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::doCompare(int32_t start, 36636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t thisLength, 36646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 36656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 36666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 36676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 36686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcText.isBogus()) { 36696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise 36706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 36716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 36726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength); 36736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 36746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 36756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator== (const UnicodeString& text) const 36786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 36796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(isBogus()) { 36806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return text.isBogus(); 36816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 36826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = length(), textLength = text.length(); 36836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return !text.isBogus() && len == textLength && doEquals(text, len); 36846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 36856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 36866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator!= (const UnicodeString& text) const 36896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return (! operator==(text)); } 36906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator> (const UnicodeString& text) const 36936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), text, 0, text.length()) == 1; } 36946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 36966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator< (const UnicodeString& text) const 36976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), text, 0, text.length()) == -1; } 36986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 36996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 37006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator>= (const UnicodeString& text) const 37016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), text, 0, text.length()) != -1; } 37026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 37046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator<= (const UnicodeString& text) const 37056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), text, 0, text.length()) != 1; } 37066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(const UnicodeString& text) const 37096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), text, 0, text.length()); } 37106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(int32_t start, 37136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) const 37156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(start, _length, srcText, 0, srcText.length()); } 37166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(const UChar *srcChars, 37196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, length(), srcChars, 0, srcLength); } 37216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(int32_t start, 37246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 37266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 37276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(start, _length, srcText, srcStart, srcLength); } 37296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(int32_t start, 37326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars) const 37346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(start, _length, srcChars, 0, _length); } 37356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compare(int32_t start, 37386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 37406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 37416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(start, _length, srcChars, srcStart, srcLength); } 37436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareBetween(int32_t start, 37466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 37476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 37486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 37496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit) const 37506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(start, limit - start, 37516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText, srcStart, srcLimit - srcStart); } 37526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::doCompareCodePointOrder(int32_t start, 37556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t thisLength, 37566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 37576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 37586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 37606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcText.isBogus()) { 37616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise 37626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 37636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 37646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompareCodePointOrder(start, thisLength, srcText.getArrayStart(), srcStart, srcLength); 37656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 37666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 37676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(const UnicodeString& text) const 37706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(0, length(), text, 0, text.length()); } 37716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(int32_t start, 37746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) const 37766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); } 37776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(const UChar *srcChars, 37806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); } 37826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(int32_t start, 37856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 37876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 37886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 37896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(start, _length, srcText, srcStart, srcLength); } 37906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(int32_t start, 37936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 37946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars) const 37956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(start, _length, srcChars, 0, _length); } 37966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 37976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 37986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrder(int32_t start, 37996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 38006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 38016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 38036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(start, _length, srcChars, srcStart, srcLength); } 38046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::compareCodePointOrderBetween(int32_t start, 38076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 38086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 38096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit) const 38116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompareCodePointOrder(start, limit - start, 38126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText, srcStart, srcLimit - srcStart); } 38136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::doCaseCompare(int32_t start, 38166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t thisLength, 38176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString &srcText, 38186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 38206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const 38216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 38226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcText.isBogus()) { 38236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise 38246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 38256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 38266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength, options); 38276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 38286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(const UnicodeString &text, uint32_t options) const { 38326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(0, length(), text, 0, text.length(), options); 38336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(int32_t start, 38376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 38386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString &srcText, 38396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, _length, srcText, 0, srcText.length(), options); 38416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(const UChar *srcChars, 38456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 38466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(0, length(), srcChars, 0, srcLength, options); 38486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(int32_t start, 38526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 38536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString &srcText, 38546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 38566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, _length, srcText, srcStart, srcLength, options); 38586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(int32_t start, 38626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 38636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 38646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, _length, srcChars, 0, _length, options); 38666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompare(int32_t start, 38706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 38716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 38726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 38746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, _length, srcChars, srcStart, srcLength, options); 38766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int8_t 38796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::caseCompareBetween(int32_t start, 38806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 38816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString &srcText, 38826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit, 38846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t options) const { 38856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCaseCompare(start, limit - start, srcText, srcStart, srcLimit - srcStart, options); 38866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 38876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 38886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 38896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UnicodeString& srcText, 38906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 38916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 38926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 38936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 38946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 38956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!srcText.isBogus()) { 38966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 38976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength > 0) { 38986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return indexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length); 38996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 39006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 39016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 39026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UnicodeString& text) const 39066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return indexOf(text, 0, text.length(), 0, length()); } 39076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UnicodeString& text, 39106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 39116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 39126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return indexOf(text, 0, text.length(), start, length() - start); 39136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UnicodeString& text, 39176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return indexOf(text, 0, text.length(), start, _length); } 39206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UChar *srcChars, 39236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 39246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 39256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 39266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return indexOf(srcChars, 0, srcLength, start, length() - start); 39276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(const UChar *srcChars, 39316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 39326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return indexOf(srcChars, 0, srcLength, start, _length); } 39356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar c, 39386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doIndexOf(c, start, _length); } 39416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar32 c, 39446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doIndexOf(c, start, _length); } 39476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar c) const 39506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doIndexOf(c, 0, length()); } 39516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar32 c) const 39546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return indexOf(c, 0, length()); } 39556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar c, 39586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 39596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 39606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doIndexOf(c, start, length() - start); 39616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::indexOf(UChar32 c, 39656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 39666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 39676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return indexOf(c, start, length() - start); 39686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UChar *srcChars, 39726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 39736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return lastIndexOf(srcChars, 0, srcLength, start, _length); } 39766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UChar *srcChars, 39796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 39806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 39816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 39826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return lastIndexOf(srcChars, 0, srcLength, start, length() - start); 39836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 39846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 39856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 39866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UnicodeString& srcText, 39876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 39886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, 39896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 39906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 39916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 39926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!srcText.isBogus()) { 39936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 39946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength > 0) { 39956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return lastIndexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length); 39966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 39976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 39986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 39996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UnicodeString& text, 40036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 40046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 40056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return lastIndexOf(text, 0, text.length(), start, _length); } 40066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UnicodeString& text, 40096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 40106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 40116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return lastIndexOf(text, 0, text.length(), start, length() - start); 40126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(const UnicodeString& text) const 40166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return lastIndexOf(text, 0, text.length(), 0, length()); } 40176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar c, 40206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 40216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const 40226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doLastIndexOf(c, start, _length); } 40236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar32 c, 40266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, 40276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) const { 40286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doLastIndexOf(c, start, _length); 40296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar c) const 40336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doLastIndexOf(c, 0, length()); } 40346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar32 c) const { 40376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return lastIndexOf(c, 0, length()); 40386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar c, 40426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 40436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 40446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doLastIndexOf(c, start, length() - start); 40456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 40486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::lastIndexOf(UChar32 c, 40496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start) const { 40506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 40516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return lastIndexOf(c, start, length() - start); 40526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::startsWith(const UnicodeString& text) const 40566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return compare(0, text.length(), text, 0, text.length()) == 0; } 40576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::startsWith(const UnicodeString& srcText, 40606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 40616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const 40626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(0, srcLength, srcText, srcStart, srcLength) == 0; } 40636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::startsWith(const UChar *srcChars, int32_t srcLength) const { 40666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength < 0) { 40676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcLength = u_strlen(srcChars); 40686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 40696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(0, srcLength, srcChars, 0, srcLength) == 0; 40706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::startsWith(const UChar *srcChars, int32_t srcStart, int32_t srcLength) const { 40746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength < 0) { 40756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcLength = u_strlen(srcChars); 40766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 40776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(0, srcLength, srcChars, srcStart, srcLength) == 0; 40786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::endsWith(const UnicodeString& text) const 40826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCompare(length() - text.length(), text.length(), 40836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text, 0, text.length()) == 0; } 40846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::endsWith(const UnicodeString& srcText, 40876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 40886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const { 40896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndices(srcStart, srcLength); 40906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(length() - srcLength, srcLength, 40916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText, srcStart, srcLength) == 0; 40926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 40936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 40946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 40956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::endsWith(const UChar *srcChars, 40966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const { 40976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength < 0) { 40986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcLength = u_strlen(srcChars); 40996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 41006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(length() - srcLength, srcLength, 41016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcChars, 0, srcLength) == 0; 41026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 41036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 41056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::endsWith(const UChar *srcChars, 41066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 41076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) const { 41086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength < 0) { 41096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcLength = u_strlen(srcChars + srcStart); 41106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 41116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doCompare(length() - srcLength, srcLength, 41126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcChars, srcStart, srcLength) == 0; 41136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 41146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 41166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// replace 41176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 41186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replace(int32_t start, 41206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) 41226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, _length, srcText, 0, srcText.length()); } 41236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replace(int32_t start, 41266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 41286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 41296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 41306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, _length, srcText, srcStart, srcLength); } 41316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replace(int32_t start, 41346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 41366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 41376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, _length, srcChars, 0, srcLength); } 41386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replace(int32_t start, 41416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 41436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 41446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 41456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, _length, srcChars, srcStart, srcLength); } 41466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replace(int32_t start, 41496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar srcChar) 41516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, _length, &srcChar, 0, 1); } 41526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replaceBetween(int32_t start, 41556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 41566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) 41576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, limit - start, srcText, 0, srcText.length()); } 41586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::replaceBetween(int32_t start, 41616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 41626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 41636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 41646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLimit) 41656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, limit - start, srcText, srcStart, srcLimit - srcStart); } 41666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::findAndReplace(const UnicodeString& oldText, 41696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& newText) 41706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return findAndReplace(0, length(), oldText, 0, oldText.length(), 41716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org newText, 0, newText.length()); } 41726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 41746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::findAndReplace(int32_t start, 41756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& oldText, 41776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& newText) 41786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return findAndReplace(start, _length, oldText, 0, oldText.length(), 41796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org newText, 0, newText.length()); } 41806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ============================ 41826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// extract 41836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ============================ 41846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 41856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::doExtract(int32_t start, 41866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& target) const 41886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ target.replace(0, target.length(), *this, start, _length); } 41896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 41916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::extract(int32_t start, 41926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 41936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *target, 41946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t targetStart) const 41956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ doExtract(start, _length, target, targetStart); } 41966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 41976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 41986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::extract(int32_t start, 41996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 42006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& target) const 42016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ doExtract(start, _length, target); } 42026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_CONVERSION 42046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t 42066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::extract(int32_t start, 42076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length, 42086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *dst, 42096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *codepage) const 42106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 42126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // This dstSize value will be checked explicitly 42136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return extract(start, _length, dst, dst!=0 ? 0xffffffff : 0, codepage); 42146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 42176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 42196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::extractBetween(int32_t start, 42206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit, 42216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *dst, 42226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dstStart) const { 42236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(start); 42246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pinIndex(limit); 42256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doExtract(start, limit - start, dst, dstStart); 42266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString 42296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const { 42306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return tempSubString(start, limit - start); 42316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UChar 42346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::doCharAt(int32_t offset) const 42356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 42366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((uint32_t)offset < (uint32_t)length()) { 42376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return getArrayStart()[offset]; 42386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 42396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return kInvalidUChar; 42406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 42416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UChar 42446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::charAt(int32_t offset) const 42456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCharAt(offset); } 42466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UChar 42486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator[] (int32_t offset) const 42496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doCharAt(offset); } 42506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 42526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::isEmpty() const { 42536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fShortLength == 0; 42546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 42576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Write implementation methods 42586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//======================================== 42596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 42606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setLength(int32_t len) { 42616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(len <= 127) { 42626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fShortLength = (int8_t)len; 42636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 42646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fShortLength = (int8_t)-1; 42656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fUnion.fFields.fLength = len; 42666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 42676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 42706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setToEmpty() { 42716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fShortLength = 0; 42726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fFlags = kShortString; 42736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void 42766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setArray(UChar *array, int32_t len, int32_t capacity) { 42776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setLength(len); 42786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fUnion.fFields.fArray = array; 42796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fUnion.fFields.fCapacity = capacity; 42806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 42836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator= (UChar ch) 42846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(0, length(), &ch, 0, 1); } 42856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 42876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator= (UChar32 ch) 42886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return replace(0, length(), ch); } 42896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 42916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(const UnicodeString& srcText, 42926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 42936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 42946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 42956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 42966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(0, length(), srcText, srcStart, srcLength); 42976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 42986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 42996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(const UnicodeString& srcText, 43016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart) 43026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 43036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 43046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcText.pinIndex(srcStart); 43056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart); 43066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(const UnicodeString& srcText) 43106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 43116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return copyFrom(srcText); 43126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(const UChar *srcChars, 43166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 43186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 43196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(0, length(), srcChars, 0, srcLength); 43206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(UChar srcChar) 43246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 43256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 43266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(0, length(), &srcChar, 0, 1); 43276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::setTo(UChar32 srcChar) 43316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 43326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 43336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return replace(0, length(), srcChar); 43346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::append(const UnicodeString& srcText, 43386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 43396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, srcText, srcStart, srcLength); } 43416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::append(const UnicodeString& srcText) 43446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, srcText, 0, srcText.length()); } 43456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::append(const UChar *srcChars, 43486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 43496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, srcChars, srcStart, srcLength); } 43516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::append(const UChar *srcChars, 43546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, srcChars, 0, srcLength); } 43566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::append(UChar srcChar) 43596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, &srcChar, 0, 1); } 43606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator+= (UChar ch) 43636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, &ch, 0, 1); } 43646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator+= (UChar32 ch) { 43676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return append(ch); 43686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 43696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::operator+= (const UnicodeString& srcText) 43726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(length(), 0, srcText, 0, srcText.length()); } 43736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 43766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText, 43776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 43786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, 0, srcText, srcStart, srcLength); } 43806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 43836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& srcText) 43846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, 0, srcText, 0, srcText.length()); } 43856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 43886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 43896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcStart, 43906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, 0, srcChars, srcStart, srcLength); } 43926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 43946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 43956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *srcChars, 43966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength) 43976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, 0, srcChars, 0, srcLength); } 43986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 43996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 44016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar srcChar) 44026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, 0, &srcChar, 0, 1); } 44036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::insert(int32_t start, 44066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 srcChar) 44076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return replace(start, 0, srcChar); } 44086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::remove() 44126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 44136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // remove() of a bogus string makes the string empty and non-bogus 44146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(isBogus()) { 44156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setToEmpty(); 44166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 44176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fShortLength = 0; 44186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 44196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 44206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 44216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::remove(int32_t start, 44246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) 44256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 44266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start <= 0 && _length == INT32_MAX) { 44276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus 44286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return remove(); 44296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 44306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(start, _length, NULL, 0, 0); 44316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 44326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::removeBetween(int32_t start, 44356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit) 44366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReplace(start, limit - start, NULL, 0, 0); } 44376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString & 44396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::retainBetween(int32_t start, int32_t limit) { 44406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org truncate(limit); 44416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doReplace(0, start, NULL, 0, 0); 44426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 44436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool 44456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::truncate(int32_t targetLength) 44466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 44476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(isBogus() && targetLength == 0) { 44486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // truncate(0) of a bogus string makes the string empty and non-bogus 44496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unBogus(); 44506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 44516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if((uint32_t)targetLength < (uint32_t)length()) { 44526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setLength(targetLength); 44536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 44546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 44556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 44566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 44576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 44586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::reverse() 44616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReverse(0, length()); } 44626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& 44646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString::reverse(int32_t start, 44656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t _length) 44666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ return doReverse(start, _length); } 44676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 44696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 44706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4471