ICU 4.6  4.6
coll.h
Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 *   Copyright (C) 1996-2010, 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 
00609     virtual int32_t getReorderCodes(int32_t *dest,
00610                                     int32_t destCapacity,
00611                                     UErrorCode& status) const;
00612 
00620     virtual void setReorderCodes(const int32_t* reorderCodes,
00621                                 int32_t reorderCodesLength,
00622                                 UErrorCode& status) ;
00623 
00633     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00634                                          const Locale& displayLocale,
00635                                          UnicodeString& name);
00636 
00645     static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00646                                          UnicodeString& name);
00647 
00659     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00660 
00669     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00670 
00680     static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
00681 
00693     static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
00694 
00711     static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
00712                                                                     UBool commonlyUsed, UErrorCode& status);
00713 
00741     static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
00742                                           UBool& isAvailable, UErrorCode& status);
00743 
00744 #if !UCONFIG_NO_SERVICE
00745 
00753     static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00754 
00762     static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00763 
00774     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00775 #endif /* UCONFIG_NO_SERVICE */
00776 
00782     virtual void getVersion(UVersionInfo info) const = 0;
00783 
00794     virtual UClassID getDynamicClassID(void) const = 0;
00795 
00804     virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00805                               UErrorCode &status) = 0;
00806 
00815     virtual UColAttributeValue getAttribute(UColAttribute attr,
00816                                             UErrorCode &status) = 0;
00817 
00828     virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00829 
00839     virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00840 
00848     virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00849 
00856     virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00857 
00867     virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00868 
00869 
00875     virtual Collator* safeClone(void) = 0;
00876 
00889     virtual int32_t getSortKey(const UnicodeString& source,
00890                               uint8_t* result,
00891                               int32_t resultLength) const = 0;
00892 
00908     virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00909                                uint8_t*result, int32_t resultLength) const = 0;
00910 
00948     static int32_t U_EXPORT2 getBound(const uint8_t       *source,
00949             int32_t             sourceLength,
00950             UColBoundMode       boundType,
00951             uint32_t            noOfLevels,
00952             uint8_t             *result,
00953             int32_t             resultLength,
00954             UErrorCode          &status);
00955 
00956 
00957 protected:
00958 
00959     // Collator protected constructors -------------------------------------
00960 
00968     Collator();
00969 
00981     Collator(UCollationStrength collationStrength,
00982              UNormalizationMode decompositionMode);
00983 
00989     Collator(const Collator& other);
00990 
00991     // Collator protected methods -----------------------------------------
00992 
00993 
01001     virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
01002 
01003 public:
01004 #if !UCONFIG_NO_SERVICE
01005 
01009     static UCollator* createUCollator(const char* loc, UErrorCode* status);
01010 #endif
01011 private:
01016     Collator& operator=(const Collator& other);
01017 
01018     friend class CFactory;
01019     friend class SimpleCFactory;
01020     friend class ICUCollatorFactory;
01021     friend class ICUCollatorService;
01022     static Collator* makeInstance(const Locale& desiredLocale,
01023                                   UErrorCode& status);
01024 
01025     // Collator private data members ---------------------------------------
01026 
01027     /*
01028     synwee : removed as attributes to be handled by child class
01029     UCollationStrength  strength;
01030     Normalizer::EMode  decmp;
01031     */
01032     /* This is useless information */
01033 /*  static const UVersionInfo fVersion;*/
01034 };
01035 
01036 #if !UCONFIG_NO_SERVICE
01037 
01053 class U_I18N_API CollatorFactory : public UObject {
01054 public:
01055 
01060     virtual ~CollatorFactory();
01061 
01069     virtual UBool visible(void) const;
01070 
01078     virtual Collator* createCollator(const Locale& loc) = 0;
01079 
01090     virtual  UnicodeString& getDisplayName(const Locale& objectLocale,
01091                                            const Locale& displayLocale,
01092                                            UnicodeString& result);
01093 
01103     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01104 };
01105 #endif /* UCONFIG_NO_SERVICE */
01106 
01107 // Collator inline methods -----------------------------------------------
01108 
01109 U_NAMESPACE_END
01110 
01111 #endif /* #if !UCONFIG_NO_COLLATION */
01112 
01113 #endif
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines