00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef UCMP16_H
00019 #define UCMP16_H
00020
00021
00022 #include "umemstrm.h"
00023 #include "unicode/utypes.h"
00024
00025
00026
00027
00028 #define ICU_UCMP16_VERSION 0x01270000
00029
00030
00031 #define UCMP16_kMaxUnicode_int 65535
00032 #define UCMP16_kUnicodeCount_int (UCMP16_kMaxUnicode_int + 1)
00033 #define UCMP16_kBlockShift_int 7
00034 #define UCMP16_kBlockCount_int (1 << UCMP16_kBlockShift_int)
00035 #define UCMP16_kBlockBytes_int (UCMP16_kBlockCount_int * sizeof(int16_t))
00036 #define UCMP16_kIndexShift_int (16 - UCMP16_kBlockShift_int)
00037 #define UCMP16_kIndexCount_int (1 << UCMP16_kIndexShift_int)
00038 #define UCMP16_kBlockMask_int (UCMP16_kBlockCount_int - 1)
00039
00087 typedef struct CompactShortArray {
00088 int32_t fStructSize;
00089 int16_t* fArray;
00090 uint16_t* fIndex;
00091 int32_t* fHashes;
00092 int32_t fCount;
00093 int16_t fDefaultValue;
00094 UBool fCompact;
00095 UBool fBogus;
00096 UBool fAlias;
00097 int32_t kBlockShift;
00098 int32_t kBlockMask;
00099 UBool fIAmOwned;
00100 } CompactShortArray;
00101
00102
00103 U_CAPI int32_t U_EXPORT2 ucmp16_getkUnicodeCount(void);
00104 U_CAPI int32_t U_EXPORT2 ucmp16_getkBlockCount(void);
00105
00110 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_open(int16_t defaultValue);
00111 U_CAPI void U_EXPORT2 ucmp16_init(CompactShortArray* array, int16_t defaultValue);
00112 U_CAPI void U_EXPORT2 ucmp16_initBogus(CompactShortArray* array);
00113
00126 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_openAdopt(uint16_t *indexArray,
00127 int16_t *newValues,
00128 int32_t count,
00129 int16_t defaultValue);
00130
00131 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_openAdoptWithBlockShift(uint16_t *indexArray,
00132 int16_t *newValues,
00133 int32_t count,
00134 int16_t defaultValue,
00135 int32_t blockShift);
00136
00137 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_openAlias(uint16_t *indexArray,
00138 int16_t *newValues,
00139 int32_t count,
00140 int16_t defaultValue );
00141
00155 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_initAdopt(CompactShortArray *this_obj,
00156 uint16_t *indexArray,
00157 int16_t *newValues,
00158 int32_t count,
00159 int16_t defaultValue );
00160
00161 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_initAdoptWithBlockShift(CompactShortArray *this_obj,
00162 uint16_t *indexArray,
00163 int16_t *newValues,
00164 int32_t count,
00165 int16_t defaultValue,
00166 int32_t blockShift);
00167
00168 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_initAlias(CompactShortArray *this_obj,
00169 uint16_t *indexArray,
00170 int16_t *newValues,
00171 int32_t count,
00172 int16_t defaultValue );
00173
00174
00175 U_CAPI CompactShortArray* U_EXPORT2 ucmp16_initAliasWithBlockShift(CompactShortArray *this_obj,
00176 uint16_t *indexArray,
00177 int16_t *newValues,
00178 int32_t count,
00179 int16_t defaultValue,
00180 int32_t blockShift);
00181
00182 U_CAPI void U_EXPORT2 ucmp16_close(CompactShortArray* array);
00187 U_CAPI UBool U_EXPORT2 ucmp16_isBogus(const CompactShortArray* array);
00188
00196 #define ucmp16_get(array, index) (array->fArray[(array->fIndex[(index >> array->kBlockShift)] )+ \
00197 (index & array->kBlockMask)])
00198
00199 #define ucmp16_getu(array, index) (uint16_t)ucmp16_get(array, index)
00200
00201
00208 U_CAPI void U_EXPORT2 ucmp16_set(CompactShortArray *array,
00209 UChar character,
00210 int16_t value);
00211
00212
00220 U_CAPI void U_EXPORT2 ucmp16_setRange(CompactShortArray* array,
00221 UChar start,
00222 UChar end,
00223 int16_t value);
00224
00225
00232 U_CAPI void U_EXPORT2 ucmp16_compact(CompactShortArray* array);
00233
00237 U_CAPI int16_t U_EXPORT2 ucmp16_getDefaultValue(const CompactShortArray* array);
00238
00244 U_CAPI uint32_t U_EXPORT2 ucmp16_getCount(const CompactShortArray* array);
00245
00251 U_CAPI const int16_t* U_EXPORT2 ucmp16_getArray(const CompactShortArray* array);
00252
00258 U_CAPI const uint16_t* U_EXPORT2 ucmp16_getIndex(const CompactShortArray* array);
00259
00260
00262 U_CAPI uint32_t U_EXPORT2 ucmp16_flattenMem(const CompactShortArray* array, UMemoryStream *MS);
00263 U_CAPI void U_EXPORT2 ucmp16_initFromData(CompactShortArray* array, const uint8_t **source, UErrorCode *status);
00264
00265 #endif
00266
00267
00268