00001
00002
00003
00004
00005
00006
00007
00044 #ifndef COLL_H
00045 #define COLL_H
00046
00047 #include "unicode/utypes.h"
00048
00049 #if !UCONFIG_NO_COLLATION
00050
00051 #include "unicode/uobject.h"
00052 #include "unicode/ucol.h"
00053 #include "unicode/normlzr.h"
00054 #include "unicode/locid.h"
00055 #include "unicode/uniset.h"
00056
00057 U_NAMESPACE_BEGIN
00058
00059 class StringEnumeration;
00060
00061 #if !UCONFIG_NO_SERVICE
00062
00065 typedef const void* URegistryKey;
00066
00070 class CollatorFactory;
00071 #endif
00072
00076 class CollationKey;
00077
00174 class U_I18N_API Collator : public UObject {
00175 public:
00176
00177
00178
00204 enum ECollationStrength
00205 {
00206 PRIMARY = 0,
00207 SECONDARY = 1,
00208 TERTIARY = 2,
00209 QUATERNARY = 3,
00210 IDENTICAL = 15
00211 };
00212
00223 enum EComparisonResult
00224 {
00225 LESS = -1,
00226 EQUAL = 0,
00227 GREATER = 1
00228 };
00229
00230
00231
00236 virtual ~Collator();
00237
00238
00239
00246 virtual UBool operator==(const Collator& other) const;
00247
00254 virtual UBool operator!=(const Collator& other) const;
00255
00261 virtual Collator* clone(void) const = 0;
00262
00282 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
00283
00307 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00308
00309 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00310
00333 static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00334 #endif
00335
00347 virtual EComparisonResult compare(const UnicodeString& source,
00348 const UnicodeString& target) const;
00349
00362 virtual UCollationResult compare(const UnicodeString& source,
00363 const UnicodeString& target,
00364 UErrorCode &status) const = 0;
00365
00378 virtual EComparisonResult compare(const UnicodeString& source,
00379 const UnicodeString& target,
00380 int32_t length) const;
00381
00395 virtual UCollationResult compare(const UnicodeString& source,
00396 const UnicodeString& target,
00397 int32_t length,
00398 UErrorCode &status) const = 0;
00399
00415 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00416 const UChar* target, int32_t targetLength)
00417 const;
00418
00435 virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00436 const UChar* target, int32_t targetLength,
00437 UErrorCode &status) const = 0;
00438
00454 virtual CollationKey& getCollationKey(const UnicodeString& source,
00455 CollationKey& key,
00456 UErrorCode& status) const = 0;
00457
00474 virtual CollationKey& getCollationKey(const UChar*source,
00475 int32_t sourceLength,
00476 CollationKey& key,
00477 UErrorCode& status) const = 0;
00482 virtual int32_t hashCode(void) const = 0;
00483
00496 virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00497
00507 UBool greater(const UnicodeString& source, const UnicodeString& target)
00508 const;
00509
00519 UBool greaterOrEqual(const UnicodeString& source,
00520 const UnicodeString& target) const;
00521
00531 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00532
00543 virtual ECollationStrength getStrength(void) const = 0;
00544
00563 virtual void setStrength(ECollationStrength newStrength) = 0;
00564
00574 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00575 const Locale& displayLocale,
00576 UnicodeString& name);
00577
00586 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00587 UnicodeString& name);
00588
00600 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00601
00602 #if !UCONFIG_NO_SERVICE
00603
00611 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00612 #endif
00613
00623 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00624
00636 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00637
00665 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00666 UBool& isAvailable, UErrorCode& status);
00667
00668 #if !UCONFIG_NO_SERVICE
00669
00677 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00678
00686 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00687
00698 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00699 #endif
00700
00706 virtual void getVersion(UVersionInfo info) const = 0;
00707
00718 virtual UClassID getDynamicClassID(void) const = 0;
00719
00728 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00729 UErrorCode &status) = 0;
00730
00739 virtual UColAttributeValue getAttribute(UColAttribute attr,
00740 UErrorCode &status) = 0;
00741
00752 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00753
00763 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00764
00772 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00773
00780 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00781
00791 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00792
00793
00799 virtual Collator* safeClone(void) = 0;
00800
00813 virtual int32_t getSortKey(const UnicodeString& source,
00814 uint8_t* result,
00815 int32_t resultLength) const = 0;
00816
00832 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00833 uint8_t*result, int32_t resultLength) const = 0;
00834
00872 static int32_t U_EXPORT2 getBound(const uint8_t *source,
00873 int32_t sourceLength,
00874 UColBoundMode boundType,
00875 uint32_t noOfLevels,
00876 uint8_t *result,
00877 int32_t resultLength,
00878 UErrorCode &status);
00879
00880
00881 protected:
00882
00883
00884
00892 Collator();
00893
00905 Collator(UCollationStrength collationStrength,
00906 UNormalizationMode decompositionMode);
00907
00913 Collator(const Collator& other);
00914
00915
00916
00917
00924 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00925
00926 public:
00927 #if !UCONFIG_NO_SERVICE
00928
00932 static UCollator* createUCollator(const char* loc, UErrorCode* status);
00933 #endif
00934 private:
00939 Collator& operator=(const Collator& other);
00940
00941 friend class CFactory;
00942 friend class SimpleCFactory;
00943 friend class ICUCollatorFactory;
00944 friend class ICUCollatorService;
00945 static Collator* makeInstance(const Locale& desiredLocale,
00946 UErrorCode& status);
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957 };
00958
00959 #if !UCONFIG_NO_SERVICE
00960
00976 class U_I18N_API CollatorFactory : public UObject {
00977 public:
00978
00983 virtual ~CollatorFactory();
00984
00992 virtual UBool visible(void) const;
00993
01001 virtual Collator* createCollator(const Locale& loc) = 0;
01002
01013 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01014 const Locale& displayLocale,
01015 UnicodeString& result);
01016
01026 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01027 };
01028 #endif
01029
01030
01031
01032 U_NAMESPACE_END
01033
01034 #endif
01035
01036 #endif