ICU 49.1.1  49.1.1
coll.h
Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2012, 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 
00615      virtual int32_t U_EXPORT2 getReorderCodes(int32_t *dest,
00616                                     int32_t destCapacity,
00617                                     UErrorCode& status) const;
00618 
00633      virtual void U_EXPORT2 setReorderCodes(const int32_t* reorderCodes,
00634                                 int32_t reorderCodesLength,
00635                                 UErrorCode& status) ;
00636 
00655     static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
00656                                 int32_t* dest,
00657                                 int32_t destCapacity,
00658                                 UErrorCode& status);
00659 
00669     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00670                                          const Locale& displayLocale,
00671                                          UnicodeString& name);
00672 
00681     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00682                                          UnicodeString& name);
00683 
00695     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00696 
00705     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00706 
00716     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00717 
00729     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00730 
00747     static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00748                                                                     UBool commonlyUsed, UErrorCode& status);
00749 
00777     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00778                                           UBool& isAvailable, UErrorCode& status);
00779 
00780 #if !UCONFIG_NO_SERVICE
00781 
00789     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00790 
00798     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00799 
00810     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00811 #endif /* UCONFIG_NO_SERVICE */
00812 
00818     virtual void getVersion(UVersionInfo info) const = 0;
00819 
00830     virtual UClassID getDynamicClassID(void) const = 0;
00831 
00840     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00841                               UErrorCode &status) = 0;
00842 
00851     virtual UColAttributeValue getAttribute(UColAttribute attr,
00852                                             UErrorCode &status) = 0;
00853 
00864     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00865 
00875     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00876 
00884     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00885 
00892     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00893 
00903     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00904 
00905 
00911     virtual Collator* safeClone(void) = 0;
00912 
00925     virtual int32_t getSortKey(const UnicodeString& source,
00926                               uint8_t* result,
00927                               int32_t resultLength) const = 0;
00928 
00944     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00945                                uint8_t*result, int32_t resultLength) const = 0;
00946 
00984     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00985             int32_t             sourceLength,
00986             UColBoundMode       boundType,
00987             uint32_t            noOfLevels,
00988             uint8_t             *result,
00989             int32_t             resultLength,
00990             UErrorCode          &status);
00991 
00992 
00993 protected:
00994 
00995     // Collator protected constructors -------------------------------------
00996 
01004     Collator();
01005 
01006 #ifndef U_HIDE_DEPRECATED_API
01007 
01018     Collator(UCollationStrength collationStrength,
01019              UNormalizationMode decompositionMode);
01020 #endif  /* U_HIDE_DEPRECATED_API */
01021 
01027     Collator(const Collator& other);
01028 
01029     // Collator protected methods -----------------------------------------
01030 
01031 
01039     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01040 
01041 public:
01042 #if !UCONFIG_NO_SERVICE
01043 #ifndef U_HIDE_INTERNAL_API
01044 
01048     static UCollator* createUCollator(const char* loc, UErrorCode* status);
01049 #endif  /* U_HIDE_INTERNAL_API */
01050 #endif
01051 
01075     virtual int32_t internalGetShortDefinitionString(const char *locale,
01076                                                      char *buffer,
01077                                                      int32_t capacity,
01078                                                      UErrorCode &status) const;
01079 private:
01084     Collator& operator=(const Collator& other);
01085 
01086     friend class CFactory;
01087     friend class SimpleCFactory;
01088     friend class ICUCollatorFactory;
01089     friend class ICUCollatorService;
01090     static Collator* makeInstance(const Locale& desiredLocale,
01091                                   UErrorCode& status);
01092 
01093     // Collator private data members ---------------------------------------
01094 
01095     /*
01096     synwee : removed as attributes to be handled by child class
01097     UCollationStrength  strength;
01098     Normalizer::EMode  decmp;
01099     */
01100     /* This is useless information */
01101 /*  static const UVersionInfo fVersion;*/
01102 };
01103 
01104 #if !UCONFIG_NO_SERVICE
01105 
01121 class U_I18N_API CollatorFactory : public UObject {
01122 public:
01123 
01128     virtual ~CollatorFactory();
01129 
01137     virtual UBool visible(void) const;
01138 
01146     virtual Collator* createCollator(const Locale& loc) = 0;
01147 
01158     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01159                                            const Locale& displayLocale,
01160                                            UnicodeString& result);
01161 
01171     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01172 };
01173 #endif /* UCONFIG_NO_SERVICE */
01174 
01175 // Collator inline methods -----------------------------------------------
01176 
01177 U_NAMESPACE_END
01178 
01179 #endif /* #if !UCONFIG_NO_COLLATION */
01180 
01181 #endif