00001
00002
00003
00004
00005
00006
00007
00044 #ifndef COLL_H
00045 #define COLL_H
00046
00047 #include "unicode/utypes.h"
00048
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
00063 U_NAMESPACE_BEGIN
00064
00065 class StringEnumeration;
00066
00067 #if !UCONFIG_NO_SERVICE
00068
00071 class CollatorFactory;
00072 #endif
00073
00077 class CollationKey;
00078
00175 class U_I18N_API Collator : public UObject {
00176 public:
00177
00178
00179
00205 enum ECollationStrength
00206 {
00207 PRIMARY = 0,
00208 SECONDARY = 1,
00209 TERTIARY = 2,
00210 QUATERNARY = 3,
00211 IDENTICAL = 15
00212 };
00213
00224 enum EComparisonResult
00225 {
00226 LESS = -1,
00227 EQUAL = 0,
00228 GREATER = 1
00229 };
00230
00231
00232
00237 virtual ~Collator();
00238
00239
00240
00247 virtual UBool operator==(const Collator& other) const;
00248
00255 virtual UBool operator!=(const Collator& other) const;
00256
00262 virtual Collator* clone(void) const = 0;
00263
00283 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
00284
00308 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00309
00310 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00311
00334 static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00335 #endif
00336
00348 virtual EComparisonResult compare(const UnicodeString& source,
00349 const UnicodeString& target) const;
00350
00363 virtual UCollationResult compare(const UnicodeString& source,
00364 const UnicodeString& target,
00365 UErrorCode &status) const = 0;
00366
00379 virtual EComparisonResult compare(const UnicodeString& source,
00380 const UnicodeString& target,
00381 int32_t length) const;
00382
00396 virtual UCollationResult compare(const UnicodeString& source,
00397 const UnicodeString& target,
00398 int32_t length,
00399 UErrorCode &status) const = 0;
00400
00416 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00417 const UChar* target, int32_t targetLength)
00418 const;
00419
00436 virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00437 const UChar* target, int32_t targetLength,
00438 UErrorCode &status) const = 0;
00439
00455 virtual CollationKey& getCollationKey(const UnicodeString& source,
00456 CollationKey& key,
00457 UErrorCode& status) const = 0;
00458
00475 virtual CollationKey& getCollationKey(const UChar*source,
00476 int32_t sourceLength,
00477 CollationKey& key,
00478 UErrorCode& status) const = 0;
00483 virtual int32_t hashCode(void) const = 0;
00484
00497 virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00498
00508 UBool greater(const UnicodeString& source, const UnicodeString& target)
00509 const;
00510
00520 UBool greaterOrEqual(const UnicodeString& source,
00521 const UnicodeString& target) const;
00522
00532 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00533
00544 virtual ECollationStrength getStrength(void) const = 0;
00545
00564 virtual void setStrength(ECollationStrength newStrength) = 0;
00565
00575 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00576 const Locale& displayLocale,
00577 UnicodeString& name);
00578
00587 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00588 UnicodeString& name);
00589
00601 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00602
00603 #if !UCONFIG_NO_SERVICE
00604
00612 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00613 #endif
00614
00624 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00625
00637 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00638
00666 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00667 UBool& isAvailable, UErrorCode& status);
00668
00669 #if !UCONFIG_NO_SERVICE
00670
00678 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00679
00687 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00688
00699 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00700 #endif
00701
00707 virtual void getVersion(UVersionInfo info) const = 0;
00708
00719 virtual UClassID getDynamicClassID(void) const = 0;
00720
00729 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00730 UErrorCode &status) = 0;
00731
00740 virtual UColAttributeValue getAttribute(UColAttribute attr,
00741 UErrorCode &status) = 0;
00742
00753 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00754
00764 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00765
00773 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00774
00781 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00782
00792 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00793
00794
00800 virtual Collator* safeClone(void) = 0;
00801
00814 virtual int32_t getSortKey(const UnicodeString& source,
00815 uint8_t* result,
00816 int32_t resultLength) const = 0;
00817
00833 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00834 uint8_t*result, int32_t resultLength) const = 0;
00835
00873 static int32_t U_EXPORT2 getBound(const uint8_t *source,
00874 int32_t sourceLength,
00875 UColBoundMode boundType,
00876 uint32_t noOfLevels,
00877 uint8_t *result,
00878 int32_t resultLength,
00879 UErrorCode &status);
00880
00881
00882 protected:
00883
00884
00885
00893 Collator();
00894
00906 Collator(UCollationStrength collationStrength,
00907 UNormalizationMode decompositionMode);
00908
00914 Collator(const Collator& other);
00915
00916
00917
00918
00925 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00926
00927 public:
00928 #if !UCONFIG_NO_SERVICE
00929
00933 static UCollator* createUCollator(const char* loc, UErrorCode* status);
00934 #endif
00935 private:
00940 Collator& operator=(const Collator& other);
00941
00942 friend class CFactory;
00943 friend class SimpleCFactory;
00944 friend class ICUCollatorFactory;
00945 friend class ICUCollatorService;
00946 static Collator* makeInstance(const Locale& desiredLocale,
00947 UErrorCode& status);
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958 };
00959
00960 #if !UCONFIG_NO_SERVICE
00961
00977 class U_I18N_API CollatorFactory : public UObject {
00978 public:
00979
00984 virtual ~CollatorFactory();
00985
00993 virtual UBool visible(void) const;
00994
01002 virtual Collator* createCollator(const Locale& loc) = 0;
01003
01014 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01015 const Locale& displayLocale,
01016 UnicodeString& result);
01017
01027 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01028 };
01029 #endif
01030
01031
01032
01033 U_NAMESPACE_END
01034
01035 #endif
01036
01037 #endif