+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
-* Copyright (C) 2002-2004, International Business Machines
+* Copyright (C) 2002-2012, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
#include "unicode/uobject.h"
#include "unicode/unistr.h"
+/**
+ * \file
+ * \brief C++ API: String Enumeration
+ */
+
+#if U_SHOW_CPLUSPLUS_API
U_NAMESPACE_BEGIN
/**
* call, so the returned string still might not be 'valid' on
* subsequent use.</p>
*
- * <p>Strings may take the form of const char*, const UChar*, or const
+ * <p>Strings may take the form of const char*, const char16_t*, or const
* UnicodeString*. The type you get is determine by the variant of
* 'next' that you call. In general the StringEnumeration is
* optimized for one of these types, but all StringEnumerations can
* @return a clone of this object
*
* @see getDynamicClassID
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
virtual StringEnumeration *clone() const;
* <p>If the iterator is out of sync with its service, status is set
* to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p>
*
- * <p>If the native service string is a UChar* string, it is
+ * <p>If the native service string is a char16_t* string, it is
* converted to char* with the invariant converter. If the
* conversion fails (because a character cannot be converted) then
* status is set to U_INVARIANT_CONVERSION_ERROR and the return
*
* Starting with ICU 2.8, the default implementation calls snext()
* and handles the conversion.
+ * Either next() or snext() must be implemented differently by a subclass.
*
* @param status the error code.
* @param resultLength a pointer to receive the length, can be NULL.
virtual const char* next(int32_t *resultLength, UErrorCode& status);
/**
- * <p>Returns the next element as a NUL-terminated UChar*. If there
+ * <p>Returns the next element as a NUL-terminated char16_t*. If there
* are no more elements, returns NULL. If the resultLength pointer
* is not NULL, the length of the string (not counting the
* terminating NUL) is returned at that address. If an error
*
* @stable ICU 2.4
*/
- virtual const UChar* unext(int32_t *resultLength, UErrorCode& status);
+ virtual const char16_t* unext(int32_t *resultLength, UErrorCode& status);
/**
* <p>Returns the next element a UnicodeString*. If there are no
* <p>If the iterator is out of sync with its service, status is set
* to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.</p>
*
+ * Starting with ICU 2.8, the default implementation calls next()
+ * and handles the conversion.
+ * Either next() or snext() must be implemented differently by a subclass.
+ *
* @param status the error code.
* @return a pointer to the string, or NULL.
*
* @stable ICU 2.4
*/
- virtual const UnicodeString* snext(UErrorCode& status) = 0;
+ virtual const UnicodeString* snext(UErrorCode& status);
/**
* <p>Resets the iterator. This re-establishes sync with the
*/
virtual void reset(UErrorCode& status) = 0;
+ /**
+ * Compares this enumeration to other to check if both are equal
+ *
+ * @param that The other string enumeration to compare this object to
+ * @return TRUE if the enumerations are equal. FALSE if not.
+ * @stable ICU 3.6
+ */
+ virtual UBool operator==(const StringEnumeration& that)const;
+ /**
+ * Compares this enumeration to other to check if both are not equal
+ *
+ * @param that The other string enumeration to compare this object to
+ * @return TRUE if the enumerations are equal. FALSE if not.
+ * @stable ICU 3.6
+ */
+ virtual UBool operator!=(const StringEnumeration& that)const;
+
protected:
/**
* UnicodeString field for use with default implementations and subclasses.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
UnicodeString unistr;
/**
* char * default buffer for use with default implementations and subclasses.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
char charsBuffer[32];
/**
* char * buffer for use with default implementations and subclasses.
* Allocated in constructor and in ensureCharsCapacity().
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
char *chars;
/**
* Capacity of chars, for use with default implementations and subclasses.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
int32_t charsCapacity;
/**
* Default constructor for use with default implementations and subclasses.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
StringEnumeration();
*
* @param capacity Requested capacity.
* @param status ICU in/out error code.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
void ensureCharsCapacity(int32_t capacity, UErrorCode &status);
* @param length Length of the string.
* @param status ICU in/out error code.
* @return A pointer to unistr.
- * @draft ICU 2.8
+ * @stable ICU 2.8
*/
UnicodeString *setChars(const char *s, int32_t length, UErrorCode &status);
};
U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
/* STRENUM_H */
#endif