Index: source/common/uhash.h |
diff --git a/source/common/uhash.h b/source/common/uhash.h |
index ec4c630dc7d9ddaeb9e82cd096f01d16213ac716..1761dd0a2e9209deee5d87587b4afeb1c554d937 100644 |
--- a/source/common/uhash.h |
+++ b/source/common/uhash.h |
@@ -1,6 +1,6 @@ |
/* |
****************************************************************************** |
-* Copyright (C) 1997-2011, International Business Machines |
+* Copyright (C) 1997-2015, International Business Machines |
* Corporation and others. All Rights Reserved. |
****************************************************************************** |
* Date Name Description |
@@ -16,6 +16,7 @@ |
#include "unicode/utypes.h" |
#include "cmemory.h" |
#include "uelement.h" |
+#include "unicode/localpointer.h" |
/** |
* UHashtable stores key-value pairs and does moderately fast lookup |
@@ -57,10 +58,13 @@ |
* hashcode. During iteration an element may be deleted by calling |
* uhash_removeElement(); iteration may safely continue thereafter. |
* The uhash_remove() function may also be safely called in |
- * mid-iteration. However, if uhash_put() is called during iteration |
- * then the iteration will be out of sync. Under no circumstances |
- * should the UHashElement returned by uhash_nextElement be modified |
- * directly. |
+ * mid-iteration. If uhash_put() is called during iteration, |
+ * the iteration is still guaranteed to terminate reasonably, but |
+ * there is no guarantee that every element will be returned or that |
+ * some won't be returned more than once. |
+ * |
+ * Under no circumstances should the UHashElement returned by |
+ * uhash_nextElement be modified directly. |
* |
* By default, the hashtable grows when necessary, but never shrinks, |
* even if all items are removed. For most applications this is |
@@ -485,6 +489,13 @@ U_CAPI const UHashElement* U_EXPORT2 |
uhash_find(const UHashtable *hash, const void* key); |
/** |
+ * \def UHASH_FIRST |
+ * Constant for use with uhash_nextElement |
+ * @see uhash_nextElement |
+ */ |
+#define UHASH_FIRST (-1) |
+ |
+/** |
* Iterate through the elements of a UHashtable. The caller must not |
* modify the returned object. However, uhash_removeElement() may be |
* called during iteration to remove an element from the table. |
@@ -492,7 +503,7 @@ uhash_find(const UHashtable *hash, const void* key); |
* called during iteration the iteration will then be out of sync and |
* should be restarted. |
* @param hash The target UHashtable. |
- * @param pos This should be set to -1 initially, and left untouched |
+ * @param pos This should be set to UHASH_FIRST initially, and left untouched |
* thereafter. |
* @return a hash element, or NULL if no further key-value pairs |
* exist in the table. |
@@ -663,4 +674,24 @@ uhash_deleteHashtable(void *obj); |
U_CAPI UBool U_EXPORT2 |
uhash_equals(const UHashtable* hash1, const UHashtable* hash2); |
+ |
+#if U_SHOW_CPLUSPLUS_API |
+ |
+U_NAMESPACE_BEGIN |
+ |
+/** |
+ * \class LocalUResourceBundlePointer |
+ * "Smart pointer" class, closes a UResourceBundle via ures_close(). |
+ * For most methods see the LocalPointerBase base class. |
+ * |
+ * @see LocalPointerBase |
+ * @see LocalPointer |
+ * @stable ICU 4.4 |
+ */ |
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUHashtablePointer, UHashtable, uhash_close); |
+ |
+U_NAMESPACE_END |
+ |
+#endif |
+ |
#endif |