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
00062 U_NAMESPACE_BEGIN
00063
00064 class StringEnumeration;
00065
00066 #if !UCONFIG_NO_SERVICE
00067
00070 typedef const void* URegistryKey;
00071
00075 class CollatorFactory;
00076 #endif
00077
00081 class CollationKey;
00082
00179 class U_I18N_API Collator : public UObject {
00180 public:
00181
00182
00183
00209 enum ECollationStrength
00210 {
00211 PRIMARY = 0,
00212 SECONDARY = 1,
00213 TERTIARY = 2,
00214 QUATERNARY = 3,
00215 IDENTICAL = 15
00216 };
00217
00228 enum EComparisonResult
00229 {
00230 LESS = -1,
00231 EQUAL = 0,
00232 GREATER = 1
00233 };
00234
00235
00236
00241 virtual ~Collator();
00242
00243
00244
00251 virtual UBool operator==(const Collator& other) const;
00252
00259 virtual UBool operator!=(const Collator& other) const;
00260
00266 virtual Collator* clone(void) const = 0;
00267
00287 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
00288
00312 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00313
00314 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00315
00338 static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00339 #endif
00340
00352 virtual EComparisonResult compare(const UnicodeString& source,
00353 const UnicodeString& target) const;
00354
00367 virtual UCollationResult compare(const UnicodeString& source,
00368 const UnicodeString& target,
00369 UErrorCode &status) const = 0;
00370
00383 virtual EComparisonResult compare(const UnicodeString& source,
00384 const UnicodeString& target,
00385 int32_t length) const;
00386
00400 virtual UCollationResult compare(const UnicodeString& source,
00401 const UnicodeString& target,
00402 int32_t length,
00403 UErrorCode &status) const = 0;
00404
00420 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00421 const UChar* target, int32_t targetLength)
00422 const;
00423
00440 virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00441 const UChar* target, int32_t targetLength,
00442 UErrorCode &status) const = 0;
00443
00459 virtual CollationKey& getCollationKey(const UnicodeString& source,
00460 CollationKey& key,
00461 UErrorCode& status) const = 0;
00462
00479 virtual CollationKey& getCollationKey(const UChar*source,
00480 int32_t sourceLength,
00481 CollationKey& key,
00482 UErrorCode& status) const = 0;
00487 virtual int32_t hashCode(void) const = 0;
00488
00501 virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00502
00512 UBool greater(const UnicodeString& source, const UnicodeString& target)
00513 const;
00514
00524 UBool greaterOrEqual(const UnicodeString& source,
00525 const UnicodeString& target) const;
00526
00536 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00537
00548 virtual ECollationStrength getStrength(void) const = 0;
00549
00568 virtual void setStrength(ECollationStrength newStrength) = 0;
00569
00579 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00580 const Locale& displayLocale,
00581 UnicodeString& name);
00582
00591 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00592 UnicodeString& name);
00593
00605 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00606
00607 #if !UCONFIG_NO_SERVICE
00608
00616 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00617 #endif
00618
00628 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00629
00641 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00642
00670 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00671 UBool& isAvailable, UErrorCode& status);
00672
00673 #if !UCONFIG_NO_SERVICE
00674
00682 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00683
00691 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00692
00703 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00704 #endif
00705
00711 virtual void getVersion(UVersionInfo info) const = 0;
00712
00723 virtual UClassID getDynamicClassID(void) const = 0;
00724
00733 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00734 UErrorCode &status) = 0;
00735
00744 virtual UColAttributeValue getAttribute(UColAttribute attr,
00745 UErrorCode &status) = 0;
00746
00757 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00758
00768 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00769
00777 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00778
00785 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00786
00796 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00797
00798
00804 virtual Collator* safeClone(void) = 0;
00805
00818 virtual int32_t getSortKey(const UnicodeString& source,
00819 uint8_t* result,
00820 int32_t resultLength) const = 0;
00821
00837 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00838 uint8_t*result, int32_t resultLength) const = 0;
00839
00877 static int32_t U_EXPORT2 getBound(const uint8_t *source,
00878 int32_t sourceLength,
00879 UColBoundMode boundType,
00880 uint32_t noOfLevels,
00881 uint8_t *result,
00882 int32_t resultLength,
00883 UErrorCode &status);
00884
00885
00886 protected:
00887
00888
00889
00897 Collator();
00898
00910 Collator(UCollationStrength collationStrength,
00911 UNormalizationMode decompositionMode);
00912
00918 Collator(const Collator& other);
00919
00920
00921
00922
00929 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00930
00931 public:
00932 #if !UCONFIG_NO_SERVICE
00933
00937 static UCollator* createUCollator(const char* loc, UErrorCode* status);
00938 #endif
00939 private:
00944 Collator& operator=(const Collator& other);
00945
00946 friend class CFactory;
00947 friend class SimpleCFactory;
00948 friend class ICUCollatorFactory;
00949 friend class ICUCollatorService;
00950 static Collator* makeInstance(const Locale& desiredLocale,
00951 UErrorCode& status);
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962 };
00963
00964 #if !UCONFIG_NO_SERVICE
00965
00981 class U_I18N_API CollatorFactory : public UObject {
00982 public:
00983
00988 virtual ~CollatorFactory();
00989
00997 virtual UBool visible(void) const;
00998
01006 virtual Collator* createCollator(const Locale& loc) = 0;
01007
01018 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01019 const Locale& displayLocale,
01020 UnicodeString& result);
01021
01031 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01032 };
01033 #endif
01034
01035
01036
01037 U_NAMESPACE_END
01038
01039 #endif
01040
01041 #endif