ICU 73.2  73.2
coll.h
Go to the documentation of this file.
00001 // © 2016 and later: Unicode, Inc. and others.
00002 // License & terms of use: http://www.unicode.org/copyright.html
00003 /*
00004 ******************************************************************************
00005 *   Copyright (C) 1996-2016, International Business Machines
00006 *   Corporation and others.  All Rights Reserved.
00007 ******************************************************************************
00008 */
00009 
00052 #ifndef COLL_H
00053 #define COLL_H
00054 
00055 #include "unicode/utypes.h"
00056 
00057 #if U_SHOW_CPLUSPLUS_API
00058 
00059 #if !UCONFIG_NO_COLLATION
00060 
00061 #include "unicode/uobject.h"
00062 #include "unicode/ucol.h"
00063 #include "unicode/unorm.h"
00064 #include "unicode/locid.h"
00065 #include "unicode/uniset.h"
00066 #include "unicode/umisc.h"
00067 #include "unicode/uiter.h"
00068 #include "unicode/stringpiece.h"
00069 
00070 U_NAMESPACE_BEGIN
00071 
00072 class StringEnumeration;
00073 
00074 #if !UCONFIG_NO_SERVICE
00075 
00078 class CollatorFactory;
00079 #endif
00080 
00084 class CollationKey;
00085 
00167 class U_I18N_API Collator : public UObject {
00168 public:
00169 
00170     // Collator public enums -----------------------------------------------
00171 
00197     enum ECollationStrength
00198     {
00199         PRIMARY    = UCOL_PRIMARY,  // 0
00200         SECONDARY  = UCOL_SECONDARY,  // 1
00201         TERTIARY   = UCOL_TERTIARY,  // 2
00202         QUATERNARY = UCOL_QUATERNARY,  // 3
00203         IDENTICAL  = UCOL_IDENTICAL  // 15
00204     };
00205 
00206 
00207     // Cannot use #ifndef U_HIDE_DEPRECATED_API for the following, it is
00208     // used by virtual methods that cannot have that conditional.
00209 #ifndef U_FORCE_HIDE_DEPRECATED_API
00210 
00220     enum EComparisonResult
00221     {
00222         LESS = UCOL_LESS,  // -1
00223         EQUAL = UCOL_EQUAL,  // 0
00224         GREATER = UCOL_GREATER  // 1
00225     };
00226 #endif  // U_FORCE_HIDE_DEPRECATED_API
00227 
00228     // Collator public destructor -----------------------------------------
00229 
00234     virtual ~Collator();
00235 
00236     // Collator public methods --------------------------------------------
00237 
00256     virtual bool operator==(const Collator& other) const;
00257 
00265     virtual bool operator!=(const Collator& other) const;
00266 
00272     virtual Collator* clone() const = 0;
00273 
00293     static Collator* U_EXPORT2 createInstance(UErrorCode&  err);
00294 
00328     static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00329 
00330 #ifndef U_FORCE_HIDE_DEPRECATED_API
00331 
00342     virtual EComparisonResult compare(const UnicodeString& source,
00343                                       const UnicodeString& target) const;
00344 #endif  // U_FORCE_HIDE_DEPRECATED_API
00345 
00358     virtual UCollationResult compare(const UnicodeString& source,
00359                                       const UnicodeString& target,
00360                                       UErrorCode &status) const = 0;
00361 
00362 #ifndef U_FORCE_HIDE_DEPRECATED_API
00363 
00375     virtual EComparisonResult compare(const UnicodeString& source,
00376                                       const UnicodeString& target,
00377                                       int32_t length) const;
00378 #endif  // U_FORCE_HIDE_DEPRECATED_API
00379 
00393     virtual UCollationResult compare(const UnicodeString& source,
00394                                       const UnicodeString& target,
00395                                       int32_t length,
00396                                       UErrorCode &status) const = 0;
00397 
00398 #ifndef U_FORCE_HIDE_DEPRECATED_API
00399 
00432     virtual EComparisonResult compare(const char16_t* source, int32_t sourceLength,
00433                                       const char16_t* target, int32_t targetLength)
00434                                       const;
00435 #endif  // U_FORCE_HIDE_DEPRECATED_API
00436 
00453     virtual UCollationResult compare(const char16_t* source, int32_t sourceLength,
00454                                       const char16_t* target, int32_t targetLength,
00455                                       UErrorCode &status) const = 0;
00456 
00468     virtual UCollationResult compare(UCharIterator &sIter,
00469                                      UCharIterator &tIter,
00470                                      UErrorCode &status) const;
00471 
00485     virtual UCollationResult compareUTF8(const StringPiece &source,
00486                                          const StringPiece &target,
00487                                          UErrorCode &status) const;
00488 
00507     virtual CollationKey& getCollationKey(const UnicodeString&  source,
00508                                           CollationKey& key,
00509                                           UErrorCode& status) const = 0;
00510 
00530     virtual CollationKey& getCollationKey(const char16_t*source,
00531                                           int32_t sourceLength,
00532                                           CollationKey& key,
00533                                           UErrorCode& status) const = 0;
00538     virtual int32_t hashCode(void) const = 0;
00539 
00540 #ifndef U_FORCE_HIDE_DEPRECATED_API
00541 
00553     virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00554 #endif  // U_FORCE_HIDE_DEPRECATED_API
00555 
00565     UBool greater(const UnicodeString& source, const UnicodeString& target)
00566                   const;
00567 
00577     UBool greaterOrEqual(const UnicodeString& source,
00578                          const UnicodeString& target) const;
00579 
00589     UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00590 
00591 #ifndef U_FORCE_HIDE_DEPRECATED_API
00592 
00602     virtual ECollationStrength getStrength(void) const;
00603 
00622     virtual void setStrength(ECollationStrength newStrength);
00623 #endif  // U_FORCE_HIDE_DEPRECATED_API
00624 
00640      virtual int32_t getReorderCodes(int32_t *dest,
00641                                      int32_t destCapacity,
00642                                      UErrorCode& status) const;
00643 
00659      virtual void setReorderCodes(const int32_t* reorderCodes,
00660                                   int32_t reorderCodesLength,
00661                                   UErrorCode& status) ;
00662 
00683     static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00684                                 int32_t* dest,
00685                                 int32_t destCapacity,
00686                                 UErrorCode& status);
00687 
00697     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00698                                          const Locale& displayLocale,
00699                                          UnicodeString& name);
00700 
00709     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00710                                          UnicodeString& name);
00711 
00723     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00724 
00733     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00734 
00744     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00745 
00757     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00758 
00775     static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00776                                                                     UBool commonlyUsed, UErrorCode& status);
00777 
00805     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00806                                           UBool& isAvailable, UErrorCode& status);
00807 
00808 #if !UCONFIG_NO_SERVICE
00809 
00820     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00821 
00832     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00833 
00847     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00848 #endif /* UCONFIG_NO_SERVICE */
00849 
00855     virtual void getVersion(UVersionInfo info) const = 0;
00856 
00867     virtual UClassID getDynamicClassID(void) const override = 0;
00868 
00877     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00878                               UErrorCode &status) = 0;
00879 
00888     virtual UColAttributeValue getAttribute(UColAttribute attr,
00889                                             UErrorCode &status) const = 0;
00890 
00909     virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode);
00910 
00919     virtual UColReorderCode getMaxVariable() const;
00920 
00921 #ifndef U_FORCE_HIDE_DEPRECATED_API
00922 
00938     virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) = 0;
00939 
00955     virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0;
00956 
00968     virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0;
00969 #endif  // U_FORCE_HIDE_DEPRECATED_API
00970 
00978     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00979 
00989     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00990 
00991 #ifndef U_FORCE_HIDE_DEPRECATED_API
00992 
00999     virtual Collator* safeClone() const;
01000 #endif  // U_FORCE_HIDE_DEPRECATED_API
01001 
01018     virtual int32_t getSortKey(const UnicodeString& source,
01019                               uint8_t* result,
01020                               int32_t resultLength) const = 0;
01021 
01041     virtual int32_t getSortKey(const char16_t*source, int32_t sourceLength,
01042                                uint8_t*result, int32_t resultLength) const = 0;
01043 
01081     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
01082             int32_t             sourceLength,
01083             UColBoundMode       boundType,
01084             uint32_t            noOfLevels,
01085             uint8_t             *result,
01086             int32_t             resultLength,
01087             UErrorCode          &status);
01088 
01089 
01090 protected:
01091 
01092     // Collator protected constructors -------------------------------------
01093 
01101     Collator();
01102 
01103 #ifndef U_HIDE_DEPRECATED_API
01104 
01115     Collator(UCollationStrength collationStrength,
01116              UNormalizationMode decompositionMode);
01117 #endif  /* U_HIDE_DEPRECATED_API */
01118 
01124     Collator(const Collator& other);
01125 
01126 public:
01134     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01135 
01159     virtual int32_t internalGetShortDefinitionString(const char *locale,
01160                                                      char *buffer,
01161                                                      int32_t capacity,
01162                                                      UErrorCode &status) const;
01163 
01168     virtual UCollationResult internalCompareUTF8(
01169             const char *left, int32_t leftLength,
01170             const char *right, int32_t rightLength,
01171             UErrorCode &errorCode) const;
01172 
01177     virtual int32_t
01178     internalNextSortKeyPart(
01179             UCharIterator *iter, uint32_t state[2],
01180             uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
01181 
01182 #ifndef U_HIDE_INTERNAL_API
01183 
01184     static inline Collator *fromUCollator(UCollator *uc) {
01185         return reinterpret_cast<Collator *>(uc);
01186     }
01188     static inline const Collator *fromUCollator(const UCollator *uc) {
01189         return reinterpret_cast<const Collator *>(uc);
01190     }
01192     inline UCollator *toUCollator() {
01193         return reinterpret_cast<UCollator *>(this);
01194     }
01196     inline const UCollator *toUCollator() const {
01197         return reinterpret_cast<const UCollator *>(this);
01198     }
01199 #endif  // U_HIDE_INTERNAL_API
01200 
01201 private:
01205     Collator& operator=(const Collator& other) = delete;
01206 
01207     friend class CFactory;
01208     friend class SimpleCFactory;
01209     friend class ICUCollatorFactory;
01210     friend class ICUCollatorService;
01211     static Collator* makeInstance(const Locale& desiredLocale,
01212                                   UErrorCode& status);
01213 };
01214 
01215 #if !UCONFIG_NO_SERVICE
01216 
01232 class U_I18N_API CollatorFactory : public UObject {
01233 public:
01234 
01239     virtual ~CollatorFactory();
01240 
01248     virtual UBool visible(void) const;
01249 
01257     virtual Collator* createCollator(const Locale& loc) = 0;
01258 
01269     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01270                                            const Locale& displayLocale,
01271                                            UnicodeString& result);
01272 
01282     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01283 };
01284 #endif /* UCONFIG_NO_SERVICE */
01285 
01286 // Collator inline methods -----------------------------------------------
01287 
01288 U_NAMESPACE_END
01289 
01290 #endif /* #if !UCONFIG_NO_COLLATION */
01291 
01292 #endif /* U_SHOW_CPLUSPLUS_API */
01293 
01294 #endif