| |
| /* |
| ******************************************************************** |
| * |
| * Copyright (C) 1996-1999, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| * |
| ******************************************************************** |
| */ |
| |
| |
| |
| #ifndef UCMP8_H |
| #define UCMP8_H |
| |
| |
| #include "unicode/utypes.h" |
| |
| /*====================================*/ |
| /* class CompactByteArray |
| * Provides a compact way to store information that is indexed by Unicode values, |
| * such as character properties, types, keyboard values, etc. |
| * The ATypes are used by value, so should be small, integers or pointers. |
| *==================================== |
| */ |
| |
| U_CAPI const int32_t UCMP8_kUnicodeCount; |
| U_CAPI const int32_t UCMP8_kBlockShift; |
| U_CAPI const int32_t UCMP8_kBlockCount; |
| U_CAPI const int32_t UCMP8_kIndexShift; |
| U_CAPI const int32_t UCMP8_kIndexCount; |
| U_CAPI const uint32_t UCMP8_kBlockMask; |
| |
| U_CAPI int32_t ucmp8_getkUnicodeCount(void); |
| U_CAPI int32_t ucmp8_getkBlockCount(void); |
| U_CAPI int32_t ucmp8_getkIndexCount(void); |
| typedef struct{ |
| int8_t* fArray; |
| uint16_t* fIndex; |
| int32_t fCount; |
| UBool fCompact; |
| UBool fBogus; |
| } CompactByteArray; |
| |
| U_CAPI CompactByteArray* ucmp8_open(int8_t defaultValue); |
| U_CAPI CompactByteArray* ucmp8_openAdopt(uint16_t* indexArray, |
| int8_t* newValues, |
| int32_t count); |
| U_CAPI void ucmp8_close(CompactByteArray* array); |
| U_CAPI UBool isBogus(const CompactByteArray* array); |
| |
| |
| U_CAPI int8_t ucmp8_get(CompactByteArray* array, uint16_t index); |
| U_CAPI uint8_t ucmp8_getu(CompactByteArray* array, uint16_t index); |
| |
| U_CAPI void ucmp8_set(CompactByteArray* array, |
| UChar index, |
| int8_t value); |
| |
| U_CAPI void ucmp8_setRange(CompactByteArray* array, |
| UChar start, |
| UChar end, |
| int8_t value); |
| |
| U_CAPI int32_t ucmp8_getCount(const CompactByteArray* array); |
| U_CAPI const int8_t* ucmp8_getArray(const CompactByteArray* array); |
| U_CAPI const uint16_t* ucmp8_getIndex(const CompactByteArray* array); |
| |
| /* Compact the array. |
| The value of cycle determines how large the overlap can be. |
| A cycle of 1 is the most compacted, but takes the most time to do. |
| If values stored in the array tend to repeat in cycles of, say, 16, |
| then using that will be faster than cycle = 1, and get almost the |
| same compression. |
| */ |
| U_CAPI void ucmp8_compact(CompactByteArray* array, |
| uint32_t cycle); |
| |
| /* Expanded takes the array back to a 65536 element array*/ |
| U_CAPI void ucmp8_expand(CompactByteArray* array); |
| |
| |
| |
| #endif |
| |
| |
| |