00001
00002
00003
00004
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
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
00234
00239 virtual ~Collator();
00240
00241
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
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
00960
00968 Collator();
00969
00981 Collator(UCollationStrength collationStrength,
00982 UNormalizationMode decompositionMode);
00983
00989 Collator(const Collator& other);
00990
00991
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
01026
01027
01028
01029
01030
01031
01032
01033
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
01106
01107
01108
01109 U_NAMESPACE_END
01110
01111 #endif
01112
01113 #endif