ICU 4.8.1.1  4.8.1.1
coll.h
Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2011, International Business Machines                 *
00004 *   Corporation and others.  All Rights Reserved.                            *
00005 ******************************************************************************
00006 */
00007 
00049 #ifndef COLL_H
00050 #define COLL_H
00051 
00052 #include "unicode/utypes.h"
00053 
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 #include "unicode/uiter.h"
00063 #include "unicode/stringpiece.h"
00064 
00065 U_NAMESPACE_BEGIN
00066 
00067 class StringEnumeration;
00068 
00069 #if !UCONFIG_NO_SERVICE
00070 
00073 class CollatorFactory;
00074 #endif
00075 
00079 class CollationKey;
00080 
00177 class U_I18N_API Collator : public UObject {
00178 public:
00179 
00180     // Collator public enums -----------------------------------------------
00181 
00207     enum ECollationStrength
00208     {
00209         PRIMARY    = 0,
00210         SECONDARY  = 1,
00211         TERTIARY   = 2,
00212         QUATERNARY = 3,
00213         IDENTICAL  = 15
00214     };
00215 
00226     enum EComparisonResult
00227     {
00228         LESS = -1,
00229         EQUAL = 0,
00230         GREATER = 1
00231     };
00232 
00233     // Collator public destructor -----------------------------------------
00234 
00239     virtual ~Collator();
00240 
00241     // Collator public methods --------------------------------------------
00242 
00249     virtual UBool operator==(const Collator& other) const;
00250 
00257     virtual UBool operator!=(const Collator& other) const;
00258 
00264     virtual Collator* clone(void) const = 0;
00265 
00285     static Collator* U_EXPORT2 createInstance(UErrorCode&  err);
00286 
00310     static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
00311 
00312 #ifdef U_USE_COLLATION_OBSOLETE_2_6
00313 
00336     static Collator *createInstance(const Locale &loc, UVersionInfo version, UErrorCode &err);
00337 #endif
00338 
00350     virtual EComparisonResult compare(const UnicodeString& source,
00351                                       const UnicodeString& target) const;
00352 
00365     virtual UCollationResult compare(const UnicodeString& source,
00366                                       const UnicodeString& target,
00367                                       UErrorCode &status) const = 0;
00368 
00381     virtual EComparisonResult compare(const UnicodeString& source,
00382                                       const UnicodeString& target,
00383                                       int32_t length) const;
00384 
00398     virtual UCollationResult compare(const UnicodeString& source,
00399                                       const UnicodeString& target,
00400                                       int32_t length,
00401                                       UErrorCode &status) const = 0;
00402 
00418     virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00419                                       const UChar* target, int32_t targetLength)
00420                                       const;
00421 
00438     virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
00439                                       const UChar* target, int32_t targetLength,
00440                                       UErrorCode &status) const = 0;
00441 
00453     virtual UCollationResult compare(UCharIterator &sIter,
00454                                      UCharIterator &tIter,
00455                                      UErrorCode &status) const;
00456 
00470     virtual UCollationResult compareUTF8(const StringPiece &source,
00471                                          const StringPiece &target,
00472                                          UErrorCode &status) const;
00473 
00489     virtual CollationKey& getCollationKey(const UnicodeString&  source,
00490                                           CollationKey& key,
00491                                           UErrorCode& status) const = 0;
00492 
00509     virtual CollationKey& getCollationKey(const UChar*source,
00510                                           int32_t sourceLength,
00511                                           CollationKey& key,
00512                                           UErrorCode& status) const = 0;
00517     virtual int32_t hashCode(void) const = 0;
00518 
00531     virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00532 
00542     UBool greater(const UnicodeString& source, const UnicodeString& target)
00543                   const;
00544 
00554     UBool greaterOrEqual(const UnicodeString& source,
00555                          const UnicodeString& target) const;
00556 
00566     UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00567 
00578     virtual ECollationStrength getStrength(void) const = 0;
00579 
00598     virtual void setStrength(ECollationStrength newStrength) = 0;
00599 
00613      virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest,
00614                                     int32_t destCapacity,
00615                                     UErrorCode& status) const;
00616 
00627      virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes,
00628                                 int32_t reorderCodesLength,
00629                                 UErrorCode& status) ;
00630 
00647     static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00648                                 int32_t* dest,
00649                                 int32_t destCapacity,
00650                                 UErrorCode& status);
00651 
00661     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00662                                          const Locale& displayLocale,
00663                                          UnicodeString& name);
00664 
00673     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00674                                          UnicodeString& name);
00675 
00687     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00688 
00697     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00698 
00708     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00709 
00721     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00722 
00739     static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00740                                                                     UBool commonlyUsed, UErrorCode& status);
00741 
00769     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00770                                           UBool& isAvailable, UErrorCode& status);
00771 
00772 #if !UCONFIG_NO_SERVICE
00773 
00781     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00782 
00790     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00791 
00802     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00803 #endif /* UCONFIG_NO_SERVICE */
00804 
00810     virtual void getVersion(UVersionInfo info) const = 0;
00811 
00822     virtual UClassID getDynamicClassID(void) const = 0;
00823 
00832     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00833                               UErrorCode &status) = 0;
00834 
00843     virtual UColAttributeValue getAttribute(UColAttribute attr,
00844                                             UErrorCode &status) = 0;
00845 
00856     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00857 
00867     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00868 
00876     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00877 
00884     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00885 
00895     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00896 
00897 
00903     virtual Collator* safeClone(void) = 0;
00904 
00917     virtual int32_t getSortKey(const UnicodeString& source,
00918                               uint8_t* result,
00919                               int32_t resultLength) const = 0;
00920 
00936     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00937                                uint8_t*result, int32_t resultLength) const = 0;
00938 
00976     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00977             int32_t             sourceLength,
00978             UColBoundMode       boundType,
00979             uint32_t            noOfLevels,
00980             uint8_t             *result,
00981             int32_t             resultLength,
00982             UErrorCode          &status);
00983 
00984 
00985 protected:
00986 
00987     // Collator protected constructors -------------------------------------
00988 
00996     Collator();
00997 
01009     Collator(UCollationStrength collationStrength,
01010              UNormalizationMode decompositionMode);
01011 
01017     Collator(const Collator& other);
01018 
01019     // Collator protected methods -----------------------------------------
01020 
01021 
01029     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01030 
01031 public:
01032 #if !UCONFIG_NO_SERVICE
01033 
01037     static UCollator* createUCollator(const char* loc, UErrorCode* status);
01038 #endif
01039 private:
01044     Collator& operator=(const Collator& other);
01045 
01046     friend class CFactory;
01047     friend class SimpleCFactory;
01048     friend class ICUCollatorFactory;
01049     friend class ICUCollatorService;
01050     static Collator* makeInstance(const Locale& desiredLocale,
01051                                   UErrorCode& status);
01052 
01053     // Collator private data members ---------------------------------------
01054 
01055     /*
01056     synwee : removed as attributes to be handled by child class
01057     UCollationStrength  strength;
01058     Normalizer::EMode  decmp;
01059     */
01060     /* This is useless information */
01061 /*  static const UVersionInfo fVersion;*/
01062 };
01063 
01064 #if !UCONFIG_NO_SERVICE
01065 
01081 class U_I18N_API CollatorFactory : public UObject {
01082 public:
01083 
01088     virtual ~CollatorFactory();
01089 
01097     virtual UBool visible(void) const;
01098 
01106     virtual Collator* createCollator(const Locale& loc) = 0;
01107 
01118     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01119                                            const Locale& displayLocale,
01120                                            UnicodeString& result);
01121 
01131     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01132 };
01133 #endif /* UCONFIG_NO_SERVICE */
01134 
01135 // Collator inline methods -----------------------------------------------
01136 
01137 U_NAMESPACE_END
01138 
01139 #endif /* #if !UCONFIG_NO_COLLATION */
01140 
01141 #endif
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines