|
ICU 73.2
73.2
|
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
1.7.6.1