ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ****************************************************************************** 00003 * Copyright (C) 1996-2010, International Business Machines * 00004 * Corporation and others. All Rights Reserved. * 00005 ****************************************************************************** 00006 */ 00007 00014 #ifndef COLL_DATA_H 00015 #define COLL_DATA_H 00016 00017 #include "unicode/utypes.h" 00018 00019 #if !UCONFIG_NO_COLLATION 00020 00021 #include "unicode/uobject.h" 00022 #include "unicode/ucol.h" 00023 00024 U_NAMESPACE_BEGIN 00025 00030 #define KEY_BUFFER_SIZE 64 00031 00036 #define CELIST_BUFFER_SIZE 4 00037 00044 //#define INSTRUMENT_CELIST 00045 00050 #define STRING_LIST_BUFFER_SIZE 16 00051 00058 //#define INSTRUMENT_STRING_LIST 00059 00066 class U_I18N_API CEList : public UObject 00067 { 00068 public: 00082 CEList(UCollator *coll, const UnicodeString &string, UErrorCode &status); 00083 00088 ~CEList(); 00089 00097 int32_t size() const; 00098 00108 uint32_t get(int32_t index) const; 00109 00121 UBool matchesAt(int32_t offset, const CEList *other) const; 00122 00132 uint32_t &operator[](int32_t index) const; 00133 00138 virtual UClassID getDynamicClassID() const; 00143 static UClassID getStaticClassID(); 00144 00145 private: 00146 void add(uint32_t ce, UErrorCode &status); 00147 00148 uint32_t ceBuffer[CELIST_BUFFER_SIZE]; 00149 uint32_t *ces; 00150 int32_t listMax; 00151 int32_t listSize; 00152 00153 #ifdef INSTRUMENT_CELIST 00154 static int32_t _active; 00155 static int32_t _histogram[10]; 00156 #endif 00157 }; 00158 00166 class U_I18N_API StringList : public UObject 00167 { 00168 public: 00180 StringList(UErrorCode &status); 00181 00187 ~StringList(); 00188 00197 void add(const UnicodeString *string, UErrorCode &status); 00198 00208 void add(const UChar *chars, int32_t count, UErrorCode &status); 00209 00220 const UnicodeString *get(int32_t index) const; 00221 00229 int32_t size() const; 00230 00235 virtual UClassID getDynamicClassID() const; 00240 static UClassID getStaticClassID(); 00241 00242 private: 00243 UnicodeString *strings; 00244 int32_t listMax; 00245 int32_t listSize; 00246 00247 #ifdef INSTRUMENT_STRING_LIST 00248 static int32_t _lists; 00249 static int32_t _strings; 00250 static int32_t _histogram[101]; 00251 #endif 00252 }; 00253 00254 /* 00255 * Forward references to internal classes. 00256 */ 00257 class StringToCEsMap; 00258 class CEToStringsMap; 00259 class CollDataCache; 00260 00279 class U_I18N_API CollData : public UObject 00280 { 00281 public: 00297 static CollData *open(UCollator *collator, UErrorCode &status); 00298 00306 static void close(CollData *collData); 00307 00314 UCollator *getCollator() const; 00315 00328 const StringList *getStringList(int32_t ce) const; 00329 00341 const CEList *getCEList(const UnicodeString *string) const; 00342 00350 void freeCEList(const CEList *list); 00351 00363 int32_t minLengthInChars(const CEList *ces, int32_t offset) const; 00364 00365 00385 int32_t minLengthInChars(const CEList *ces, int32_t offset, int32_t *history) const; 00386 00391 virtual UClassID getDynamicClassID() const; 00396 static UClassID getStaticClassID(); 00397 00410 static void freeCollDataCache(); 00411 00419 static void flushCollDataCache(); 00420 00421 private: 00422 friend class CollDataCache; 00423 friend class CollDataCacheEntry; 00424 00425 CollData(UCollator *collator, char *cacheKey, int32_t cachekeyLength, UErrorCode &status); 00426 ~CollData(); 00427 00428 CollData(); 00429 00430 static char *getCollatorKey(UCollator *collator, char *buffer, int32_t bufferLength); 00431 00432 static CollDataCache *getCollDataCache(); 00433 00434 UCollator *coll; 00435 StringToCEsMap *charsToCEList; 00436 CEToStringsMap *ceToCharsStartingWith; 00437 00438 char keyBuffer[KEY_BUFFER_SIZE]; 00439 char *key; 00440 00441 static CollDataCache *collDataCache; 00442 00443 uint32_t minHan; 00444 uint32_t maxHan; 00445 00446 uint32_t jamoLimits[4]; 00447 }; 00448 00449 U_NAMESPACE_END 00450 00451 #endif // #if !UCONFIG_NO_COLLATION 00452 #endif // #ifndef COLL_DATA_H