19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson******************************************************************************* 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* Copyright (C) 1997-2011, International Business Machines 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* Corporation and others. All Rights Reserved. 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson******************************************************************************* 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* file name: uelement.h 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* encoding: US-ASCII 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* tab size: 8 (not used) 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* indentation:4 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* created on: 2011jul04 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* created by: Markus W. Scherer 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* Common definitions for UHashTable and UVector. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* UHashTok moved here from uhash.h and renamed UElement. 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* This allows users of UVector to avoid the confusing #include of uhash.h. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* uhash.h aliases UElement to UHashTok, 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson* so that we need not change all of its code and its users. 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*/ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#ifndef __UELEMENT_H__ 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#define __UELEMENT_H__ 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#include "unicode/utypes.h" 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse WilsonU_CDECL_BEGIN 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A UVector element, or a key or value within a UHashtable. 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It may be either a 32-bit integral value or an opaque void* pointer. 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The void* pointer may be smaller than 32 bits (e.g. 24 bits) 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or may be larger (e.g. 64 bits). 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Because a UElement is the size of a native pointer or a 32-bit 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * integer, we pass it around by value. 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonunion UElement { 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void* pointer; 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int32_t integer; 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontypedef union UElement UElement; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * An element-equality (boolean) comparison function. 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param e1 An element (object or integer) 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param e2 An element (object or integer) 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return TRUE if the two elements are equal. 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontypedef UBool U_CALLCONV UElementsAreEqual(const UElement e1, const UElement e2); 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * An element sorting (three-way) comparison function. 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param e1 An element (object or integer) 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param e2 An element (object or integer) 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return 0 if the two elements are equal, -1 if e1 is < e2, or +1 if e1 is > e2. 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontypedef int8_t U_CALLCONV UElementComparator(UElement e1, UElement e2); 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * An element assignment function. It may copy an integer, copy 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a pointer, or clone a pointer, as appropriate. 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param dst The element to be assigned to 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param src The element to assign from 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontypedef void U_CALLCONV UElementAssigner(UElement *dst, UElement *src); 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse WilsonU_CDECL_END 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Comparator function for UnicodeString* keys. Implements UElementsAreEqual. 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param key1 The string for comparison 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param key2 The string for comparison 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if key1 and key2 are equal, return false otherwise. 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse WilsonU_CAPI UBool U_EXPORT2 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonuhash_compareUnicodeString(const UElement key1, const UElement key2); 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Comparator function for UnicodeString* keys (case insensitive). 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Make sure to use together with uhash_hashCaselessUnicodeString. 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Implements UElementsAreEqual. 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param key1 The string for comparison 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param key2 The string for comparison 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if key1 and key2 are equal, return false otherwise. 85 */ 86U_CAPI UBool U_EXPORT2 87uhash_compareCaselessUnicodeString(const UElement key1, const UElement key2); 88 89#endif /* __UELEMENT_H__ */ 90