/*
*******************************************************************************
*
-* Copyright (C) 2000-2005, International Business Machines
+* Copyright (C) 2000-2008, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
#define UCOL_UCAELEMS_H
#include "unicode/utypes.h"
+#include "ucol_tok.h"
#if !UCONFIG_NO_COLLATION
-#include "ucol_cnt.h"
#include "ucol_imp.h"
#ifdef UCOL_DEBUG
U_CDECL_BEGIN
+/* This is the maximum trie capacity for the mapping trie.
+Due to current limitations in genuca and the design of UTrie,
+this number can't be more than 256K.
+As of Unicode 5, it currently could safely go to 128K without
+a problem. Normally, less than 32K are tailored.
+*/
+#define UCOL_ELM_TRIE_CAPACITY 0x40000
+
+/* This is the maxmun capacity for temparay combining class
+ * table. The table will be compacted after scanning all the
+ * Unicode codepoints.
+*/
+#define UCOL_MAX_CM_TAB 0x10000
+
+
typedef struct {
uint32_t *CEs;
int32_t position;
int32_t size;
} MaxExpansionTable;
+typedef struct {
+ uint16_t index[256]; /* index of cPoints by combining class 0-255. */
+ UChar *cPoints; /* code point array of all combining marks */
+ uint32_t size; /* total number of combining marks */
+} CombinClassTable;
+
typedef struct {
/*CompactEIntArray *mapping; */
UNewTrie *mapping;
uint8_t *contrEndCP;
const UCollator *UCA;
UHashtable *prefixLookup;
+ CombinClassTable *cmLookup; /* combining class lookup for tailoring. */
} tempUCATable;
+typedef struct {
+ UChar cp;
+ uint16_t cClass; // combining class
+}CompData;
+
+typedef struct {
+ CompData *precomp;
+ int32_t precompLen;
+ UChar *decomp;
+ int32_t decompLen;
+ UChar *comp;
+ int32_t compLen;
+ uint16_t curClass;
+ uint16_t tailoringCM;
+ int32_t cmPos;
+}tempTailorContext;
+
U_CAPI tempUCATable * U_EXPORT2 uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollator *UCA, UColCETags initTag, UColCETags supplementaryInitTag, UErrorCode *status);
-U_CAPI tempUCATable * U_EXPORT2 uprv_uca_cloneTempTable(tempUCATable *t, UErrorCode *status);
U_CAPI void U_EXPORT2 uprv_uca_closeTempTable(tempUCATable *t);
U_CAPI uint32_t U_EXPORT2 uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status);
U_CAPI UCATableHeader * U_EXPORT2 uprv_uca_assembleTable(tempUCATable *t, UErrorCode *status);
-U_CAPI int32_t U_EXPORT2
-uprv_uca_canonicalClosure(tempUCATable *t, UErrorCode *status);
-
-
-#define paddedsize(something) ((something)+((((something)%4)!=0)?(4-(something)%4):0))
-#define headersize (paddedsize(sizeof(UCATableHeader))+paddedsize(sizeof(UColOptionSet)))
+U_CAPI int32_t U_EXPORT2 uprv_uca_canonicalClosure(tempUCATable *t, UColTokenParser *src, UErrorCode *status);
U_CDECL_END