Main Page | Class Hierarchy | Alphabetical List | Data Structures | 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 
00333   static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00334 
00346   virtual EComparisonResult compare(const UnicodeString& source, 
00347                                     const UnicodeString& target) const;
00348 
00361   virtual UCollationResult compare(const UnicodeString& source, 
00362                                     const UnicodeString& target,
00363                                     UErrorCode &status) const = 0;
00364 
00377   virtual EComparisonResult compare(const UnicodeString& source,
00378                                     const UnicodeString& target,
00379                                     int32_t length) const;
00380     
00394   virtual UCollationResult compare(const UnicodeString& source,
00395                                     const UnicodeString& target,
00396                                     int32_t length,
00397                                     UErrorCode &status) const = 0;
00398 
00414   virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00415                                     const UChar* target, int32_t targetLength) 
00416                                     const;
00417 
00434   virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00435                                     const UChar* target, int32_t targetLength,
00436                                     UErrorCode &status) const = 0;
00452   virtual CollationKey& getCollationKey(const UnicodeString&  source,
00453                                         CollationKey& key,
00454                                         UErrorCode& status) const = 0;
00455 
00472   virtual CollationKey& getCollationKey(const UChar*source, 
00473                                         int32_t sourceLength,
00474                                         CollationKey& key,
00475                                         UErrorCode& status) const = 0;
00480   virtual int32_t hashCode(void) const = 0;
00481 
00493   virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00494 
00504   UBool greater(const UnicodeString& source, const UnicodeString& target) 
00505                 const;
00506 
00516   UBool greaterOrEqual(const UnicodeString& source, 
00517                        const UnicodeString& target) const;
00527   UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00528         
00539   virtual ECollationStrength getStrength(void) const = 0;
00540   
00561   virtual void setStrength(ECollationStrength newStrength) = 0;
00562 
00572   static UnicodeString& getDisplayName(const Locale& objectLocale,
00573                                        const Locale& displayLocale,
00574                                        UnicodeString& name);
00583   static UnicodeString& getDisplayName(const Locale& objectLocale,
00584                                        UnicodeString& name);
00585 
00597   static const Locale* getAvailableLocales(int32_t& count);
00598 
00607   static StringEnumeration* getAvailableLocales(void);
00608 
00617   static URegistryKey registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00618 
00626   static URegistryKey registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00627 
00638   static UBool unregister(URegistryKey key, UErrorCode& status);
00639 
00645   virtual void getVersion(UVersionInfo info) const = 0;
00646 
00664   virtual UClassID getDynamicClassID(void) const = 0;
00665 
00674   virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 
00675                             UErrorCode &status) = 0;
00676 
00685   virtual UColAttributeValue getAttribute(UColAttribute attr, 
00686                                           UErrorCode &status) = 0;
00687 
00698   virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00699 
00709   virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00710 
00718   virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00719 
00726   virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00727 
00737   virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00738 
00739 
00745   virtual Collator* safeClone(void) = 0;
00746 
00759   virtual int32_t getSortKey(const UnicodeString& source,
00760                             uint8_t* result,
00761                             int32_t resultLength) const = 0;
00762 
00778   virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00779                              uint8_t*result, int32_t resultLength) const = 0;
00780 
00818     static int32_t getBound(const uint8_t       *source,
00819             int32_t             sourceLength,
00820             UColBoundMode       boundType,
00821             uint32_t            noOfLevels,
00822             uint8_t             *result,
00823             int32_t             resultLength,
00824             UErrorCode          &status);
00825 
00826 
00827 protected:
00828 
00829   // Collator protected constructors -------------------------------------
00830 
00838   Collator();
00839 
00851   Collator(UCollationStrength collationStrength, 
00852            UNormalizationMode decompositionMode);
00853   
00859   Collator(const Collator& other);
00860   
00861   // Collator protected methods -----------------------------------------
00862 
00863 
00870   virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00871 
00872 public:
00877    static UCollator* createUCollator(const char* loc, UErrorCode* status);
00878 
00879 private:
00884   Collator& operator=(const Collator& other);
00885 
00886   friend class CFactory;
00887   friend class SimpleCFactory;
00888   friend class ICUCollatorFactory;
00889   friend class ICUCollatorService;
00890   static Collator* makeInstance(const Locale& desiredLocale, 
00891                                 UErrorCode& status);
00892 
00893   // Collator private data members ---------------------------------------
00894 
00895   /*
00896   synwee : removed as attributes to be handled by child class
00897   UCollationStrength  strength;
00898   Normalizer::EMode  decmp;
00899   */
00900     /* This is useless information */
00901 /*  static const UVersionInfo fVersion;*/
00902 };
00903 
00920 class U_I18N_API CollatorFactory : public UObject {
00921 public:
00922 
00930     virtual UBool visible(void) const;
00931 
00939     virtual Collator* createCollator(const Locale& loc) = 0;
00940 
00951     virtual  UnicodeString& getDisplayName(const Locale& objectLocale, 
00952                                            const Locale& displayLocale,
00953                                            UnicodeString& result);
00954     
00964     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
00965 };
00966 
00967 // Collator inline methods -----------------------------------------------
00968 
00969 inline UBool Collator::operator==(const Collator& other) const
00970 {
00971   return (UBool)(this == &other);
00972 }
00973 
00974 inline UBool Collator::operator!=(const Collator& other) const
00975 {
00976   return (UBool)!(*this == other);
00977 }
00978 
00979 inline UnicodeSet *Collator::getTailoredSet(UErrorCode &status) const
00980 {
00981   if(U_FAILURE(status)) {
00982     return NULL;
00983   }
00984   // everything can be changed
00985   return new UnicodeSet(0, 0x10FFFF);
00986 }
00987 
00988 /*
00989 synwee : removed since there's no attribute to be retrieved here
00990 inline UCollationStrength Collator::getStrength() const
00991 {
00992   return strength;
00993 }
00994 
00995 inline Normalizer::EMode Collator::getDecomposition() const
00996 {
00997   return decmp;
00998 }
00999 */
01000 U_NAMESPACE_END
01001 
01002 #endif /* #if !UCONFIG_NO_COLLATION */
01003 
01004 #endif

Generated on Wed Sep 3 17:47:08 2003 for ICU 2.6 by doxygen 1.3.2