coll.h

Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2006, International Business Machines                 *
00004 *   Corporation and others.  All Rights Reserved.                            *
00005 ******************************************************************************
00006 */
00007 
00044 #ifndef COLL_H
00045 #define COLL_H
00046 
00047 #include "unicode/utypes.h"
00048 
00054 #if !UCONFIG_NO_COLLATION
00055 
00056 #include "unicode/uobject.h"
00057 #include "unicode/ucol.h"
00058 #include "unicode/normlzr.h"
00059 #include "unicode/locid.h"
00060 #include "unicode/uniset.h"
00061 #include "unicode/umisc.h"
00062 
00063 U_NAMESPACE_BEGIN
00064 
00065 class StringEnumeration;
00066 
00067 #if !UCONFIG_NO_SERVICE
00068 
00071 class CollatorFactory;
00072 #endif
00073 
00077 class CollationKey;
00078 
00175 class U_I18N_API Collator : public UObject {
00176 public:
00177 
00178     // Collator public enums -----------------------------------------------
00179 
00205     enum ECollationStrength
00206     {
00207         PRIMARY    = 0,
00208         SECONDARY  = 1,
00209         TERTIARY   = 2,
00210         QUATERNARY = 3,
00211         IDENTICAL  = 15
00212     };
00213 
00224     enum EComparisonResult
00225     {
00226         LESS = -1,
00227         EQUAL = 0,
00228         GREATER = 1
00229     };
00230 
00231     // Collator public destructor -----------------------------------------
00232 
00237     virtual ~Collator();
00238 
00239     // Collator public methods --------------------------------------------
00240 
00247     virtual UBool operator==(const Collator& other) const;
00248 
00255     virtual UBool operator!=(const Collator& other) const;
00256 
00262     virtual Collator* clone(void) const = 0;
00263 
00283     static Collator* U_EXPORT2 createInstance(UErrorCode&  err);
00284 
00308     static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00309 
00310 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00311 
00334     static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00335 #endif
00336 
00348     virtual EComparisonResult compare(const UnicodeString& source,
00349                                       const UnicodeString& target) const;
00350 
00363     virtual UCollationResult compare(const UnicodeString& source,
00364                                       const UnicodeString& target,
00365                                       UErrorCode &status) const = 0;
00366 
00379     virtual EComparisonResult compare(const UnicodeString& source,
00380                                       const UnicodeString& target,
00381                                       int32_t length) const;
00382 
00396     virtual UCollationResult compare(const UnicodeString& source,
00397                                       const UnicodeString& target,
00398                                       int32_t length,
00399                                       UErrorCode &status) const = 0;
00400 
00416     virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00417                                       const UChar* target, int32_t targetLength)
00418                                       const;
00419 
00436     virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00437                                       const UChar* target, int32_t targetLength,
00438                                       UErrorCode &status) const = 0;
00439 
00455     virtual CollationKey& getCollationKey(const UnicodeString&  source,
00456                                           CollationKey& key,
00457                                           UErrorCode& status) const = 0;
00458 
00475     virtual CollationKey& getCollationKey(const UChar*source,
00476                                           int32_t sourceLength,
00477                                           CollationKey& key,
00478                                           UErrorCode& status) const = 0;
00483     virtual int32_t hashCode(void) const = 0;
00484 
00497     virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00498 
00508     UBool greater(const UnicodeString& source, const UnicodeString& target)
00509                   const;
00510 
00520     UBool greaterOrEqual(const UnicodeString& source,
00521                          const UnicodeString& target) const;
00522 
00532     UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00533 
00544     virtual ECollationStrength getStrength(void) const = 0;
00545 
00564     virtual void setStrength(ECollationStrength newStrength) = 0;
00565 
00575     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00576                                          const Locale& displayLocale,
00577                                          UnicodeString& name);
00578 
00587     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00588                                          UnicodeString& name);
00589 
00601     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00602 
00603 #if !UCONFIG_NO_SERVICE
00604 
00612     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00613 #endif
00614 
00624     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00625 
00637     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00638 
00666     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00667                                           UBool& isAvailable, UErrorCode& status);
00668 
00669 #if !UCONFIG_NO_SERVICE
00670 
00678     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00679 
00687     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00688 
00699     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00700 #endif /* UCONFIG_NO_SERVICE */
00701 
00707     virtual void getVersion(UVersionInfo info) const = 0;
00708 
00719     virtual UClassID getDynamicClassID(void) const = 0;
00720 
00729     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00730                               UErrorCode &status) = 0;
00731 
00740     virtual UColAttributeValue getAttribute(UColAttribute attr,
00741                                             UErrorCode &status) = 0;
00742 
00753     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00754 
00764     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00765 
00773     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00774 
00781     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00782 
00792     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00793 
00794 
00800     virtual Collator* safeClone(void) = 0;
00801 
00814     virtual int32_t getSortKey(const UnicodeString& source,
00815                               uint8_t* result,
00816                               int32_t resultLength) const = 0;
00817 
00833     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00834                                uint8_t*result, int32_t resultLength) const = 0;
00835 
00873     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00874             int32_t             sourceLength,
00875             UColBoundMode       boundType,
00876             uint32_t            noOfLevels,
00877             uint8_t             *result,
00878             int32_t             resultLength,
00879             UErrorCode          &status);
00880 
00881 
00882 protected:
00883 
00884     // Collator protected constructors -------------------------------------
00885 
00893     Collator();
00894 
00906     Collator(UCollationStrength collationStrength,
00907              UNormalizationMode decompositionMode);
00908 
00914     Collator(const Collator& other);
00915 
00916     // Collator protected methods -----------------------------------------
00917 
00918 
00925     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00926 
00927 public:
00928 #if !UCONFIG_NO_SERVICE
00929 
00933     static UCollator* createUCollator(const char* loc, UErrorCode* status);
00934 #endif
00935 private:
00940     Collator& operator=(const Collator& other);
00941 
00942     friend class CFactory;
00943     friend class SimpleCFactory;
00944     friend class ICUCollatorFactory;
00945     friend class ICUCollatorService;
00946     static Collator* makeInstance(const Locale& desiredLocale,
00947                                   UErrorCode& status);
00948 
00949     // Collator private data members ---------------------------------------
00950 
00951     /*
00952     synwee : removed as attributes to be handled by child class
00953     UCollationStrength  strength;
00954     Normalizer::EMode  decmp;
00955     */
00956     /* This is useless information */
00957 /*  static const UVersionInfo fVersion;*/
00958 };
00959 
00960 #if !UCONFIG_NO_SERVICE
00961 
00977 class U_I18N_API CollatorFactory : public UObject {
00978 public:
00979 
00984     virtual ~CollatorFactory();
00985 
00993     virtual UBool visible(void) const;
00994 
01002     virtual Collator* createCollator(const Locale& loc) = 0;
01003 
01014     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01015                                            const Locale& displayLocale,
01016                                            UnicodeString& result);
01017 
01027     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01028 };
01029 #endif /* UCONFIG_NO_SERVICE */
01030 
01031 // Collator inline methods -----------------------------------------------
01032 
01033 U_NAMESPACE_END
01034 
01035 #endif /* #if !UCONFIG_NO_COLLATION */
01036 
01037 #endif

Generated on Mon Aug 13 07:17:24 2007 for ICU 3.6 by  doxygen 1.5.2