| /* |
| ****************************************************************************** |
| * 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 |