16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2002-2012, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef STRENUM_H 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define STRENUM_H 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: String Enumeration 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Base class for 'pure' C++ implementations of uenum api. Adds a 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * method that returns the next UnicodeString since in C++ this can 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * be a common storage format for strings. 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The model is that the enumeration is over strings maintained by 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a 'service.' At any point, the service might change, invalidating 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the enumerator (though this is expected to be rare). The iterator 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * returns an error if this has occurred. Lack of the error is no 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * guarantee that the service didn't change immediately after the 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * call, so the returned string still might not be 'valid' on 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subsequent use.</p> 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Strings may take the form of const char*, const UChar*, or const 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString*. The type you get is determine by the variant of 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 'next' that you call. In general the StringEnumeration is 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * optimized for one of these types, but all StringEnumerations can 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return all types. Returned strings are each terminated with a NUL. 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Depending on the service data, they might also include embedded NUL 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters, so API is provided to optionally return the true 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * length, counting the embedded NULs but not counting the terminating 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * NUL.</p> 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The pointers returned by next, unext, and snext become invalid 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * upon any subsequent call to the enumeration's destructor, next, 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unext, snext, or reset.</p> 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU 2.8 adds some default implementations and helper functions 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for subclasses. 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_COMMON_API StringEnumeration : public UObject { 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor. 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~StringEnumeration(); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clone this object, an instance of a subclass of StringEnumeration. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clones can be used concurrently in multiple threads. 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If a subclass does not implement clone(), or if an error occurs, 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then NULL is returned. 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The clone functions in all subclasses return a base class pointer 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because some compilers do not support covariant (same-as-this) 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return types; cast to the appropriate subclass if necessary. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The caller must delete the clone. 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a clone of this object 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getDynamicClassID 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual StringEnumeration *clone() const; 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Return the number of elements that the iterator traverses. If 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the iterator is out of sync with its service, status is set to 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_ENUM_OUT_OF_SYNC_ERROR, and the return value is zero.</p> 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The return value will not change except possibly as a result of 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a subsequent call to reset, or if the iterator becomes out of sync.</p> 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>This is a convenience function. It can end up being very 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * expensive as all the items might have to be pre-fetched 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (depending on the storage format of the data being 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * traversed).</p> 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return number of elements in the iterator. 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 */ 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual int32_t count(UErrorCode& status) const = 0; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Returns the next element as a NUL-terminated char*. If there 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are no more elements, returns NULL. If the resultLength pointer 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is not NULL, the length of the string (not counting the 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * terminating NUL) is returned at that address. If an error 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * status is returned, the value at resultLength is undefined.</p> 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The returned pointer is owned by this iterator and must not be 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * deleted by the caller. The pointer is valid until the next call 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to next, unext, snext, reset, or the enumerator's destructor.</p> 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>If the iterator is out of sync with its service, status is set 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p> 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>If the native service string is a UChar* string, it is 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * converted to char* with the invariant converter. If the 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * conversion fails (because a character cannot be converted) then 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * status is set to U_INVARIANT_CONVERSION_ERROR and the return 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * value is undefined (though not NULL).</p> 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Starting with ICU 2.8, the default implementation calls snext() 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and handles the conversion. 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Either next() or snext() must be implemented differently by a subclass. 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength a pointer to receive the length, can be NULL. 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a pointer to the string, or NULL. 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const char* next(int32_t *resultLength, UErrorCode& status); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Returns the next element as a NUL-terminated UChar*. If there 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are no more elements, returns NULL. If the resultLength pointer 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is not NULL, the length of the string (not counting the 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * terminating NUL) is returned at that address. If an error 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * status is returned, the value at resultLength is undefined.</p> 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The returned pointer is owned by this iterator and must not be 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * deleted by the caller. The pointer is valid until the next call 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to next, unext, snext, reset, or the enumerator's destructor.</p> 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>If the iterator is out of sync with its service, status is set 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p> 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Starting with ICU 2.8, the default implementation calls snext() 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and handles the conversion. 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength a ponter to receive the length, can be NULL. 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a pointer to the string, or NULL. 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const UChar* unext(int32_t *resultLength, UErrorCode& status); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Returns the next element a UnicodeString*. If there are no 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * more elements, returns NULL.</p> 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The returned pointer is owned by this iterator and must not be 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * deleted by the caller. The pointer is valid until the next call 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to next, unext, snext, reset, or the enumerator's destructor.</p> 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>If the iterator is out of sync with its service, status is set 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p> 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Starting with ICU 2.8, the default implementation calls next() 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and handles the conversion. 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Either next() or snext() must be implemented differently by a subclass. 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a pointer to the string, or NULL. 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual const UnicodeString* snext(UErrorCode& status); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Resets the iterator. This re-establishes sync with the 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * service and rewinds the iterator to start at the first 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * element.</p> 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Previous pointers returned by next, unext, or snext become 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * invalid, and the value returned by count might change.</p> 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void reset(UErrorCode& status) = 0; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compares this enumeration to other to check if both are equal 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param that The other string enumeration to compare this object to 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the enumerations are equal. FALSE if not. 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.6 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool operator==(const StringEnumeration& that)const; 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Compares this enumeration to other to check if both are not equal 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param that The other string enumeration to compare this object to 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the enumerations are equal. FALSE if not. 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.6 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool operator!=(const StringEnumeration& that)const; 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UnicodeString field for use with default implementations and subclasses. 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString unistr; 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char * default buffer for use with default implementations and subclasses. 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char charsBuffer[32]; 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * char * buffer for use with default implementations and subclasses. 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Allocated in constructor and in ensureCharsCapacity(). 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *chars; 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Capacity of chars, for use with default implementations and subclasses. 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t charsCapacity; 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Default constructor for use with default implementations and subclasses. 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringEnumeration(); 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Ensures that chars is at least as large as the requested capacity. 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For use with default implementations and subclasses. 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param capacity Requested capacity. 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status ICU in/out error code. 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void ensureCharsCapacity(int32_t capacity, UErrorCode &status); 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Converts s to Unicode and sets unistr to the result. 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For use with default implementations and subclasses, 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * especially for implementations of snext() in terms of next(). 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is provided with a helper function instead of a default implementation 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of snext() to avoid potential infinite loops between next() and snext(). 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For example: 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * const UnicodeString* snext(UErrorCode& status) { 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t resultLength=0; 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * const char *s=next(&resultLength, status); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return setChars(s, resultLength, status); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param s String to be converted to Unicode. 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length Length of the string. 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status ICU in/out error code. 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A pointer to unistr. 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString *setChars(const char *s, int32_t length, UErrorCode &status); 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* STRENUM_H */ 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 277