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 U_SHOW_CPLUSPLUS_API
00058
00059 #if !UCONFIG_NO_COLLATION
00060
00061 #include "unicode/uobject.h"
00062 #include "unicode/ucol.h"
00063 #include "unicode/unorm.h"
00064 #include "unicode/locid.h"
00065 #include "unicode/uniset.h"
00066 #include "unicode/umisc.h"
00067 #include "unicode/uiter.h"
00068 #include "unicode/stringpiece.h"
00069
00070 U_NAMESPACE_BEGIN
00071
00072 class StringEnumeration;
00073
00074 #if !UCONFIG_NO_SERVICE
00075
00078 class CollatorFactory;
00079 #endif
00080
00084 class CollationKey;
00085
00167 class U_I18N_API Collator : public UObject {
00168 public:
00169
00170
00171
00197 enum ECollationStrength
00198 {
00199 PRIMARY = UCOL_PRIMARY,
00200 SECONDARY = UCOL_SECONDARY,
00201 TERTIARY = UCOL_TERTIARY,
00202 QUATERNARY = UCOL_QUATERNARY,
00203 IDENTICAL = UCOL_IDENTICAL
00204 };
00205
00206
00207
00208
00209 #ifndef U_FORCE_HIDE_DEPRECATED_API
00210
00220 enum EComparisonResult
00221 {
00222 LESS = UCOL_LESS,
00223 EQUAL = UCOL_EQUAL,
00224 GREATER = UCOL_GREATER
00225 };
00226 #endif // U_FORCE_HIDE_DEPRECATED_API
00227
00228
00229
00234 virtual ~Collator();
00235
00236
00237
00256 virtual UBool operator==(const Collator& other) const;
00257
00265 virtual UBool operator!=(const Collator& other) const;
00266
00272 virtual Collator* clone() const = 0;
00273
00293 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
00294
00328 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00329
00330 #ifndef U_FORCE_HIDE_DEPRECATED_API
00331
00342 virtual EComparisonResult compare(const UnicodeString& source,
00343 const UnicodeString& target) const;
00344 #endif // U_FORCE_HIDE_DEPRECATED_API
00345
00358 virtual UCollationResult compare(const UnicodeString& source,
00359 const UnicodeString& target,
00360 UErrorCode &status) const = 0;
00361
00362 #ifndef U_FORCE_HIDE_DEPRECATED_API
00363
00375 virtual EComparisonResult compare(const UnicodeString& source,
00376 const UnicodeString& target,
00377 int32_t length) const;
00378 #endif // U_FORCE_HIDE_DEPRECATED_API
00379
00393 virtual UCollationResult compare(const UnicodeString& source,
00394 const UnicodeString& target,
00395 int32_t length,
00396 UErrorCode &status) const = 0;
00397
00398 #ifndef U_FORCE_HIDE_DEPRECATED_API
00399
00432 virtual EComparisonResult compare(const char16_t* source, int32_t sourceLength,
00433 const char16_t* target, int32_t targetLength)
00434 const;
00435 #endif // U_FORCE_HIDE_DEPRECATED_API
00436
00453 virtual UCollationResult compare(const char16_t* source, int32_t sourceLength,
00454 const char16_t* target, int32_t targetLength,
00455 UErrorCode &status) const = 0;
00456
00468 virtual UCollationResult compare(UCharIterator &sIter,
00469 UCharIterator &tIter,
00470 UErrorCode &status) const;
00471
00485 virtual UCollationResult compareUTF8(const StringPiece &source,
00486 const StringPiece &target,
00487 UErrorCode &status) const;
00488
00507 virtual CollationKey& getCollationKey(const UnicodeString& source,
00508 CollationKey& key,
00509 UErrorCode& status) const = 0;
00510
00530 virtual CollationKey& getCollationKey(const char16_t*source,
00531 int32_t sourceLength,
00532 CollationKey& key,
00533 UErrorCode& status) const = 0;
00538 virtual int32_t hashCode(void) const = 0;
00539
00540 #ifndef U_FORCE_HIDE_DEPRECATED_API
00541
00553 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00554 #endif // U_FORCE_HIDE_DEPRECATED_API
00555
00565 UBool greater(const UnicodeString& source, const UnicodeString& target)
00566 const;
00567
00577 UBool greaterOrEqual(const UnicodeString& source,
00578 const UnicodeString& target) const;
00579
00589 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00590
00591 #ifndef U_FORCE_HIDE_DEPRECATED_API
00592
00602 virtual ECollationStrength getStrength(void) const;
00603
00622 virtual void setStrength(ECollationStrength newStrength);
00623 #endif // U_FORCE_HIDE_DEPRECATED_API
00624
00640 virtual int32_t getReorderCodes(int32_t *dest,
00641 int32_t destCapacity,
00642 UErrorCode& status) const;
00643
00659 virtual void setReorderCodes(const int32_t* reorderCodes,
00660 int32_t reorderCodesLength,
00661 UErrorCode& status) ;
00662
00683 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00684 int32_t* dest,
00685 int32_t destCapacity,
00686 UErrorCode& status);
00687
00697 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00698 const Locale& displayLocale,
00699 UnicodeString& name);
00700
00709 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00710 UnicodeString& name);
00711
00723 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00724
00733 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00734
00744 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00745
00757 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00758
00775 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00776 UBool commonlyUsed, UErrorCode& status);
00777
00805 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00806 UBool& isAvailable, UErrorCode& status);
00807
00808 #if !UCONFIG_NO_SERVICE
00809
00820 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00821
00832 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00833
00847 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00848 #endif
00849
00855 virtual void getVersion(UVersionInfo info) const = 0;
00856
00867 virtual UClassID getDynamicClassID(void) const = 0;
00868
00877 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00878 UErrorCode &status) = 0;
00879
00888 virtual UColAttributeValue getAttribute(UColAttribute attr,
00889 UErrorCode &status) const = 0;
00890
00909 virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode);
00910
00919 virtual UColReorderCode getMaxVariable() const;
00920
00921 #ifndef U_FORCE_HIDE_DEPRECATED_API
00922
00938 virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) = 0;
00939
00955 virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0;
00956
00968 virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0;
00969 #endif // U_FORCE_HIDE_DEPRECATED_API
00970
00978 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00979
00989 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00990
00991 #ifndef U_FORCE_HIDE_DEPRECATED_API
00992
00999 virtual Collator* safeClone() const;
01000 #endif // U_FORCE_HIDE_DEPRECATED_API
01001
01018 virtual int32_t getSortKey(const UnicodeString& source,
01019 uint8_t* result,
01020 int32_t resultLength) const = 0;
01021
01041 virtual int32_t getSortKey(const char16_t*source, int32_t sourceLength,
01042 uint8_t*result, int32_t resultLength) const = 0;
01043
01081 static int32_t U_EXPORT2 getBound(const uint8_t *source,
01082 int32_t sourceLength,
01083 UColBoundMode boundType,
01084 uint32_t noOfLevels,
01085 uint8_t *result,
01086 int32_t resultLength,
01087 UErrorCode &status);
01088
01089
01090 protected:
01091
01092
01093
01101 Collator();
01102
01103 #ifndef U_HIDE_DEPRECATED_API
01104
01115 Collator(UCollationStrength collationStrength,
01116 UNormalizationMode decompositionMode);
01117 #endif
01118
01124 Collator(const Collator& other);
01125
01126 public:
01134 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01135
01159 virtual int32_t internalGetShortDefinitionString(const char *locale,
01160 char *buffer,
01161 int32_t capacity,
01162 UErrorCode &status) const;
01163
01168 virtual UCollationResult internalCompareUTF8(
01169 const char *left, int32_t leftLength,
01170 const char *right, int32_t rightLength,
01171 UErrorCode &errorCode) const;
01172
01177 virtual int32_t
01178 internalNextSortKeyPart(
01179 UCharIterator *iter, uint32_t state[2],
01180 uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
01181
01182 #ifndef U_HIDE_INTERNAL_API
01183
01184 static inline Collator *fromUCollator(UCollator *uc) {
01185 return reinterpret_cast<Collator *>(uc);
01186 }
01188 static inline const Collator *fromUCollator(const UCollator *uc) {
01189 return reinterpret_cast<const Collator *>(uc);
01190 }
01192 inline UCollator *toUCollator() {
01193 return reinterpret_cast<UCollator *>(this);
01194 }
01196 inline const UCollator *toUCollator() const {
01197 return reinterpret_cast<const UCollator *>(this);
01198 }
01199 #endif // U_HIDE_INTERNAL_API
01200
01201 private:
01205 Collator& operator=(const Collator& other);
01206
01207 friend class CFactory;
01208 friend class SimpleCFactory;
01209 friend class ICUCollatorFactory;
01210 friend class ICUCollatorService;
01211 static Collator* makeInstance(const Locale& desiredLocale,
01212 UErrorCode& status);
01213 };
01214
01215 #if !UCONFIG_NO_SERVICE
01216
01232 class U_I18N_API CollatorFactory : public UObject {
01233 public:
01234
01239 virtual ~CollatorFactory();
01240
01248 virtual UBool visible(void) const;
01249
01257 virtual Collator* createCollator(const Locale& loc) = 0;
01258
01269 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
01270 const Locale& displayLocale,
01271 UnicodeString& result);
01272
01282 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01283 };
01284 #endif
01285
01286
01287
01288 U_NAMESPACE_END
01289
01290 #endif
01291
01292 #endif
01293
01294 #endif