1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 5*0e209d39SAndroid Build Coastguard Worker * 6*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 1998-2014, International Business Machines 7*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 8*0e209d39SAndroid Build Coastguard Worker * 9*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 10*0e209d39SAndroid Build Coastguard Worker * 11*0e209d39SAndroid Build Coastguard Worker * Private implementation header for C collation 12*0e209d39SAndroid Build Coastguard Worker * file name: ucol_imp.h 13*0e209d39SAndroid Build Coastguard Worker * encoding: UTF-8 14*0e209d39SAndroid Build Coastguard Worker * tab size: 8 (not used) 15*0e209d39SAndroid Build Coastguard Worker * indentation:4 16*0e209d39SAndroid Build Coastguard Worker * 17*0e209d39SAndroid Build Coastguard Worker * created on: 2000dec11 18*0e209d39SAndroid Build Coastguard Worker * created by: Vladimir Weinstein 19*0e209d39SAndroid Build Coastguard Worker * 20*0e209d39SAndroid Build Coastguard Worker * Modification history 21*0e209d39SAndroid Build Coastguard Worker * Date Name Comments 22*0e209d39SAndroid Build Coastguard Worker * 02/16/2001 synwee Added UCOL_GETPREVCE for the use in ucoleitr 23*0e209d39SAndroid Build Coastguard Worker * 02/27/2001 synwee Added getMaxExpansion data structure in UCollator 24*0e209d39SAndroid Build Coastguard Worker * 03/02/2001 synwee Added UCOL_IMPLICIT_CE 25*0e209d39SAndroid Build Coastguard Worker * 03/12/2001 synwee Added pointer start to collIterate. 26*0e209d39SAndroid Build Coastguard Worker */ 27*0e209d39SAndroid Build Coastguard Worker 28*0e209d39SAndroid Build Coastguard Worker #ifndef UCOL_IMP_H 29*0e209d39SAndroid Build Coastguard Worker #define UCOL_IMP_H 30*0e209d39SAndroid Build Coastguard Worker 31*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 32*0e209d39SAndroid Build Coastguard Worker 33*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_COLLATION 34*0e209d39SAndroid Build Coastguard Worker 35*0e209d39SAndroid Build Coastguard Worker // This part needs to compile as plain C code, for cintltst. 36*0e209d39SAndroid Build Coastguard Worker 37*0e209d39SAndroid Build Coastguard Worker #include "unicode/ucol.h" 38*0e209d39SAndroid Build Coastguard Worker 39*0e209d39SAndroid Build Coastguard Worker /** Check whether two collators are equal. Collators are considered equal if they 40*0e209d39SAndroid Build Coastguard Worker * will sort strings the same. This means that both the current attributes and the 41*0e209d39SAndroid Build Coastguard Worker * rules must be equivalent. 42*0e209d39SAndroid Build Coastguard Worker * @param source first collator 43*0e209d39SAndroid Build Coastguard Worker * @param target second collator 44*0e209d39SAndroid Build Coastguard Worker * @return true or false 45*0e209d39SAndroid Build Coastguard Worker * @internal ICU 3.0 46*0e209d39SAndroid Build Coastguard Worker */ 47*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2 48*0e209d39SAndroid Build Coastguard Worker ucol_equals(const UCollator *source, const UCollator *target); 49*0e209d39SAndroid Build Coastguard Worker 50*0e209d39SAndroid Build Coastguard Worker /** 51*0e209d39SAndroid Build Coastguard Worker * Convenience string denoting the Collation data tree 52*0e209d39SAndroid Build Coastguard Worker */ 53*0e209d39SAndroid Build Coastguard Worker #define U_ICUDATA_COLL U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "coll" 54*0e209d39SAndroid Build Coastguard Worker 55*0e209d39SAndroid Build Coastguard Worker #ifdef __cplusplus 56*0e209d39SAndroid Build Coastguard Worker 57*0e209d39SAndroid Build Coastguard Worker #include "unicode/locid.h" 58*0e209d39SAndroid Build Coastguard Worker #include "unicode/ures.h" 59*0e209d39SAndroid Build Coastguard Worker 60*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 61*0e209d39SAndroid Build Coastguard Worker 62*0e209d39SAndroid Build Coastguard Worker struct CollationCacheEntry; 63*0e209d39SAndroid Build Coastguard Worker 64*0e209d39SAndroid Build Coastguard Worker class Locale; 65*0e209d39SAndroid Build Coastguard Worker class UnicodeString; 66*0e209d39SAndroid Build Coastguard Worker class UnifiedCache; 67*0e209d39SAndroid Build Coastguard Worker 68*0e209d39SAndroid Build Coastguard Worker /** Implemented in ucol_res.cpp. */ 69*0e209d39SAndroid Build Coastguard Worker class CollationLoader { 70*0e209d39SAndroid Build Coastguard Worker public: 71*0e209d39SAndroid Build Coastguard Worker static void appendRootRules(UnicodeString &s); 72*0e209d39SAndroid Build Coastguard Worker static void loadRules(const char *localeID, const char *collationType, 73*0e209d39SAndroid Build Coastguard Worker UnicodeString &rules, UErrorCode &errorCode); 74*0e209d39SAndroid Build Coastguard Worker // Adds a reference to returned value. 75*0e209d39SAndroid Build Coastguard Worker static const CollationCacheEntry *loadTailoring(const Locale &locale, UErrorCode &errorCode); 76*0e209d39SAndroid Build Coastguard Worker 77*0e209d39SAndroid Build Coastguard Worker // Cache callback. Adds a reference to returned value. 78*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *createCacheEntry(UErrorCode &errorCode); 79*0e209d39SAndroid Build Coastguard Worker 80*0e209d39SAndroid Build Coastguard Worker private: 81*0e209d39SAndroid Build Coastguard Worker static void U_CALLCONV loadRootRules(UErrorCode &errorCode); 82*0e209d39SAndroid Build Coastguard Worker 83*0e209d39SAndroid Build Coastguard Worker // The following members are used by loadTailoring() 84*0e209d39SAndroid Build Coastguard Worker // and the cache callback. 85*0e209d39SAndroid Build Coastguard Worker static const uint32_t TRIED_SEARCH = 1; 86*0e209d39SAndroid Build Coastguard Worker static const uint32_t TRIED_DEFAULT = 2; 87*0e209d39SAndroid Build Coastguard Worker static const uint32_t TRIED_STANDARD = 4; 88*0e209d39SAndroid Build Coastguard Worker 89*0e209d39SAndroid Build Coastguard Worker CollationLoader(const CollationCacheEntry *re, const Locale &requested, UErrorCode &errorCode); 90*0e209d39SAndroid Build Coastguard Worker ~CollationLoader(); 91*0e209d39SAndroid Build Coastguard Worker 92*0e209d39SAndroid Build Coastguard Worker // All loadFromXXX methods add a reference to the returned value. 93*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *loadFromLocale(UErrorCode &errorCode); 94*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *loadFromBundle(UErrorCode &errorCode); 95*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *loadFromCollations(UErrorCode &errorCode); 96*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *loadFromData(UErrorCode &errorCode); 97*0e209d39SAndroid Build Coastguard Worker 98*0e209d39SAndroid Build Coastguard Worker // Adds a reference to returned value. 99*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *getCacheEntry(UErrorCode &errorCode); 100*0e209d39SAndroid Build Coastguard Worker 101*0e209d39SAndroid Build Coastguard Worker /** 102*0e209d39SAndroid Build Coastguard Worker * Returns the rootEntry (with one addRef()) if loc==root, 103*0e209d39SAndroid Build Coastguard Worker * or else returns a new cache entry with ref count 1 for the loc and 104*0e209d39SAndroid Build Coastguard Worker * the root tailoring. 105*0e209d39SAndroid Build Coastguard Worker */ 106*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *makeCacheEntryFromRoot( 107*0e209d39SAndroid Build Coastguard Worker const Locale &loc, UErrorCode &errorCode) const; 108*0e209d39SAndroid Build Coastguard Worker 109*0e209d39SAndroid Build Coastguard Worker /** 110*0e209d39SAndroid Build Coastguard Worker * Returns the entryFromCache as is if loc==validLocale, 111*0e209d39SAndroid Build Coastguard Worker * or else returns a new cache entry with ref count 1 for the loc and 112*0e209d39SAndroid Build Coastguard Worker * the same tailoring. In the latter case, a ref count is removed from 113*0e209d39SAndroid Build Coastguard Worker * entryFromCache. 114*0e209d39SAndroid Build Coastguard Worker */ 115*0e209d39SAndroid Build Coastguard Worker static const CollationCacheEntry *makeCacheEntry( 116*0e209d39SAndroid Build Coastguard Worker const Locale &loc, 117*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *entryFromCache, 118*0e209d39SAndroid Build Coastguard Worker UErrorCode &errorCode); 119*0e209d39SAndroid Build Coastguard Worker 120*0e209d39SAndroid Build Coastguard Worker const UnifiedCache *cache; 121*0e209d39SAndroid Build Coastguard Worker const CollationCacheEntry *rootEntry; 122*0e209d39SAndroid Build Coastguard Worker Locale validLocale; 123*0e209d39SAndroid Build Coastguard Worker Locale locale; 124*0e209d39SAndroid Build Coastguard Worker char type[16]; 125*0e209d39SAndroid Build Coastguard Worker char defaultType[16]; 126*0e209d39SAndroid Build Coastguard Worker uint32_t typesTried; 127*0e209d39SAndroid Build Coastguard Worker UBool typeFallback; 128*0e209d39SAndroid Build Coastguard Worker UResourceBundle *bundle; 129*0e209d39SAndroid Build Coastguard Worker UResourceBundle *collations; 130*0e209d39SAndroid Build Coastguard Worker UResourceBundle *data; 131*0e209d39SAndroid Build Coastguard Worker }; 132*0e209d39SAndroid Build Coastguard Worker 133*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 134*0e209d39SAndroid Build Coastguard Worker 135*0e209d39SAndroid Build Coastguard Worker #endif /* __cplusplus */ 136*0e209d39SAndroid Build Coastguard Worker 137*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_COLLATION */ 138*0e209d39SAndroid Build Coastguard Worker 139*0e209d39SAndroid Build Coastguard Worker #endif 140