00001
00002
00003
00004
00005
00006
00007
00050 #ifndef COLL_H
00051 #define COLL_H
00052
00053 #include "unicode/utypes.h"
00054
00055 #if !UCONFIG_NO_COLLATION
00056
00057 #include "unicode/uobject.h"
00058 #include "unicode/ucol.h"
00059 #include "unicode/normlzr.h"
00060 #include "unicode/locid.h"
00061 #include "unicode/uniset.h"
00062 #include "unicode/umisc.h"
00063 #include "unicode/uiter.h"
00064 #include "unicode/stringpiece.h"
00065
00066 U_NAMESPACE_BEGIN
00067
00068 class StringEnumeration;
00069
00070 #if !UCONFIG_NO_SERVICE
00071
00074 class CollatorFactory;
00075 #endif
00076
00080 class CollationKey;
00081
00163 class U_I18N_API Collator : public UObject {
00164 public:
00165
00166
00167
00193 enum ECollationStrength
00194 {
00195 PRIMARY = UCOL_PRIMARY,
00196 SECONDARY = UCOL_SECONDARY,
00197 TERTIARY = UCOL_TERTIARY,
00198 QUATERNARY = UCOL_QUATERNARY,
00199 IDENTICAL = UCOL_IDENTICAL
00200 };
00201
00202
00203
00204
00215 enum EComparisonResult
00216 {
00217 LESS = UCOL_LESS,
00218 EQUAL = UCOL_EQUAL,
00219 GREATER = UCOL_GREATER
00220 };
00221
00222
00223
00228 virtual ~Collator();
00229
00230
00231
00250 virtual UBool operator==(const Collator& other) const;
00251
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
00322 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00323
00335 virtual EComparisonResult compare(const UnicodeString& source,
00336 const UnicodeString& target) const;
00337
00350 virtual UCollationResult compare(const UnicodeString& source,
00351 const UnicodeString& target,
00352 UErrorCode &status) const = 0;
00353
00366 virtual EComparisonResult compare(const UnicodeString& source,
00367 const UnicodeString& target,
00368 int32_t length) const;
00369
00383 virtual UCollationResult compare(const UnicodeString& source,
00384 const UnicodeString& target,
00385 int32_t length,
00386 UErrorCode &status) const = 0;
00387
00421 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00422 const UChar* target, int32_t targetLength)
00423 const;
00424
00441 virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00442 const UChar* target, int32_t targetLength,
00443 UErrorCode &status) const = 0;
00444
00456 virtual UCollationResult compare(UCharIterator &sIter,
00457 UCharIterator &tIter,
00458 UErrorCode &status) const;
00459
00473 virtual UCollationResult compareUTF8(const StringPiece &source,
00474 const StringPiece &target,
00475 UErrorCode &status) const;
00476
00495 virtual CollationKey& getCollationKey(const UnicodeString& source,
00496 CollationKey& key,
00497 UErrorCode& status) const = 0;
00498
00518 virtual CollationKey& getCollationKey(const UChar*source,
00519 int32_t sourceLength,
00520 CollationKey& key,
00521 UErrorCode& status) const = 0;
00526 virtual int32_t hashCode(void) const = 0;
00527
00540 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00541
00551 UBool greater(const UnicodeString& source, const UnicodeString& target)
00552 const;
00553
00563 UBool greaterOrEqual(const UnicodeString& source,
00564 const UnicodeString& target) const;
00565
00575 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00576
00587 virtual ECollationStrength getStrength(void) const;
00588
00607 virtual void setStrength(ECollationStrength newStrength);
00608
00624 virtual int32_t getReorderCodes(int32_t *dest,
00625 int32_t destCapacity,
00626 UErrorCode& status) const;
00627
00643 virtual void setReorderCodes(const int32_t* reorderCodes,
00644 int32_t reorderCodesLength,
00645 UErrorCode& status) ;
00646
00667 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00668 int32_t* dest,
00669 int32_t destCapacity,
00670 UErrorCode& status);
00671
00681 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00682 const Locale& displayLocale,
00683 UnicodeString& name);
00684
00693 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00694 UnicodeString& name);
00695
00707 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00708
00717 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00718
00728 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00729
00741 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00742
00759 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00760 UBool commonlyUsed, UErrorCode& status);
00761
00789 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00790 UBool& isAvailable, UErrorCode& status);
00791
00792 #if !UCONFIG_NO_SERVICE
00793
00804 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00805
00816 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00817
00831 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00832 #endif
00833
00839 virtual void getVersion(UVersionInfo info) const = 0;
00840
00851 virtual UClassID getDynamicClassID(void) const = 0;
00852
00861 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00862 UErrorCode &status) = 0;
00863
00872 virtual UColAttributeValue getAttribute(UColAttribute attr,
00873 UErrorCode &status) const = 0;
00874
00893 virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode);
00894
00903 virtual UColReorderCode getMaxVariable() const;
00904
00921 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00922
00938 virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0;
00939
00951 virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0;
00952
00960 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00961
00971 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00972
00980 virtual Collator* safeClone(void) const;
00981
00998 virtual int32_t getSortKey(const UnicodeString& source,
00999 uint8_t* result,
01000 int32_t resultLength) const = 0;
01001
01021 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
01022 uint8_t*result, int32_t resultLength) const = 0;
01023
01061 static int32_t U_EXPORT2 getBound(const uint8_t *source,
01062 int32_t sourceLength,
01063 UColBoundMode boundType,
01064 uint32_t noOfLevels,
01065 uint8_t *result,
01066 int32_t resultLength,
01067 UErrorCode &status);
01068
01069
01070 protected:
01071
01072
01073
01081 Collator();
01082
01083 #ifndef U_HIDE_DEPRECATED_API
01084
01095 Collator(UCollationStrength collationStrength,
01096 UNormalizationMode decompositionMode);
01097 #endif
01098
01104 Collator(const Collator& other);
01105
01106 public:
01114 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01115
01139 virtual int32_t internalGetShortDefinitionString(const char *locale,
01140 char *buffer,
01141 int32_t capacity,
01142 UErrorCode &status) const;
01143
01148 virtual UCollationResult internalCompareUTF8(
01149 const char *left, int32_t leftLength,
01150 const char *right, int32_t rightLength,
01151 UErrorCode &errorCode) const;
01152
01157 virtual int32_t
01158 internalNextSortKeyPart(
01159 UCharIterator *iter, uint32_t state[2],
01160 uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
01161
01162 #ifndef U_HIDE_INTERNAL_API
01163
01164 static inline Collator *fromUCollator(UCollator *uc) {
01165 return reinterpret_cast<Collator *>(uc);
01166 }
01168 static inline const Collator *fromUCollator(const UCollator *uc) {
01169 return reinterpret_cast<const Collator *>(uc);
01170 }
01172 inline UCollator *toUCollator() {
01173 return reinterpret_cast<UCollator *>(this);
01174 }
01176 inline const UCollator *toUCollator() const {
01177 return reinterpret_cast<const UCollator *>(this);
01178 }
01179 #endif // U_HIDE_INTERNAL_API
01180
01181 private:
01185 Collator& operator=(const Collator& other);
01186
01187 friend class CFactory;
01188 friend class SimpleCFactory;
01189 friend class ICUCollatorFactory;
01190 friend class ICUCollatorService;
01191 static Collator* makeInstance(const Locale& desiredLocale,
01192 UErrorCode& status);
01193 };
01194
01195 #if !UCONFIG_NO_SERVICE
01196
01212 class U_I18N_API CollatorFactory : public UObject {
01213 public:
01214
01219 virtual ~CollatorFactory();
01220
01228 virtual UBool visible(void) const;
01229
01237 virtual Collator* createCollator(const Locale& loc) = 0;
01238
01249 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01250 const Locale& displayLocale,
01251 UnicodeString& result);
01252
01262 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01263 };
01264 #endif
01265
01266
01267
01268 U_NAMESPACE_END
01269
01270 #endif
01271
01272 #endif