00001
00002
00003
00004
00005
00006
00007
00008
00009
00052 #ifndef COLL_H
00053 #define COLL_H
00054
00055 #include "unicode/utypes.h"
00056
00057 #if !UCONFIG_NO_COLLATION
00058
00059 #include "unicode/uobject.h"
00060 #include "unicode/ucol.h"
00061 #include "unicode/unorm.h"
00062 #include "unicode/locid.h"
00063 #include "unicode/uniset.h"
00064 #include "unicode/umisc.h"
00065 #include "unicode/uiter.h"
00066 #include "unicode/stringpiece.h"
00067
00068 U_NAMESPACE_BEGIN
00069
00070 class StringEnumeration;
00071
00072 #if !UCONFIG_NO_SERVICE
00073
00076 class CollatorFactory;
00077 #endif
00078
00082 class CollationKey;
00083
00165 class U_I18N_API Collator : public UObject {
00166 public:
00167
00168
00169
00195 enum ECollationStrength
00196 {
00197 PRIMARY = UCOL_PRIMARY,
00198 SECONDARY = UCOL_SECONDARY,
00199 TERTIARY = UCOL_TERTIARY,
00200 QUATERNARY = UCOL_QUATERNARY,
00201 IDENTICAL = UCOL_IDENTICAL
00202 };
00203
00204
00205
00206
00217 enum EComparisonResult
00218 {
00219 LESS = UCOL_LESS,
00220 EQUAL = UCOL_EQUAL,
00221 GREATER = UCOL_GREATER
00222 };
00223
00224
00225
00230 virtual ~Collator();
00231
00232
00233
00252 virtual UBool operator==(const Collator& other) const;
00253
00261 virtual UBool operator!=(const Collator& other) const;
00262
00268 virtual Collator* clone(void) const = 0;
00269
00289 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
00290
00324 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00325
00337 virtual EComparisonResult compare(const UnicodeString& source,
00338 const UnicodeString& target) const;
00339
00352 virtual UCollationResult compare(const UnicodeString& source,
00353 const UnicodeString& target,
00354 UErrorCode &status) const = 0;
00355
00368 virtual EComparisonResult compare(const UnicodeString& source,
00369 const UnicodeString& target,
00370 int32_t length) const;
00371
00385 virtual UCollationResult compare(const UnicodeString& source,
00386 const UnicodeString& target,
00387 int32_t length,
00388 UErrorCode &status) const = 0;
00389
00423 virtual EComparisonResult compare(const char16_t* source, int32_t sourceLength,
00424 const char16_t* target, int32_t targetLength)
00425 const;
00426
00443 virtual UCollationResult compare(const char16_t* source, int32_t sourceLength,
00444 const char16_t* target, int32_t targetLength,
00445 UErrorCode &status) const = 0;
00446
00458 virtual UCollationResult compare(UCharIterator &sIter,
00459 UCharIterator &tIter,
00460 UErrorCode &status) const;
00461
00475 virtual UCollationResult compareUTF8(const StringPiece &source,
00476 const StringPiece &target,
00477 UErrorCode &status) const;
00478
00497 virtual CollationKey& getCollationKey(const UnicodeString& source,
00498 CollationKey& key,
00499 UErrorCode& status) const = 0;
00500
00520 virtual CollationKey& getCollationKey(const char16_t*source,
00521 int32_t sourceLength,
00522 CollationKey& key,
00523 UErrorCode& status) const = 0;
00528 virtual int32_t hashCode(void) const = 0;
00529
00542 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00543
00553 UBool greater(const UnicodeString& source, const UnicodeString& target)
00554 const;
00555
00565 UBool greaterOrEqual(const UnicodeString& source,
00566 const UnicodeString& target) const;
00567
00577 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00578
00589 virtual ECollationStrength getStrength(void) const;
00590
00609 virtual void setStrength(ECollationStrength newStrength);
00610
00626 virtual int32_t getReorderCodes(int32_t *dest,
00627 int32_t destCapacity,
00628 UErrorCode& status) const;
00629
00645 virtual void setReorderCodes(const int32_t* reorderCodes,
00646 int32_t reorderCodesLength,
00647 UErrorCode& status) ;
00648
00669 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00670 int32_t* dest,
00671 int32_t destCapacity,
00672 UErrorCode& status);
00673
00683 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00684 const Locale& displayLocale,
00685 UnicodeString& name);
00686
00695 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00696 UnicodeString& name);
00697
00709 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00710
00719 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00720
00730 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00731
00743 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00744
00761 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00762 UBool commonlyUsed, UErrorCode& status);
00763
00791 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00792 UBool& isAvailable, UErrorCode& status);
00793
00794 #if !UCONFIG_NO_SERVICE
00795
00806 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00807
00818 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00819
00833 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00834 #endif
00835
00841 virtual void getVersion(UVersionInfo info) const = 0;
00842
00853 virtual UClassID getDynamicClassID(void) const = 0;
00854
00863 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00864 UErrorCode &status) = 0;
00865
00874 virtual UColAttributeValue getAttribute(UColAttribute attr,
00875 UErrorCode &status) const = 0;
00876
00895 virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode);
00896
00905 virtual UColReorderCode getMaxVariable() const;
00906
00923 virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) = 0;
00924
00940 virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0;
00941
00953 virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0;
00954
00962 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00963
00973 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00974
00982 virtual Collator* safeClone(void) const;
00983
01000 virtual int32_t getSortKey(const UnicodeString& source,
01001 uint8_t* result,
01002 int32_t resultLength) const = 0;
01003
01023 virtual int32_t getSortKey(const char16_t*source, int32_t sourceLength,
01024 uint8_t*result, int32_t resultLength) const = 0;
01025
01063 static int32_t U_EXPORT2 getBound(const uint8_t *source,
01064 int32_t sourceLength,
01065 UColBoundMode boundType,
01066 uint32_t noOfLevels,
01067 uint8_t *result,
01068 int32_t resultLength,
01069 UErrorCode &status);
01070
01071
01072 protected:
01073
01074
01075
01083 Collator();
01084
01085 #ifndef U_HIDE_DEPRECATED_API
01086
01097 Collator(UCollationStrength collationStrength,
01098 UNormalizationMode decompositionMode);
01099 #endif
01100
01106 Collator(const Collator& other);
01107
01108 public:
01116 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01117
01141 virtual int32_t internalGetShortDefinitionString(const char *locale,
01142 char *buffer,
01143 int32_t capacity,
01144 UErrorCode &status) const;
01145
01150 virtual UCollationResult internalCompareUTF8(
01151 const char *left, int32_t leftLength,
01152 const char *right, int32_t rightLength,
01153 UErrorCode &errorCode) const;
01154
01159 virtual int32_t
01160 internalNextSortKeyPart(
01161 UCharIterator *iter, uint32_t state[2],
01162 uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
01163
01164 #ifndef U_HIDE_INTERNAL_API
01165
01166 static inline Collator *fromUCollator(UCollator *uc) {
01167 return reinterpret_cast<Collator *>(uc);
01168 }
01170 static inline const Collator *fromUCollator(const UCollator *uc) {
01171 return reinterpret_cast<const Collator *>(uc);
01172 }
01174 inline UCollator *toUCollator() {
01175 return reinterpret_cast<UCollator *>(this);
01176 }
01178 inline const UCollator *toUCollator() const {
01179 return reinterpret_cast<const UCollator *>(this);
01180 }
01181 #endif // U_HIDE_INTERNAL_API
01182
01183 private:
01187 Collator& operator=(const Collator& other);
01188
01189 friend class CFactory;
01190 friend class SimpleCFactory;
01191 friend class ICUCollatorFactory;
01192 friend class ICUCollatorService;
01193 static Collator* makeInstance(const Locale& desiredLocale,
01194 UErrorCode& status);
01195 };
01196
01197 #if !UCONFIG_NO_SERVICE
01198
01214 class U_I18N_API CollatorFactory : public UObject {
01215 public:
01216
01221 virtual ~CollatorFactory();
01222
01230 virtual UBool visible(void) const;
01231
01239 virtual Collator* createCollator(const Locale& loc) = 0;
01240
01251 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01252 const Locale& displayLocale,
01253 UnicodeString& result);
01254
01264 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01265 };
01266 #endif
01267
01268
01269
01270 U_NAMESPACE_END
01271
01272 #endif
01273
01274 #endif