/* ******************************************************************************* * Copyright (C) 1996-1999, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ //============================================================================= // // File coll.h // // // // Created by: Helena Shih // // Modification History: // // Date Name Description // 02/5/97 aliu Modified createDefault to load collation data from // binary files when possible. Added related methods // createCollationFromFile, chopLocale, createPathName. // 02/11/97 aliu Added members addToCache, findInCache, and fgCache. // 02/12/97 aliu Modified to create objects from RuleBasedCollator cache. // Moved cache out of Collation class. // 02/13/97 aliu Moved several methods out of this class and into // RuleBasedCollator, with modifications. Modified // createDefault() to call new RuleBasedCollator(Locale&) // constructor. General clean up and documentation. // 02/20/97 helena Added clone, operator==, operator!=, operator=, copy // constructor and getDynamicClassID. // 03/25/97 helena Updated with platform independent data types. // 05/06/97 helena Added memory allocation error detection. // 6/20/97 helena Java class name change. // 09/03/97 helena Added createCollationKeyValues(). // 02/10/98 damiba Added compare() with length as parameter. // 04/23/99 stephen Removed EDecompositionMode, merged with // Normalizer::EMode. // 11/02/99 helena Collator performance enhancements. Eliminates the // UnicodeString construction and special case for NO_OP. // 11/23/99 srl More performance enhancements. Inlining of // critical accessors. // 05/15/00 helena Added version information API. //============================================================================= #ifndef COLL_H #define COLL_H #include "unicode/locid.h" #include "unicode/utypes.h" #include "unicode/unistr.h" #include "unicode/normlzr.h" class CollationKey; class U_I18N_API Collator { public: enum ECollationStrength { PRIMARY = 0, SECONDARY = 1, TERTIARY = 2, IDENTICAL = 3 }; enum EComparisonResult { LESS = -1, EQUAL = 0, GREATER = 1 }; virtual ~Collator(); virtual UBool operator==(const Collator& other) const; virtual UBool operator!=(const Collator& other) const; virtual Collator* clone(void) const = 0; static Collator* createInstance( UErrorCode& err); static Collator* createInstance( const Locale& loc, UErrorCode& err); // comparison virtual EComparisonResult compare( const UnicodeString& source, const UnicodeString& target) const = 0; virtual EComparisonResult compare( const UnicodeString& source, const UnicodeString& target, int32_t length) const = 0; virtual EComparisonResult compare( const UChar* source, int32_t sourceLength, const UChar* target, int32_t targetLength) const = 0; virtual CollationKey& getCollationKey(const UnicodeString& source, CollationKey& key, UErrorCode& status) const = 0; virtual CollationKey& getCollationKey(const UChar *source, int32_t sourceLength, CollationKey& key, UErrorCode& status) const = 0; virtual int32_t hashCode(void) const = 0; UBool greater( const UnicodeString& source, const UnicodeString& target) const; UBool greaterOrEqual( const UnicodeString& source, const UnicodeString& target) const; UBool equals( const UnicodeString& source, const UnicodeString& target) const; // getter/setter Normalizer::EMode getDecomposition(void) const; void setDecomposition(Normalizer::EMode mode); ECollationStrength getStrength(void) const; void setStrength( ECollationStrength newStrength); static UnicodeString& getDisplayName( const Locale& objectLocale, const Locale& displayLocale, UnicodeString& name) ; static UnicodeString& getDisplayName( const Locale& objectLocale, UnicodeString& name) ; static const Locale* getAvailableLocales(int32_t& count); void getVersion(UVersionInfo info) const; virtual UClassID getDynamicClassID(void) const = 0; protected: Collator(); Collator(ECollationStrength collationStrength, Normalizer::EMode decompositionMode); Collator(const Collator& other); const Collator& operator=(const Collator& other); //-------------------------------------------------------------------------- private: ECollationStrength strength; Normalizer::EMode decmp; static const UVersionInfo fVersion; }; inline UBool Collator::operator==(const Collator& other) const { UBool result; if (this == &other) result = TRUE; else result = ((strength == other.strength) && (decmp == other.decmp)); return result; } inline UBool Collator::operator!=(const Collator& other) const { UBool result; result = !(*this == other); return result; } inline Collator::ECollationStrength Collator::getStrength() const { return strength; } inline Normalizer::EMode Collator::getDecomposition() const { return decmp; } #endif