ICU 4.6 4.6
|
00001 /* 00002 ****************************************************************************** 00003 * Copyright (C) 1996-2010, 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 00609 virtual int32_t getReorderCodes(int32_t *dest, 00610 int32_t destCapacity, 00611 UErrorCode& status) const; 00612 00620 virtual void setReorderCodes(const int32_t* reorderCodes, 00621 int32_t reorderCodesLength, 00622 UErrorCode& status) ; 00623 00633 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00634 const Locale& displayLocale, 00635 UnicodeString& name); 00636 00645 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, 00646 UnicodeString& name); 00647 00659 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00660 00669 static StringEnumeration* U_EXPORT2 getAvailableLocales(void); 00670 00680 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status); 00681 00693 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status); 00694 00711 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale, 00712 UBool commonlyUsed, UErrorCode& status); 00713 00741 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale, 00742 UBool& isAvailable, UErrorCode& status); 00743 00744 #if !UCONFIG_NO_SERVICE 00745 00753 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status); 00754 00762 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status); 00763 00774 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); 00775 #endif /* UCONFIG_NO_SERVICE */ 00776 00782 virtual void getVersion(UVersionInfo info) const = 0; 00783 00794 virtual UClassID getDynamicClassID(void) const = 0; 00795 00804 virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 00805 UErrorCode &status) = 0; 00806 00815 virtual UColAttributeValue getAttribute(UColAttribute attr, 00816 UErrorCode &status) = 0; 00817 00828 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0; 00829 00839 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0; 00840 00848 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0; 00849 00856 virtual uint32_t getVariableTop(UErrorCode &status) const = 0; 00857 00867 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const; 00868 00869 00875 virtual Collator* safeClone(void) = 0; 00876 00889 virtual int32_t getSortKey(const UnicodeString& source, 00890 uint8_t* result, 00891 int32_t resultLength) const = 0; 00892 00908 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength, 00909 uint8_t*result, int32_t resultLength) const = 0; 00910 00948 static int32_t U_EXPORT2 getBound(const uint8_t *source, 00949 int32_t sourceLength, 00950 UColBoundMode boundType, 00951 uint32_t noOfLevels, 00952 uint8_t *result, 00953 int32_t resultLength, 00954 UErrorCode &status); 00955 00956 00957 protected: 00958 00959 // Collator protected constructors ------------------------------------- 00960 00968 Collator(); 00969 00981 Collator(UCollationStrength collationStrength, 00982 UNormalizationMode decompositionMode); 00983 00989 Collator(const Collator& other); 00990 00991 // Collator protected methods ----------------------------------------- 00992 00993 01001 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale); 01002 01003 public: 01004 #if !UCONFIG_NO_SERVICE 01005 01009 static UCollator* createUCollator(const char* loc, UErrorCode* status); 01010 #endif 01011 private: 01016 Collator& operator=(const Collator& other); 01017 01018 friend class CFactory; 01019 friend class SimpleCFactory; 01020 friend class ICUCollatorFactory; 01021 friend class ICUCollatorService; 01022 static Collator* makeInstance(const Locale& desiredLocale, 01023 UErrorCode& status); 01024 01025 // Collator private data members --------------------------------------- 01026 01027 /* 01028 synwee : removed as attributes to be handled by child class 01029 UCollationStrength strength; 01030 Normalizer::EMode decmp; 01031 */ 01032 /* This is useless information */ 01033 /* static const UVersionInfo fVersion;*/ 01034 }; 01035 01036 #if !UCONFIG_NO_SERVICE 01037 01053 class U_I18N_API CollatorFactory : public UObject { 01054 public: 01055 01060 virtual ~CollatorFactory(); 01061 01069 virtual UBool visible(void) const; 01070 01078 virtual Collator* createCollator(const Locale& loc) = 0; 01079 01090 virtual UnicodeString& getDisplayName(const Locale& objectLocale, 01091 const Locale& displayLocale, 01092 UnicodeString& result); 01093 01103 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0; 01104 }; 01105 #endif /* UCONFIG_NO_SERVICE */ 01106 01107 // Collator inline methods ----------------------------------------------- 01108 01109 U_NAMESPACE_END 01110 01111 #endif /* #if !UCONFIG_NO_COLLATION */ 01112 01113 #endif