1999-08-16 21:50:52 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
********************************************************************
|
|
|
|
* COPYRIGHT:
|
|
|
|
* (C) Copyright Taligent, Inc., 1996
|
|
|
|
* (C) Copyright International Business Machines Corporation, 1996 - 1998
|
|
|
|
* Licensed Material - Program-Property of IBM - All Rights Reserved.
|
|
|
|
* US Government Users Restricted Rights - Use, duplication, or disclosure
|
|
|
|
* restricted by GSA ADP Schedule Contract with IBM Corp.
|
|
|
|
*
|
|
|
|
********************************************************************
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef UCMP8_H
|
|
|
|
#define UCMP8_H
|
|
|
|
|
|
|
|
|
|
|
|
#include "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.
|
|
|
|
*====================================
|
|
|
|
*/
|
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI int32_t U_EXPORT2 ucmp8_getkUnicodeCount(void);
|
|
|
|
U_CAPI int32_t U_EXPORT2 ucmp8_getkBlockCount(void);
|
1999-08-16 21:50:52 +00:00
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
typedef struct CompactByteArray {
|
1999-08-16 21:50:52 +00:00
|
|
|
int8_t* fArray;
|
|
|
|
uint16_t* fIndex;
|
|
|
|
int32_t fCount;
|
|
|
|
bool_t fCompact;
|
|
|
|
bool_t fBogus;
|
|
|
|
} CompactByteArray;
|
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI CompactByteArray* U_EXPORT2 ucmp8_open(int8_t defaultValue);
|
|
|
|
U_CAPI CompactByteArray* U_EXPORT2 ucmp8_openAdopt(uint16_t* indexArray,
|
1999-08-16 21:50:52 +00:00
|
|
|
int8_t* newValues,
|
|
|
|
int32_t count);
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI void U_EXPORT2 ucmp8_close(CompactByteArray* array);
|
|
|
|
U_CAPI bool_t U_EXPORT2 isBogus(const CompactByteArray* array);
|
1999-08-16 21:50:52 +00:00
|
|
|
|
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI int8_t U_EXPORT2 ucmp8_get(CompactByteArray* array, uint16_t index);
|
|
|
|
U_CAPI uint8_t U_EXPORT2 ucmp8_getu(CompactByteArray* array, uint16_t index);
|
1999-08-16 21:50:52 +00:00
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI void U_EXPORT2 ucmp8_set(CompactByteArray* array,
|
1999-08-16 21:50:52 +00:00
|
|
|
UChar index,
|
|
|
|
int8_t value);
|
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI void U_EXPORT2 ucmp8_setRange(CompactByteArray* array,
|
1999-08-16 21:50:52 +00:00
|
|
|
UChar start,
|
|
|
|
UChar end,
|
|
|
|
int8_t value);
|
|
|
|
|
1999-10-18 23:44:20 +00:00
|
|
|
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);
|
1999-08-16 21:50:52 +00:00
|
|
|
|
|
|
|
/* 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.
|
|
|
|
*/
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI void U_EXPORT2 ucmp8_compact(CompactByteArray* array,
|
1999-08-16 21:50:52 +00:00
|
|
|
uint32_t cycle);
|
|
|
|
|
|
|
|
/* Expanded takes the array back to a 65536 element array*/
|
1999-10-18 23:44:20 +00:00
|
|
|
U_CAPI void U_EXPORT2 ucmp8_expand(CompactByteArray* array);
|
1999-08-16 21:50:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|