coll.h

00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2004, 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 
00049 #if !UCONFIG_NO_COLLATION
00050 
00051 #include "unicode/uobject.h"
00052 #include "unicode/ucol.h"
00053 #include "unicode/normlzr.h"
00054 #include "unicode/locid.h"
00055 #include "unicode/uniset.h"
00056 
00057 U_NAMESPACE_BEGIN
00058 
00059 class StringEnumeration;
00060 
00061 #if !UCONFIG_NO_SERVICE
00062 
00065 typedef const void* URegistryKey;
00066 
00070 class CollatorFactory;
00071 #endif
00072 
00076 class CollationKey;
00077 
00174 class U_I18N_API Collator : public UObject {
00175 public:
00176 
00177     // Collator public enums -----------------------------------------------
00178 
00204     enum ECollationStrength
00205     {
00206         PRIMARY    = 0,
00207         SECONDARY  = 1,
00208         TERTIARY   = 2,
00209         QUATERNARY = 3,
00210         IDENTICAL  = 15
00211     };
00212 
00223     enum EComparisonResult
00224     {
00225         LESS = -1,
00226         EQUAL = 0,
00227         GREATER = 1
00228     };
00229 
00230     // Collator public destructor -----------------------------------------
00231 
00236     virtual ~Collator();
00237 
00238     // Collator public methods --------------------------------------------
00239 
00246     virtual UBool operator==(const Collator& other) const;
00247 
00254     virtual UBool operator!=(const Collator& other) const;
00255 
00261     virtual Collator* clone(void) const = 0;
00262 
00282     static Collator* U_EXPORT2 createInstance(UErrorCode&  err);
00283 
00307     static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00308 
00309 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00310 
00333     static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00334 #endif
00335 
00347     virtual EComparisonResult compare(const UnicodeString& source,
00348                                       const UnicodeString& target) const;
00349 
00362     virtual UCollationResult compare(const UnicodeString& source,
00363                                       const UnicodeString& target,
00364                                       UErrorCode &status) const = 0;
00365 
00378     virtual EComparisonResult compare(const UnicodeString& source,
00379                                       const UnicodeString& target,
00380                                       int32_t length) const;
00381 
00395     virtual UCollationResult compare(const UnicodeString& source,
00396                                       const UnicodeString& target,
00397                                       int32_t length,
00398                                       UErrorCode &status) const = 0;
00399 
00415     virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00416                                       const UChar* target, int32_t targetLength)
00417                                       const;
00418 
00435     virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00436                                       const UChar* target, int32_t targetLength,
00437                                       UErrorCode &status) const = 0;
00438 
00454     virtual CollationKey& getCollationKey(const UnicodeString&  source,
00455                                           CollationKey& key,
00456                                           UErrorCode& status) const = 0;
00457 
00474     virtual CollationKey& getCollationKey(const UChar*source,
00475                                           int32_t sourceLength,
00476                                           CollationKey& key,
00477                                           UErrorCode& status) const = 0;
00482     virtual int32_t hashCode(void) const = 0;
00483 
00496     virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00497 
00507     UBool greater(const UnicodeString& source, const UnicodeString& target)
00508                   const;
00509 
00519     UBool greaterOrEqual(const UnicodeString& source,
00520                          const UnicodeString& target) const;
00521 
00531     UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00532 
00543     virtual ECollationStrength getStrength(void) const = 0;
00544 
00563     virtual void setStrength(ECollationStrength newStrength) = 0;
00564 
00574     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00575                                          const Locale& displayLocale,
00576                                          UnicodeString& name);
00577 
00586     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00587                                          UnicodeString& name);
00588 
00600     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00601 
00602 #if !UCONFIG_NO_SERVICE
00603 
00611     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00612 #endif
00613 
00623     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00624 
00636     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00637 
00665     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00666                                           UBool& isAvailable, UErrorCode& status);
00667 
00668 #if !UCONFIG_NO_SERVICE
00669 
00677     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00678 
00686     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00687 
00698     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00699 #endif /* UCONFIG_NO_SERVICE */
00700 
00706     virtual void getVersion(UVersionInfo info) const = 0;
00707 
00718     virtual UClassID getDynamicClassID(void) const = 0;
00719 
00728     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00729                               UErrorCode &status) = 0;
00730 
00739     virtual UColAttributeValue getAttribute(UColAttribute attr,
00740                                             UErrorCode &status) = 0;
00741 
00752     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00753 
00763     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00764 
00772     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00773 
00780     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00781 
00791     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00792 
00793 
00799     virtual Collator* safeClone(void) = 0;
00800 
00813     virtual int32_t getSortKey(const UnicodeString& source,
00814                               uint8_t* result,
00815                               int32_t resultLength) const = 0;
00816 
00832     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00833                                uint8_t*result, int32_t resultLength) const = 0;
00834 
00872     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00873             int32_t             sourceLength,
00874             UColBoundMode       boundType,
00875             uint32_t            noOfLevels,
00876             uint8_t             *result,
00877             int32_t             resultLength,
00878             UErrorCode          &status);
00879 
00880 
00881 protected:
00882 
00883     // Collator protected constructors -------------------------------------
00884 
00892     Collator();
00893 
00905     Collator(UCollationStrength collationStrength,
00906              UNormalizationMode decompositionMode);
00907 
00913     Collator(const Collator& other);
00914 
00915     // Collator protected methods -----------------------------------------
00916 
00917 
00924     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00925 
00926 public:
00927 #if !UCONFIG_NO_SERVICE
00928 
00932     static UCollator* createUCollator(const char* loc, UErrorCode* status);
00933 #endif
00934 private:
00939     Collator& operator=(const Collator& other);
00940 
00941     friend class CFactory;
00942     friend class SimpleCFactory;
00943     friend class ICUCollatorFactory;
00944     friend class ICUCollatorService;
00945     static Collator* makeInstance(const Locale& desiredLocale,
00946                                   UErrorCode& status);
00947 
00948     // Collator private data members ---------------------------------------
00949 
00950     /*
00951     synwee : removed as attributes to be handled by child class
00952     UCollationStrength  strength;
00953     Normalizer::EMode  decmp;
00954     */
00955     /* This is useless information */
00956 /*  static const UVersionInfo fVersion;*/
00957 };
00958 
00959 #if !UCONFIG_NO_SERVICE
00960 
00976 class U_I18N_API CollatorFactory : public UObject {
00977 public:
00978 
00983     virtual ~CollatorFactory();
00984 
00992     virtual UBool visible(void) const;
00993 
01001     virtual Collator* createCollator(const Locale& loc) = 0;
01002 
01013     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01014                                            const Locale& displayLocale,
01015                                            UnicodeString& result);
01016 
01026     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01027 };
01028 #endif /* UCONFIG_NO_SERVICE */
01029 
01030 // Collator inline methods -----------------------------------------------
01031 
01032 U_NAMESPACE_END
01033 
01034 #endif /* #if !UCONFIG_NO_COLLATION */
01035 
01036 #endif

Generated on Tue Nov 16 10:03:05 2004 for ICU 3.2 by  doxygen 1.3.9.1