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