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