scuffed-code/icu4c/source/common/uhash_us.cpp

96 lines
2.7 KiB
C++
Raw Normal View History

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