]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/unicode/strenum.h
ICU-62107.0.1.tar.gz
[apple/icu.git] / icuSources / common / unicode / strenum.h
index 4f6ce02d8aff5036e93c38d995c3aa9f424350ec..50dfe4f573090be9e3391c391fb7ef888b1e439b 100644 (file)
@@ -1,7 +1,9 @@
+// © 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
 
 /**
@@ -28,7 +36,7 @@ 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
@@ -68,7 +76,7 @@ public:
      * @return a clone of this object
      *
      * @see getDynamicClassID
-     * @draft ICU 2.8
+     * @stable ICU 2.8
      */
     virtual StringEnumeration *clone() const;
 
@@ -105,7 +113,7 @@ public:
      * <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
@@ -113,6 +121,7 @@ public:
      *
      * 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.
@@ -123,7 +132,7 @@ public:
     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
@@ -145,7 +154,7 @@ public:
      *
      * @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
@@ -158,12 +167,16 @@ public:
      * <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
@@ -179,32 +192,49 @@ public:
      */
     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();
 
@@ -214,7 +244,7 @@ protected:
      *
      * @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);
 
@@ -238,12 +268,13 @@ protected:
      * @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