ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ****************************************************************************** 00003 * Copyright (C) 1996-2011, 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 00613 virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest, 00614 int32_t destCapacity, 00615 UErrorCode& status) const; 00616 00627 virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes, 00628 int32_t reorderCodesLength, 00629 UErrorCode& status) ; 00630 00647 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode, 00648 int32_t* dest, 00649 int32_t destCapacity, 00650 UErrorCode& status); 00651 00661 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00662 const Locale& displayLocale, 00663 UnicodeString& name); 00664 00673 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00674 UnicodeString& name); 00675 00687 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00688 00697 static StringEnumeration* U_EXPORT2 getAvailableLocales(void); 00698 00708 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status); 00709 00721 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status); 00722 00739 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale, 00740 UBool commonlyUsed, UErrorCode& status); 00741 00769 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale, 00770 UBool& isAvailable, UErrorCode& status); 00771 00772 #if !UCONFIG_NO_SERVICE 00773 00781 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status); 00782 00790 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status); 00791 00802 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); 00803 #endif /* UCONFIG_NO_SERVICE */ 00804 00810 virtual void getVersion(UVersionInfo info) const = 0; 00811 00822 virtual UClassID getDynamicClassID(void) const = 0; 00823 00832 virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 00833 UErrorCode &status) = 0; 00834 00843 virtual UColAttributeValue getAttribute(UColAttribute attr, 00844 UErrorCode &status) = 0; 00845 00856 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0; 00857 00867 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0; 00868 00876 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0; 00877 00884 virtual uint32_t getVariableTop(UErrorCode &status) const = 0; 00885 00895 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const; 00896 00897 00903 virtual Collator* safeClone(void) = 0; 00904 00917 virtual int32_t getSortKey(const UnicodeString& source, 00918 uint8_t* result, 00919 int32_t resultLength) const = 0; 00920 00936 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength, 00937 uint8_t*result, int32_t resultLength) const = 0; 00938 00976 static int32_t U_EXPORT2 getBound(const uint8_t *source, 00977 int32_t sourceLength, 00978 UColBoundMode boundType, 00979 uint32_t noOfLevels, 00980 uint8_t *result, 00981 int32_t resultLength, 00982 UErrorCode &status); 00983 00984 00985 protected: 00986 00987 // Collator protected constructors ------------------------------------- 00988 00996 Collator(); 00997 01009 Collator(UCollationStrength collationStrength, 01010 UNormalizationMode decompositionMode); 01011 01017 Collator(const Collator& other); 01018 01019 // Collator protected methods ----------------------------------------- 01020 01021 01029 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale); 01030 01031 public: 01032 #if !UCONFIG_NO_SERVICE 01033 01037 static UCollator* createUCollator(const char* loc, UErrorCode* status); 01038 #endif 01039 private: 01044 Collator& operator=(const Collator& other); 01045 01046 friend class CFactory; 01047 friend class SimpleCFactory; 01048 friend class ICUCollatorFactory; 01049 friend class ICUCollatorService; 01050 static Collator* makeInstance(const Locale& desiredLocale, 01051 UErrorCode& status); 01052 01053 // Collator private data members --------------------------------------- 01054 01055 /* 01056 synwee : removed as attributes to be handled by child class 01057 UCollationStrength strength; 01058 Normalizer::EMode decmp; 01059 */ 01060 /* This is useless information */ 01061 /* static const UVersionInfo fVersion;*/ 01062 }; 01063 01064 #if !UCONFIG_NO_SERVICE 01065 01081 class U_I18N_API CollatorFactory : public UObject { 01082 public: 01083 01088 virtual ~CollatorFactory(); 01089 01097 virtual UBool visible(void) const; 01098 01106 virtual Collator* createCollator(const Locale& loc) = 0; 01107 01118 virtual UnicodeString& getDisplayName(const Locale& objectLocale, 01119 const Locale& displayLocale, 01120 UnicodeString& result); 01121 01131 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0; 01132 }; 01133 #endif /* UCONFIG_NO_SERVICE */ 01134 01135 // Collator inline methods ----------------------------------------------- 01136 01137 U_NAMESPACE_END 01138 01139 #endif /* #if !UCONFIG_NO_COLLATION */ 01140 01141 #endif