| /* | 
 | ****************************************************************************** | 
 | *   Copyright (C) 1997-2001, International Business Machines | 
 | *   Corporation and others.  All Rights Reserved. | 
 | ****************************************************************************** | 
 | *   Date        Name        Description | 
 | *   03/22/00    aliu        Creation. | 
 | *   07/06/01    aliu        Modified to support int32_t keys on | 
 | *                           platforms with sizeof(void*) < 32. | 
 | ****************************************************************************** | 
 | */ | 
 |  | 
 | #include "uhash.h" | 
 | #include "hash.h" | 
 | #include "uvector.h" | 
 | #include "unicode/unistr.h" | 
 | #include "unicode/uchar.h" | 
 |  | 
 | /******************************************************************** | 
 |  * PUBLIC UnicodeString support functions for UHashtable | 
 |  ********************************************************************/ | 
 |  | 
 | U_CAPI int32_t U_EXPORT2 | 
 | uhash_hashUnicodeString(const UHashTok key) { | 
 |     U_NAMESPACE_USE | 
 |     const UnicodeString *str = (const UnicodeString*) key.pointer; | 
 |     return (str == NULL) ? 0 : str->hashCode(); | 
 | } | 
 |  | 
 | U_CAPI int32_t U_EXPORT2 | 
 | uhash_hashCaselessUnicodeString(const UHashTok key) { | 
 |     U_NAMESPACE_USE | 
 |     const UnicodeString *str = (const UnicodeString*) key.pointer; | 
 |     if (str == NULL) { | 
 |         return 0; | 
 |     } | 
 |     // Inefficient; a better way would be to have a hash function in | 
 |     // UnicodeString that does case folding on the fly. | 
 |     UnicodeString copy(*str); | 
 |     return copy.foldCase().hashCode(); | 
 | } | 
 |  | 
 | U_CAPI void U_EXPORT2 | 
 | uhash_deleteUnicodeString(void *obj) { | 
 |     U_NAMESPACE_USE | 
 |     delete (UnicodeString*) obj; | 
 | } | 
 |  | 
 | U_CAPI UBool U_EXPORT2 | 
 | uhash_compareUnicodeString(const UHashTok key1, const UHashTok key2) { | 
 |     U_NAMESPACE_USE | 
 |     const UnicodeString *str1 = (const UnicodeString*) key1.pointer; | 
 |     const UnicodeString *str2 = (const UnicodeString*) key2.pointer; | 
 |     if (str1 == str2) { | 
 |         return TRUE; | 
 |     } | 
 |     if (str1 == NULL || str2 == NULL) { | 
 |         return FALSE; | 
 |     } | 
 |     return *str1 == *str2; | 
 | } | 
 |  | 
 | U_CAPI UBool U_EXPORT2 | 
 | uhash_compareCaselessUnicodeString(const UHashTok key1, const UHashTok key2) { | 
 |     U_NAMESPACE_USE | 
 |     const UnicodeString *str1 = (const UnicodeString*) key1.pointer; | 
 |     const UnicodeString *str2 = (const UnicodeString*) key2.pointer; | 
 |     if (str1 == str2) { | 
 |         return TRUE; | 
 |     } | 
 |     if (str1 == NULL || str2 == NULL) { | 
 |         return FALSE; | 
 |     } | 
 |     return str1->caseCompare(*str2, U_FOLD_CASE_DEFAULT) == 0; | 
 | } | 
 |  | 
 | /** | 
 |  * Deleter for Hashtable objects. | 
 |  */ | 
 | U_CAPI void U_EXPORT2 | 
 | uhash_deleteHashtable(void *obj) { | 
 |     U_NAMESPACE_USE | 
 |     delete (Hashtable*) obj; | 
 | } | 
 |  | 
 | /** | 
 |  * Deleter for UVector objects. | 
 |  */ | 
 | U_CAPI void U_EXPORT2 | 
 | uhash_deleteUVector(void *obj) { | 
 |     U_NAMESPACE_USE | 
 |     delete (UVector*) obj; | 
 | } | 
 |  | 
 | //eof |