00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef COLL_H
00045 #define COLL_H
00046
00047
00048 #include "unicode/ucol.h"
00049 #include "unicode/locid.h"
00050 #include "unicode/utypes.h"
00051 #include "unicode/unistr.h"
00052 #include "unicode/normlzr.h"
00053 #include "unicode/chariter.h"
00054
00055 class CollationKey;
00056
00158 class U_I18N_API Collator {
00159 public:
00184 enum ECollationStrength {
00185 PRIMARY = 0,
00186 SECONDARY = 1,
00187 TERTIARY = 2,
00188 IDENTICAL = 3
00189 };
00190
00200 enum EComparisonResult {
00201 LESS = -1,
00202 EQUAL = 0,
00203 GREATER = 1
00204 };
00205
00210 virtual ~Collator();
00211
00216 virtual UBool operator==(const Collator& other) const;
00217
00222 virtual UBool operator!=(const Collator& other) const;
00223
00228 virtual Collator* clone(void) const = 0;
00246 static Collator* createInstance( UErrorCode& err);
00247
00271 static Collator* createInstance( const Locale& loc,
00272 UErrorCode& err);
00273
00274
00300 virtual EComparisonResult compare( const UnicodeString& source,
00301 const UnicodeString& target) const = 0;
00302
00328 virtual EComparisonResult compare( const UnicodeString& source,
00329 const UnicodeString& target,
00330 int32_t length) const = 0;
00331
00332
00362 virtual EComparisonResult compare( const UChar* source,
00363 int32_t sourceLength,
00364 const UChar* target,
00365 int32_t targetLength) const = 0;
00366
00404 virtual CollationKey& getCollationKey(const UnicodeString& source,
00405 CollationKey& key,
00406 UErrorCode& status) const = 0;
00407
00422 virtual CollationKey& getCollationKey(const UChar *source,
00423 int32_t sourceLength,
00424 CollationKey& key,
00425 UErrorCode& status) const = 0;
00430 virtual int32_t hashCode(void) const = 0;
00431
00442 UBool greater( const UnicodeString& source,
00443 const UnicodeString& target) const;
00454 UBool greaterOrEqual( const UnicodeString& source,
00455 const UnicodeString& target) const;
00466 UBool equals( const UnicodeString& source,
00467 const UnicodeString& target) const;
00468
00469
00476 Normalizer::EMode getDecomposition(void) const;
00484 void setDecomposition(Normalizer::EMode mode);
00495 ECollationStrength getStrength(void) const;
00512 void setStrength( ECollationStrength newStrength);
00522 static UnicodeString& getDisplayName( const Locale& objectLocale,
00523 const Locale& displayLocale,
00524 UnicodeString& name) ;
00534 static UnicodeString& getDisplayName( const Locale& objectLocale,
00535 UnicodeString& name) ;
00536
00543 static const Locale* getAvailableLocales(int32_t& count);
00544
00550 void getVersion(UVersionInfo info) const;
00551
00569 virtual UClassID getDynamicClassID(void) const = 0;
00570
00571
00572
00580 virtual void setAttribute(UColAttribute attr, UColAttributeValue value, UErrorCode &status) = 0;
00581
00589 virtual UColAttributeValue getAttribute(UColAttribute attr, UErrorCode &status) = 0;
00590
00596 virtual Collator* safeClone(void) = 0;
00597
00598
00610 virtual EComparisonResult compare(ForwardCharacterIterator &source,
00611 ForwardCharacterIterator &target) = 0;
00612
00622 virtual int32_t getSortKey(const UnicodeString& source,
00623 uint8_t *result,
00624 int32_t resultLength) const = 0;
00625
00637 virtual int32_t getSortKey(const UChar *source,
00638 int32_t sourceLength,
00639 uint8_t *result,
00640 int32_t resultLength) const = 0;
00641
00642 protected:
00646 Collator();
00647 Collator(ECollationStrength collationStrength,
00648 Normalizer::EMode decompositionMode);
00649 Collator(const Collator& other);
00650
00654 const Collator& operator=(const Collator& other);
00655
00656
00657 private:
00658
00659 ECollationStrength strength;
00660 Normalizer::EMode decmp;
00661 static const UVersionInfo fVersion;
00662 };
00663
00664 inline UBool
00665 Collator::operator==(const Collator& other) const
00666 {
00667 UBool result;
00668 if (this == &other) result = TRUE;
00669 else result = ((strength == other.strength) && (decmp == other.decmp));
00670 return result;
00671 }
00672
00673 inline UBool
00674 Collator::operator!=(const Collator& other) const
00675 {
00676 UBool result;
00677 result = !(*this == other);
00678 return result;
00679 }
00680
00681 inline Collator::ECollationStrength
00682 Collator::getStrength() const
00683 {
00684 return strength;
00685 }
00686
00687 inline Normalizer::EMode
00688 Collator::getDecomposition() const
00689 {
00690 return decmp;
00691 }
00692
00693
00694 #endif