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