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
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
00497 virtual const
Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
00498
00508 UBool greater(const
UnicodeString& source, const
UnicodeString& target)
00509 const;
00510
00520 UBool greaterOrEqual(const
UnicodeString& source,
00521 const
UnicodeString& target) const;
00522
00532 UBool equals(const
UnicodeString& source, const
UnicodeString& target) const;
00533
00544 virtual ECollationStrength getStrength(
void) const = 0;
00545
00566 virtual
void setStrength(ECollationStrength newStrength) = 0;
00567
00577 static
UnicodeString& getDisplayName(const
Locale& objectLocale,
00578 const
Locale& displayLocale,
00579
UnicodeString& name);
00580
00589 static
UnicodeString& getDisplayName(const
Locale& objectLocale,
00590
UnicodeString& name);
00591
00603 static const
Locale* getAvailableLocales(int32_t& count);
00604
00613 static
StringEnumeration* getAvailableLocales(
void);
00614
00624 static
StringEnumeration* getKeywords(UErrorCode& status);
00625
00637 static
StringEnumeration* getKeywordValues(const
char *keyword, UErrorCode& status);
00638
00666 static
Locale getFunctionalEquivalent(const
char* keyword, const
Locale& locale,
00667 UBool& isAvailable, UErrorCode& status);
00668
00677 static URegistryKey registerInstance(Collator* toAdopt, const
Locale& locale, UErrorCode& status);
00678
00686 static URegistryKey registerFactory(
CollatorFactory* toAdopt, UErrorCode& status);
00687
00698 static UBool unregister(URegistryKey key, UErrorCode& status);
00699
00705 virtual
void getVersion(UVersionInfo info) const = 0;
00706
00717 virtual
UClassID getDynamicClassID(
void) const = 0;
00718
00727 virtual
void setAttribute(UColAttribute attr, UColAttributeValue value,
00728 UErrorCode &status) = 0;
00729
00738 virtual UColAttributeValue getAttribute(UColAttribute attr,
00739 UErrorCode &status) = 0;
00740
00751 virtual
uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
00752
00762 virtual uint32_t setVariableTop(const
UnicodeString varTop, UErrorCode &status) = 0;
00763
00771 virtual
void setVariableTop(const uint32_t varTop, UErrorCode &status) = 0;
00772
00779 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
00780
00790 virtual
UnicodeSet *getTailoredSet(UErrorCode &status) const;
00791
00792
00798 virtual Collator* safeClone(
void) = 0;
00799
00812 virtual int32_t getSortKey(const
UnicodeString& source,
00813
uint8_t* result,
00814 int32_t resultLength) const = 0;
00815
00831 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
00832 uint8_t*result, int32_t resultLength) const = 0;
00833
00871 static int32_t getBound(const uint8_t *source,
00872 int32_t sourceLength,
00873 UColBoundMode boundType,
00874 uint32_t noOfLevels,
00875 uint8_t *result,
00876 int32_t resultLength,
00877 UErrorCode &status);
00878
00879
00880 protected:
00881
00882
00883
00891 Collator();
00892
00904 Collator(
UCollationStrength collationStrength,
00905 UNormalizationMode decompositionMode);
00906
00912 Collator(const Collator& other);
00913
00914
00915
00916
00923 virtual
void setLocales(const
Locale& requestedLocale, const
Locale& validLocale);
00924
00925 public:
00930 static
UCollator* createUCollator(const
char* loc, UErrorCode* status);
00931
00932 private:
00937 Collator& operator=(const Collator& other);
00938
00939 friend class CFactory;
00940 friend class SimpleCFactory;
00941 friend class ICUCollatorFactory;
00942 friend class ICUCollatorService;
00943 static Collator* makeInstance(const
Locale& desiredLocale,
00944 UErrorCode& status);
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955 };
00956
00973 class U_I18N_API
CollatorFactory : public
UObject {
00974
public:
00975
00980
virtual ~
CollatorFactory();
00981
00989
virtual UBool visible(
void) const;
00990
00998 virtual Collator* createCollator(const
Locale& loc) = 0;
00999
01010 virtual
UnicodeString& getDisplayName(const
Locale& objectLocale,
01011 const
Locale& displayLocale,
01012
UnicodeString& result);
01013
01023 virtual const
UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
01024 };
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040 U_NAMESPACE_END
01041
01042 #endif
01043
01044 #endif