Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

coll.h

00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2003, 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 
00064 typedef const void* URegistryKey;
00065 
00069 class CollatorFactory;
00070 
00074 class CollationKey;
00075 
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* createInstance(UErrorCode&  err);
00284 
00308     static Collator* 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 
00566     virtual void setStrength(ECollationStrength newStrength) = 0;
00567 
00577     static UnicodeString& getDisplayName(const Locale& objectLocale,
00578                                          const Locale& displayLocale,
00579                                          UnicodeString& name);
00580 
00589     static UnicodeString& getDisplayName(const Locale& objectLocale,
00590                                          UnicodeString& name);
00591 
00603     static const Locale* getAvailableLocales(int32_t& count);
00604 
00613     static StringEnumeration* getAvailableLocales(void);
00614 
00623     static URegistryKey registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00624 
00632     static URegistryKey registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00633 
00644     static UBool unregister(URegistryKey key, UErrorCode& status);
00645 
00651     virtual void getVersion(UVersionInfo info) const = 0;
00652 
00663     virtual UClassID getDynamicClassID(void) const = 0;
00664 
00673     virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 
00674                               UErrorCode &status) = 0;
00675 
00684     virtual UColAttributeValue getAttribute(UColAttribute attr, 
00685                                             UErrorCode &status) = 0;
00686 
00697     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00698 
00708     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00709 
00717     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00718 
00725     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00726 
00736     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00737 
00738 
00744     virtual Collator* safeClone(void) = 0;
00745 
00758     virtual int32_t getSortKey(const UnicodeString& source,
00759                               uint8_t* result,
00760                               int32_t resultLength) const = 0;
00761 
00777     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00778                                uint8_t*result, int32_t resultLength) const = 0;
00779 
00817     static int32_t getBound(const uint8_t       *source,
00818             int32_t             sourceLength,
00819             UColBoundMode       boundType,
00820             uint32_t            noOfLevels,
00821             uint8_t             *result,
00822             int32_t             resultLength,
00823             UErrorCode          &status);
00824 
00825 
00826 protected:
00827 
00828     // Collator protected constructors -------------------------------------
00829 
00837     Collator();
00838 
00850     Collator(UCollationStrength collationStrength, 
00851              UNormalizationMode decompositionMode);
00852   
00858     Collator(const Collator& other);
00859   
00860     // Collator protected methods -----------------------------------------
00861 
00862 
00869     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00870 
00871 public:
00876     static UCollator* createUCollator(const char* loc, UErrorCode* status);
00877 
00878 private:
00883     Collator& operator=(const Collator& other);
00884 
00885     friend class CFactory;
00886     friend class SimpleCFactory;
00887     friend class ICUCollatorFactory;
00888     friend class ICUCollatorService;
00889     static Collator* makeInstance(const Locale& desiredLocale, 
00890                                   UErrorCode& status);
00891 
00892     // Collator private data members ---------------------------------------
00893 
00894     /*
00895     synwee : removed as attributes to be handled by child class
00896     UCollationStrength  strength;
00897     Normalizer::EMode  decmp;
00898     */
00899     /* This is useless information */
00900 /*  static const UVersionInfo fVersion;*/
00901 };
00902 
00919 class U_I18N_API CollatorFactory : public UObject {
00920 public:
00921 
00929     virtual UBool visible(void) const;
00930 
00938     virtual Collator* createCollator(const Locale& loc) = 0;
00939 
00950     virtual  UnicodeString& getDisplayName(const Locale& objectLocale, 
00951                                            const Locale& displayLocale,
00952                                            UnicodeString& result);
00953     
00963     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
00964 };
00965 
00966 // Collator inline methods -----------------------------------------------
00967 
00968 /*
00969 synwee : removed since there's no attribute to be retrieved here
00970 inline UCollationStrength Collator::getStrength() const
00971 {
00972   return strength;
00973 }
00974 
00975 inline Normalizer::EMode Collator::getDecomposition() const
00976 {
00977   return decmp;
00978 }
00979 */
00980 U_NAMESPACE_END
00981 
00982 #endif /* #if !UCONFIG_NO_COLLATION */
00983 
00984 #endif

Generated on Wed May 18 17:29:14 2005 for ICU 2.8 by  doxygen 1.4.2