diff -r 000000000000 -r bde4ae8d615e os/textandloc/fontservices/textshaperplugin/IcuSource/common/ucmp8.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/textandloc/fontservices/textshaperplugin/IcuSource/common/ucmp8.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,244 @@ +/* + ******************************************************************** + * COPYRIGHT: + * Copyright (c) 1996-2004, International Business Machines Corporation and + * others. All Rights Reserved. + ******************************************************************** + */ + + + +#ifndef UCMP8_H +#define UCMP8_H + +/* 32-bits. + Bump this whenever the internal structure changes. +*/ +#define ICU_UCMP8_VERSION 0x01260000 + +#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 int32_t U_EXPORT2 ucmp8_getkUnicodeCount(void); +U_CAPI int32_t U_EXPORT2 ucmp8_getkBlockCount(void); + +typedef struct CompactByteArray { + uint32_t fStructSize; + int8_t* fArray; + uint16_t* fIndex; + int32_t fCount; + UBool fCompact; + UBool fBogus; + UBool fAlias; + UBool fIAmOwned; /* don't free CBA on close */ +} CompactByteArray; + +#define UCMP8_kUnicodeCount 65536 +#define UCMP8_kBlockShift 7 +#define UCMP8_kBlockCount (1<fArray[(array->fIndex[index >> UCMP8_kBlockShift] & 0xFFFF) + (index & UCMP8_kBlockMask)]) + +#define ucmp8_getu(array,index) (uint8_t)ucmp8_get(array,index) + + +/** + * Set a new value for a Unicode character. + * Set automatically expands the array if it is compacted. + * + * @param array the CompactByteArray to be set + * @param character the character to set the mapped value with + * @param value the new mapped value + */ +U_CAPI void U_EXPORT2 ucmp8_set(CompactByteArray* array, + UChar character, + int8_t value); + +/** + * Set new values for a range of Unicode character. + * + * @param array the CompactByteArray to be set + * @param start the starting offset of the range + * @param end the ending offset of the range + * @param value the new mapped value + */ +U_CAPI void U_EXPORT2 ucmp8_setRange(CompactByteArray* array, + UChar start, + UChar end, + int8_t value); + +U_CAPI int32_t U_EXPORT2 ucmp8_getCount(const CompactByteArray* array); +U_CAPI const int8_t* U_EXPORT2 ucmp8_getArray(const CompactByteArray* array); +U_CAPI const uint16_t* U_EXPORT2 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. + * @param array The CompactByteArray to be compacted + * @param cycle The value determines how large the overlap can be. + */ +U_CAPI void U_EXPORT2 ucmp8_compact(CompactByteArray* array, + uint32_t cycle); + +/** Expanded takes the array back to a 65536 element array + * @param array The CompactByteArray to be expanded + */ +U_CAPI void U_EXPORT2 ucmp8_expand(CompactByteArray* array); + +/** + * Flatten into a memory structure. Pass in NULL to pre-flight to get the required size. + * @internal + */ +U_CAPI uint32_t U_EXPORT2 ucmp8_flattenMem(const CompactByteArray* array, uint8_t *MS); + +/* initializes an existing CBA from memory. Will cause ucmp8_close() to not deallocate anything. */ +U_CAPI void U_EXPORT2 ucmp8_initFromData(CompactByteArray* array, const uint8_t **source, UErrorCode *status); + +#endif +