]> git.saurik.com Git - apple/icu.git/blame_incremental - icuSources/common/uhash_us.cpp
ICU-6.2.22.tar.gz
[apple/icu.git] / icuSources / common / uhash_us.cpp
... / ...
CommitLineData
1/*
2******************************************************************************
3* Copyright (C) 1997-2001, International Business Machines
4* Corporation and others. All Rights Reserved.
5******************************************************************************
6* Date Name Description
7* 03/22/00 aliu Creation.
8* 07/06/01 aliu Modified to support int32_t keys on
9* platforms with sizeof(void*) < 32.
10******************************************************************************
11*/
12
13#include "uhash.h"
14#include "hash.h"
15#include "uvector.h"
16#include "unicode/unistr.h"
17#include "unicode/uchar.h"
18
19/********************************************************************
20 * PUBLIC UnicodeString support functions for UHashtable
21 ********************************************************************/
22
23U_CAPI int32_t U_EXPORT2
24uhash_hashUnicodeString(const UHashTok key) {
25 U_NAMESPACE_USE
26 const UnicodeString *str = (const UnicodeString*) key.pointer;
27 return (str == NULL) ? 0 : str->hashCode();
28}
29
30U_CAPI int32_t U_EXPORT2
31uhash_hashCaselessUnicodeString(const UHashTok key) {
32 U_NAMESPACE_USE
33 const UnicodeString *str = (const UnicodeString*) key.pointer;
34 if (str == NULL) {
35 return 0;
36 }
37 // Inefficient; a better way would be to have a hash function in
38 // UnicodeString that does case folding on the fly.
39 UnicodeString copy(*str);
40 return copy.foldCase().hashCode();
41}
42
43U_CAPI void U_EXPORT2
44uhash_deleteUnicodeString(void *obj) {
45 U_NAMESPACE_USE
46 delete (UnicodeString*) obj;
47}
48
49U_CAPI UBool U_EXPORT2
50uhash_compareUnicodeString(const UHashTok key1, const UHashTok key2) {
51 U_NAMESPACE_USE
52 const UnicodeString *str1 = (const UnicodeString*) key1.pointer;
53 const UnicodeString *str2 = (const UnicodeString*) key2.pointer;
54 if (str1 == str2) {
55 return TRUE;
56 }
57 if (str1 == NULL || str2 == NULL) {
58 return FALSE;
59 }
60 return *str1 == *str2;
61}
62
63U_CAPI UBool U_EXPORT2
64uhash_compareCaselessUnicodeString(const UHashTok key1, const UHashTok key2) {
65 U_NAMESPACE_USE
66 const UnicodeString *str1 = (const UnicodeString*) key1.pointer;
67 const UnicodeString *str2 = (const UnicodeString*) key2.pointer;
68 if (str1 == str2) {
69 return TRUE;
70 }
71 if (str1 == NULL || str2 == NULL) {
72 return FALSE;
73 }
74 return str1->caseCompare(*str2, U_FOLD_CASE_DEFAULT) == 0;
75}
76
77/**
78 * Deleter for Hashtable objects.
79 */
80U_CAPI void U_EXPORT2
81uhash_deleteHashtable(void *obj) {
82 U_NAMESPACE_USE
83 delete (Hashtable*) obj;
84}
85
86/**
87 * Deleter for UVector objects.
88 */
89U_CAPI void U_EXPORT2
90uhash_deleteUVector(void *obj) {
91 U_NAMESPACE_USE
92 delete (UVector*) obj;
93}
94
95//eof