coll.h

Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2005, 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 
00062 U_NAMESPACE_BEGIN
00063 
00064 class StringEnumeration;
00065 
00066 #if !UCONFIG_NO_SERVICE
00067 
00070 typedef const void* URegistryKey;
00071 
00075 class CollatorFactory;
00076 #endif
00077 
00081 class CollationKey;
00082 
00179 class U_I18N_API Collator : public UObject {
00180 public:
00181 
00182     // Collator public enums -----------------------------------------------
00183 
00209     enum ECollationStrength
00210     {
00211         PRIMARY    = 0,
00212         SECONDARY  = 1,
00213         TERTIARY   = 2,
00214         QUATERNARY = 3,
00215         IDENTICAL  = 15
00216     };
00217 
00228     enum EComparisonResult
00229     {
00230         LESS = -1,
00231         EQUAL = 0,
00232         GREATER = 1
00233     };
00234 
00235     // Collator public destructor -----------------------------------------
00236 
00241     virtual ~Collator();
00242 
00243     // Collator public methods --------------------------------------------
00244 
00251     virtual UBool operator==(const Collator& other) const;
00252 
00259     virtual UBool operator!=(const Collator& other) const;
00260 
00266     virtual Collator* clone(void) const = 0;
00267 
00287     static Collator* U_EXPORT2 createInstance(UErrorCode&  err);
00288 
00312     static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00313 
00314 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00315 
00338     static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00339 #endif
00340 
00352     virtual EComparisonResult compare(const UnicodeString& source,
00353                                       const UnicodeString& target) const;
00354 
00367     virtual UCollationResult compare(const UnicodeString& source,
00368                                       const UnicodeString& target,
00369                                       UErrorCode &status) const = 0;
00370 
00383     virtual EComparisonResult compare(const UnicodeString& source,
00384                                       const UnicodeString& target,
00385                                       int32_t length) const;
00386 
00400     virtual UCollationResult compare(const UnicodeString& source,
00401                                       const UnicodeString& target,
00402                                       int32_t length,
00403                                       UErrorCode &status) const = 0;
00404 
00420     virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00421                                       const UChar* target, int32_t targetLength)
00422                                       const;
00423 
00440     virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00441                                       const UChar* target, int32_t targetLength,
00442                                       UErrorCode &status) const = 0;
00443 
00459     virtual CollationKey& getCollationKey(const UnicodeString&  source,
00460                                           CollationKey& key,
00461                                           UErrorCode& status) const = 0;
00462 
00479     virtual CollationKey& getCollationKey(const UChar*source,
00480                                           int32_t sourceLength,
00481                                           CollationKey& key,
00482                                           UErrorCode& status) const = 0;
00487     virtual int32_t hashCode(void) const = 0;
00488 
00501     virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00502 
00512     UBool greater(const UnicodeString& source, const UnicodeString& target)
00513                   const;
00514 
00524     UBool greaterOrEqual(const UnicodeString& source,
00525                          const UnicodeString& target) const;
00526 
00536     UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00537 
00548     virtual ECollationStrength getStrength(void) const = 0;
00549 
00568     virtual void setStrength(ECollationStrength newStrength) = 0;
00569 
00579     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00580                                          const Locale& displayLocale,
00581                                          UnicodeString& name);
00582 
00591     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00592                                          UnicodeString& name);
00593 
00605     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00606 
00607 #if !UCONFIG_NO_SERVICE
00608 
00616     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00617 #endif
00618 
00628     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00629 
00641     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00642 
00670     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00671                                           UBool& isAvailable, UErrorCode& status);
00672 
00673 #if !UCONFIG_NO_SERVICE
00674 
00682     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00683 
00691     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00692 
00703     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00704 #endif /* UCONFIG_NO_SERVICE */
00705 
00711     virtual void getVersion(UVersionInfo info) const = 0;
00712 
00723     virtual UClassID getDynamicClassID(void) const = 0;
00724 
00733     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00734                               UErrorCode &status) = 0;
00735 
00744     virtual UColAttributeValue getAttribute(UColAttribute attr,
00745                                             UErrorCode &status) = 0;
00746 
00757     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00758 
00768     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00769 
00777     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00778 
00785     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00786 
00796     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00797 
00798 
00804     virtual Collator* safeClone(void) = 0;
00805 
00818     virtual int32_t getSortKey(const UnicodeString& source,
00819                               uint8_t* result,
00820                               int32_t resultLength) const = 0;
00821 
00837     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00838                                uint8_t*result, int32_t resultLength) const = 0;
00839 
00877     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00878             int32_t             sourceLength,
00879             UColBoundMode       boundType,
00880             uint32_t            noOfLevels,
00881             uint8_t             *result,
00882             int32_t             resultLength,
00883             UErrorCode          &status);
00884 
00885 
00886 protected:
00887 
00888     // Collator protected constructors -------------------------------------
00889 
00897     Collator();
00898 
00910     Collator(UCollationStrength collationStrength,
00911              UNormalizationMode decompositionMode);
00912 
00918     Collator(const Collator& other);
00919 
00920     // Collator protected methods -----------------------------------------
00921 
00922 
00929     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00930 
00931 public:
00932 #if !UCONFIG_NO_SERVICE
00933 
00937     static UCollator* createUCollator(const char* loc, UErrorCode* status);
00938 #endif
00939 private:
00944     Collator& operator=(const Collator& other);
00945 
00946     friend class CFactory;
00947     friend class SimpleCFactory;
00948     friend class ICUCollatorFactory;
00949     friend class ICUCollatorService;
00950     static Collator* makeInstance(const Locale& desiredLocale,
00951                                   UErrorCode& status);
00952 
00953     // Collator private data members ---------------------------------------
00954 
00955     /*
00956     synwee : removed as attributes to be handled by child class
00957     UCollationStrength  strength;
00958     Normalizer::EMode  decmp;
00959     */
00960     /* This is useless information */
00961 /*  static const UVersionInfo fVersion;*/
00962 };
00963 
00964 #if !UCONFIG_NO_SERVICE
00965 
00981 class U_I18N_API CollatorFactory : public UObject {
00982 public:
00983 
00988     virtual ~CollatorFactory();
00989 
00997     virtual UBool visible(void) const;
00998 
01006     virtual Collator* createCollator(const Locale& loc) = 0;
01007 
01018     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01019                                            const Locale& displayLocale,
01020                                            UnicodeString& result);
01021 
01031     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01032 };
01033 #endif /* UCONFIG_NO_SERVICE */
01034 
01035 // Collator inline methods -----------------------------------------------
01036 
01037 U_NAMESPACE_END
01038 
01039 #endif /* #if !UCONFIG_NO_COLLATION */
01040 
01041 #endif

Generated on Sat Feb 11 18:13:00 2006 for ICU 3.4 by  doxygen 1.4.6