00001
00002
00003
00004
00005
00006
00007
00044 #ifndef COLL_H
00045 #define COLL_H
00046
00047 #include "unicode/ucol.h"
00048 #include "unicode/normlzr.h"
00049 #include "unicode/locid.h"
00050
00051 class CollationKey;
00052
00153 class U_I18N_API Collator
00154 {
00155 public:
00156
00157
00158
00183 enum ECollationStrength
00184 {
00185 PRIMARY = 0,
00186 SECONDARY = 1,
00187 TERTIARY = 2,
00188 QUATERNARY = 3,
00189 IDENTICAL = 15
00190 };
00191
00201 enum EComparisonResult
00202 {
00203 LESS = -1,
00204 EQUAL = 0,
00205 GREATER = 1
00206 };
00207
00208
00209
00213 virtual ~Collator();
00214
00215
00216
00222 virtual UBool operator==(const Collator& other) const;
00223
00229 virtual UBool operator!=(const Collator& other) const;
00230
00235 virtual Collator* clone(void) const = 0;
00236
00253 static Collator* createInstance(UErrorCode& err);
00254
00277 static Collator* createInstance(const Locale& loc, UErrorCode& err);
00278
00299 static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00300
00329 virtual EComparisonResult compare(const UnicodeString& source,
00330 const UnicodeString& target) const = 0;
00331
00363 virtual EComparisonResult compare(const UnicodeString& source,
00364 const UnicodeString& target,
00365 int32_t length) const = 0;
00366
00398 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00399 const UChar* target, int32_t targetLength)
00400 const = 0;
00401
00455 virtual CollationKey& getCollationKey(const UnicodeString& source,
00456 CollationKey& key,
00457 UErrorCode& status) const = 0;
00458
00473 virtual CollationKey& getCollationKey(const UChar*source,
00474 int32_t sourceLength,
00475 CollationKey& key,
00476 UErrorCode& status) const = 0;
00480 virtual int32_t hashCode(void) const = 0;
00481
00490 UBool greater(const UnicodeString& source, const UnicodeString& target)
00491 const;
00492
00501 UBool greaterOrEqual(const UnicodeString& source,
00502 const UnicodeString& target) const;
00511 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00512
00518 virtual Normalizer::EMode getDecomposition(void) const = 0;
00519
00526 virtual void setDecomposition(Normalizer::EMode mode) = 0;
00527
00537 virtual ECollationStrength getStrength(void) const = 0;
00538
00559 virtual void setStrength(ECollationStrength newStrength) = 0;
00560
00569 static UnicodeString& getDisplayName(const Locale& objectLocale,
00570 const Locale& displayLocale,
00571 UnicodeString& name);
00579 static UnicodeString& getDisplayName(const Locale& objectLocale,
00580 UnicodeString& name);
00581
00587 static const Locale* getAvailableLocales(int32_t& count);
00588
00593 void getVersion(UVersionInfo info) const;
00594
00611 virtual UClassID getDynamicClassID(void) const = 0;
00612
00620 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00621 UErrorCode &status) = 0;
00622
00630 virtual UColAttributeValue getAttribute(UColAttribute attr,
00631 UErrorCode &status) = 0;
00632
00637 virtual Collator* safeClone(void) = 0;
00638
00639
00651 virtual EComparisonResult compare(ForwardCharacterIterator &source,
00652 ForwardCharacterIterator &target) = 0;
00653
00665 virtual int32_t getSortKey(const UnicodeString& source, uint8_t* result,
00666 int32_t resultLength) const = 0;
00667
00682 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00683 uint8_t*result, int32_t resultLength) const = 0;
00684
00685 protected:
00686
00687
00688
00695 Collator();
00696
00706 Collator(UCollationStrength collationStrength,
00707 UNormalizationMode decompositionMode);
00708
00713 Collator(const Collator& other);
00714
00715
00716
00717 private:
00718
00719
00720
00721
00722
00723
00724
00725
00726 static const UVersionInfo fVersion;
00727 };
00728
00729
00730
00731 inline UBool Collator::operator==(const Collator& other) const
00732 {
00733 return (UBool)(this == &other);
00734 }
00735
00736 inline UBool Collator::operator!=(const Collator& other) const
00737 {
00738 return (UBool)!(*this == other);
00739 }
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753 #endif