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
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
00830
00838 Collator();
00839
00851 Collator(UCollationStrength collationStrength,
00852 UNormalizationMode decompositionMode);
00853
00859 Collator(const Collator& other);
00860
00861
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
00894
00895
00896
00897
00898
00899
00900
00901
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
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
00985 return new UnicodeSet(0, 0x10FFFF);
00986 }
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000 U_NAMESPACE_END
01001
01002 #endif
01003
01004 #endif