00001
00002
00003
00004
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
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
00232
00237 virtual ~Collator();
00238
00239
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
00496 virtual const Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00497
00507 UBool greater(const UnicodeString& source, const UnicodeString& target)
00508 const;
00509
00519 UBool greaterOrEqual(const UnicodeString& source,
00520 const UnicodeString& target) const;
00521
00531 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
00532
00543 virtual ECollationStrength getStrength(void) const = 0;
00544
00565 virtual void setStrength(ECollationStrength newStrength) = 0;
00566
00576 static UnicodeString& getDisplayName(const Locale& objectLocale,
00577 const Locale& displayLocale,
00578 UnicodeString& name);
00579
00588 static UnicodeString& getDisplayName(const Locale& objectLocale,
00589 UnicodeString& name);
00590
00602 static const Locale* getAvailableLocales(int32_t& count);
00603
00612 static StringEnumeration* getAvailableLocales(void);
00613
00622 static URegistryKey registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
00623
00631 static URegistryKey registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
00632
00643 static UBool unregister(URegistryKey key, UErrorCode& status);
00644
00650 virtual void getVersion(UVersionInfo info) const = 0;
00651
00662 virtual UClassID getDynamicClassID(void) const = 0;
00663
00672 virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00673 UErrorCode &status) = 0;
00674
00683 virtual UColAttributeValue getAttribute(UColAttribute attr,
00684 UErrorCode &status) = 0;
00685
00696 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00697
00707 virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status) = 0;
00708
00716 virtual void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00717
00724 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00725
00735 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
00736
00737
00743 virtual Collator* safeClone(void) = 0;
00744
00757 virtual int32_t getSortKey(const UnicodeString& source,
00758 uint8_t* result,
00759 int32_t resultLength) const = 0;
00760
00776 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00777 uint8_t*result, int32_t resultLength) const = 0;
00778
00816 static int32_t getBound(const uint8_t *source,
00817 int32_t sourceLength,
00818 UColBoundMode boundType,
00819 uint32_t noOfLevels,
00820 uint8_t *result,
00821 int32_t resultLength,
00822 UErrorCode &status);
00823
00824
00825 protected:
00826
00827
00828
00836 Collator();
00837
00849 Collator(UCollationStrength collationStrength,
00850 UNormalizationMode decompositionMode);
00851
00857 Collator(const Collator& other);
00858
00859
00860
00861
00868 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale);
00869
00870 public:
00875 static UCollator* createUCollator(const char* loc, UErrorCode* status);
00876
00877 private:
00882 Collator& operator=(const Collator& other);
00883
00884 friend class CFactory;
00885 friend class SimpleCFactory;
00886 friend class ICUCollatorFactory;
00887 friend class ICUCollatorService;
00888 static Collator* makeInstance(const Locale& desiredLocale,
00889 UErrorCode& status);
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900 };
00901
00918 class U_I18N_API CollatorFactory : public UObject {
00919 public:
00920
00928 virtual UBool visible(void) const;
00929
00937 virtual Collator* createCollator(const Locale& loc) = 0;
00938
00949 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
00950 const Locale& displayLocale,
00951 UnicodeString& result);
00952
00962 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
00963 };
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979 U_NAMESPACE_END
00980
00981 #endif
00982
00983 #endif