ICU 49.1.1
49.1.1
|
00001 /* 00002 ****************************************************************************** 00003 * Copyright (C) 1996-2012, International Business Machines * 00004 * Corporation and others. All Rights Reserved. * 00005 ****************************************************************************** 00006 */ 00007 00049 #ifndef COLL_H 00050 #define COLL_H 00051 00052 #include "unicode/utypes.h" 00053 00054 #if !UCONFIG_NO_COLLATION 00055 00056 #include "unicode/uobject.h" 00057 #include "unicode/ucol.h" 00058 #include "unicode/normlzr.h" 00059 #include "unicode/locid.h" 00060 #include "unicode/uniset.h" 00061 #include "unicode/umisc.h" 00062 #include "unicode/uiter.h" 00063 #include "unicode/stringpiece.h" 00064 00065 U_NAMESPACE_BEGIN 00066 00067 class StringEnumeration; 00068 00069 #if !UCONFIG_NO_SERVICE 00070 00073 class CollatorFactory; 00074 #endif 00075 00079 class CollationKey; 00080 00177 class U_I18N_API Collator : public UObject { 00178 public: 00179 00180 // Collator public enums ----------------------------------------------- 00181 00207 enum ECollationStrength 00208 { 00209 PRIMARY = 0, 00210 SECONDARY = 1, 00211 TERTIARY = 2, 00212 QUATERNARY = 3, 00213 IDENTICAL = 15 00214 }; 00215 00226 enum EComparisonResult 00227 { 00228 LESS = -1, 00229 EQUAL = 0, 00230 GREATER = 1 00231 }; 00232 00233 // Collator public destructor ----------------------------------------- 00234 00239 virtual ~Collator(); 00240 00241 // Collator public methods -------------------------------------------- 00242 00249 virtual UBool operator==(const Collator& other) const; 00250 00257 virtual UBool operator!=(const Collator& other) const; 00258 00264 virtual Collator* clone(void) const = 0; 00265 00285 static Collator* U_EXPORT2 createInstance(UErrorCode& err); 00286 00310 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err); 00311 00312 #ifdef U_USE_COLLATION_OBSOLETE_2_6 00313 00336 static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err); 00337 #endif 00338 00350 virtual EComparisonResult compare(const UnicodeString& source, 00351 const UnicodeString& target) const; 00352 00365 virtual UCollationResult compare(const UnicodeString& source, 00366 const UnicodeString& target, 00367 UErrorCode &status) const = 0; 00368 00381 virtual EComparisonResult compare(const UnicodeString& source, 00382 const UnicodeString& target, 00383 int32_t length) const; 00384 00398 virtual UCollationResult compare(const UnicodeString& source, 00399 const UnicodeString& target, 00400 int32_t length, 00401 UErrorCode &status) const = 0; 00402 00418 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength, 00419 const UChar* target, int32_t targetLength) 00420 const; 00421 00438 virtual UCollationResult compare(const UChar* source, int32_t sourceLength, 00439 const UChar* target, int32_t targetLength, 00440 UErrorCode &status) const = 0; 00441 00453 virtual UCollationResult compare(UCharIterator &sIter, 00454 UCharIterator &tIter, 00455 UErrorCode &status) const; 00456 00470 virtual UCollationResult compareUTF8(const StringPiece &source, 00471 const StringPiece &target, 00472 UErrorCode &status) const; 00473 00489 virtual CollationKey& getCollationKey(const UnicodeString& source, 00490 CollationKey& key, 00491 UErrorCode& status) const = 0; 00492 00509 virtual CollationKey& getCollationKey(const UChar*source, 00510 int32_t sourceLength, 00511 CollationKey& key, 00512 UErrorCode& status) const = 0; 00517 virtual int32_t hashCode(void) const = 0; 00518 00531 virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0; 00532 00542 UBool greater(const UnicodeString& source, const UnicodeString& target) 00543 const; 00544 00554 UBool greaterOrEqual(const UnicodeString& source, 00555 const UnicodeString& target) const; 00556 00566 UBool equals(const UnicodeString& source, const UnicodeString& target) const; 00567 00578 virtual ECollationStrength getStrength(void) const = 0; 00579 00598 virtual void setStrength(ECollationStrength newStrength) = 0; 00599 00615 virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest, 00616 int32_t destCapacity, 00617 UErrorCode& status) const; 00618 00633 virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes, 00634 int32_t reorderCodesLength, 00635 UErrorCode& status) ; 00636 00655 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode, 00656 int32_t* dest, 00657 int32_t destCapacity, 00658 UErrorCode& status); 00659 00669 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00670 const Locale& displayLocale, 00671 UnicodeString& name); 00672 00681 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00682 UnicodeString& name); 00683 00695 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00696 00705 static StringEnumeration* U_EXPORT2 getAvailableLocales(void); 00706 00716 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status); 00717 00729 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status); 00730 00747 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale, 00748 UBool commonlyUsed, UErrorCode& status); 00749 00777 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale, 00778 UBool& isAvailable, UErrorCode& status); 00779 00780 #if !UCONFIG_NO_SERVICE 00781 00789 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status); 00790 00798 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status); 00799 00810 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); 00811 #endif /* UCONFIG_NO_SERVICE */ 00812 00818 virtual void getVersion(UVersionInfo info) const = 0; 00819 00830 virtual UClassID getDynamicClassID(void) const = 0; 00831 00840 virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 00841 UErrorCode &status) = 0; 00842 00851 virtual UColAttributeValue getAttribute(UColAttribute attr, 00852 UErrorCode &status) = 0; 00853 00864 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0; 00865 00875 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0; 00876 00884 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0; 00885 00892 virtual uint32_t getVariableTop(UErrorCode &status) const = 0; 00893 00903 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const; 00904 00905 00911 virtual Collator* safeClone(void) = 0; 00912 00925 virtual int32_t getSortKey(const UnicodeString& source, 00926 uint8_t* result, 00927 int32_t resultLength) const = 0; 00928 00944 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength, 00945 uint8_t*result, int32_t resultLength) const = 0; 00946 00984 static int32_t U_EXPORT2 getBound(const uint8_t *source, 00985 int32_t sourceLength, 00986 UColBoundMode boundType, 00987 uint32_t noOfLevels, 00988 uint8_t *result, 00989 int32_t resultLength, 00990 UErrorCode &status); 00991 00992 00993 protected: 00994 00995 // Collator protected constructors ------------------------------------- 00996 01004 Collator(); 01005 01006 #ifndef U_HIDE_DEPRECATED_API 01007 01018 Collator(UCollationStrength collationStrength, 01019 UNormalizationMode decompositionMode); 01020 #endif /* U_HIDE_DEPRECATED_API */ 01021 01027 Collator(const Collator& other); 01028 01029 // Collator protected methods ----------------------------------------- 01030 01031 01039 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale); 01040 01041 public: 01042 #if !UCONFIG_NO_SERVICE 01043 #ifndef U_HIDE_INTERNAL_API 01044 01048 static UCollator* createUCollator(const char* loc, UErrorCode* status); 01049 #endif /* U_HIDE_INTERNAL_API */ 01050 #endif 01051 01075 virtual int32_t internalGetShortDefinitionString(const char *locale, 01076 char *buffer, 01077 int32_t capacity, 01078 UErrorCode &status) const; 01079 private: 01084 Collator& operator=(const Collator& other); 01085 01086 friend class CFactory; 01087 friend class SimpleCFactory; 01088 friend class ICUCollatorFactory; 01089 friend class ICUCollatorService; 01090 static Collator* makeInstance(const Locale& desiredLocale, 01091 UErrorCode& status); 01092 01093 // Collator private data members --------------------------------------- 01094 01095 /* 01096 synwee : removed as attributes to be handled by child class 01097 UCollationStrength strength; 01098 Normalizer::EMode decmp; 01099 */ 01100 /* This is useless information */ 01101 /* static const UVersionInfo fVersion;*/ 01102 }; 01103 01104 #if !UCONFIG_NO_SERVICE 01105 01121 class U_I18N_API CollatorFactory : public UObject { 01122 public: 01123 01128 virtual ~CollatorFactory(); 01129 01137 virtual UBool visible(void) const; 01138 01146 virtual Collator* createCollator(const Locale& loc) = 0; 01147 01158 virtual UnicodeString& getDisplayName(const Locale& objectLocale, 01159 const Locale& displayLocale, 01160 UnicodeString& result); 01161 01171 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0; 01172 }; 01173 #endif /* UCONFIG_NO_SERVICE */ 01174 01175 // Collator inline methods ----------------------------------------------- 01176 01177 U_NAMESPACE_END 01178 01179 #endif /* #if !UCONFIG_NO_COLLATION */ 01180 01181 #endif