ICU 57.1 57.1
coll.h
Go to the documentation of this file.
1/*
2******************************************************************************
3* Copyright (C) 1996-2016, International Business Machines
4* Corporation and others. All Rights Reserved.
5******************************************************************************
6*/
7
12
49
50#ifndef COLL_H
51#define COLL_H
52
53#include "unicode/utypes.h"
54
55#if !UCONFIG_NO_COLLATION
56
57#include "unicode/uobject.h"
58#include "unicode/ucol.h"
59#include "unicode/normlzr.h"
60#include "unicode/locid.h"
61#include "unicode/uniset.h"
62#include "unicode/umisc.h"
63#include "unicode/uiter.h"
64#include "unicode/stringpiece.h"
65
67
69
70#if !UCONFIG_NO_SERVICE
74class CollatorFactory;
75#endif
76
80class CollationKey;
81
162
164public:
165
166 // Collator public enums -----------------------------------------------
167
194 {
195 PRIMARY = UCOL_PRIMARY, // 0
196 SECONDARY = UCOL_SECONDARY, // 1
197 TERTIARY = UCOL_TERTIARY, // 2
198 QUATERNARY = UCOL_QUATERNARY, // 3
199 IDENTICAL = UCOL_IDENTICAL // 15
200 };
201
202
203 // Cannot use #ifndef U_HIDE_DEPRECATED_API for the following, it is
204 // used by virtual methods that cannot have that conditional.
216 {
217 LESS = UCOL_LESS, // -1
218 EQUAL = UCOL_EQUAL, // 0
219 GREATER = UCOL_GREATER // 1
220 };
221
222 // Collator public destructor -----------------------------------------
223
228 virtual ~Collator();
229
230 // Collator public methods --------------------------------------------
231
250 virtual UBool operator==(const Collator& other) const;
251
259 virtual UBool operator!=(const Collator& other) const;
260
266 virtual Collator* clone(void) const = 0;
267
287 static Collator* U_EXPORT2 createInstance(UErrorCode& err);
288
322 static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err);
323
336 const UnicodeString& target) const;
337
351 const UnicodeString& target,
352 UErrorCode &status) const = 0;
353
367 const UnicodeString& target,
368 int32_t length) const;
369
384 const UnicodeString& target,
385 int32_t length,
386 UErrorCode &status) const = 0;
387
421 virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
422 const UChar* target, int32_t targetLength)
423 const;
424
441 virtual UCollationResult compare(const UChar* source, int32_t sourceLength,
442 const UChar* target, int32_t targetLength,
443 UErrorCode &status) const = 0;
444
457 UCharIterator &tIter,
458 UErrorCode &status) const;
459
474 const StringPiece &target,
475 UErrorCode &status) const;
476
496 CollationKey& key,
497 UErrorCode& status) const = 0;
498
518 virtual CollationKey& getCollationKey(const UChar*source,
519 int32_t sourceLength,
520 CollationKey& key,
521 UErrorCode& status) const = 0;
526 virtual int32_t hashCode(void) const = 0;
527
540 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0;
541
551 UBool greater(const UnicodeString& source, const UnicodeString& target)
552 const;
553
564 const UnicodeString& target) const;
565
575 UBool equals(const UnicodeString& source, const UnicodeString& target) const;
576
587 virtual ECollationStrength getStrength(void) const;
588
607 virtual void setStrength(ECollationStrength newStrength);
608
624 virtual int32_t getReorderCodes(int32_t *dest,
625 int32_t destCapacity,
626 UErrorCode& status) const;
627
643 virtual void setReorderCodes(const int32_t* reorderCodes,
644 int32_t reorderCodesLength,
645 UErrorCode& status) ;
646
667 static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode,
668 int32_t* dest,
669 int32_t destCapacity,
670 UErrorCode& status);
671
681 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
682 const Locale& displayLocale,
683 UnicodeString& name);
684
693 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
694 UnicodeString& name);
695
707 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
708
717 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
718
728 static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status);
729
741 static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status);
742
759 static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale,
760 UBool commonlyUsed, UErrorCode& status);
761
789 static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale,
790 UBool& isAvailable, UErrorCode& status);
791
792#if !UCONFIG_NO_SERVICE
804 static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status);
805
816 static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status);
817
831 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
832#endif /* UCONFIG_NO_SERVICE */
833
839 virtual void getVersion(UVersionInfo info) const = 0;
840
851 virtual UClassID getDynamicClassID(void) const = 0;
852
862 UErrorCode &status) = 0;
863
873 UErrorCode &status) const = 0;
874
894
904
921 virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status) = 0;
922
938 virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0;
939
951 virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0;
952
960 virtual uint32_t getVariableTop(UErrorCode &status) const = 0;
961
971 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
972
980 virtual Collator* safeClone(void) const;
981
998 virtual int32_t getSortKey(const UnicodeString& source,
999 uint8_t* result,
1000 int32_t resultLength) const = 0;
1001
1021 virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
1022 uint8_t*result, int32_t resultLength) const = 0;
1023
1061 static int32_t U_EXPORT2 getBound(const uint8_t *source,
1062 int32_t sourceLength,
1063 UColBoundMode boundType,
1064 uint32_t noOfLevels,
1065 uint8_t *result,
1066 int32_t resultLength,
1067 UErrorCode &status);
1068
1069
1070protected:
1071
1072 // Collator protected constructors -------------------------------------
1073
1082
1083#ifndef U_HIDE_DEPRECATED_API
1095 Collator(UCollationStrength collationStrength,
1096 UNormalizationMode decompositionMode);
1097#endif /* U_HIDE_DEPRECATED_API */
1098
1104 Collator(const Collator& other);
1105
1106public:
1114 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
1115
1139 virtual int32_t internalGetShortDefinitionString(const char *locale,
1140 char *buffer,
1141 int32_t capacity,
1142 UErrorCode &status) const;
1143
1149 const char *left, int32_t leftLength,
1150 const char *right, int32_t rightLength,
1151 UErrorCode &errorCode) const;
1152
1157 virtual int32_t
1159 UCharIterator *iter, uint32_t state[2],
1160 uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
1161
1162#ifndef U_HIDE_INTERNAL_API
1164 static inline Collator *fromUCollator(UCollator *uc) {
1165 return reinterpret_cast<Collator *>(uc);
1166 }
1167
1168 static inline const Collator *fromUCollator(const UCollator *uc) {
1169 return reinterpret_cast<const Collator *>(uc);
1170 }
1171
1173 return reinterpret_cast<UCollator *>(this);
1174 }
1175
1176 inline const UCollator *toUCollator() const {
1177 return reinterpret_cast<const UCollator *>(this);
1178 }
1179#endif // U_HIDE_INTERNAL_API
1180
1181private:
1185 Collator& operator=(const Collator& other);
1186
1187 friend class CFactory;
1188 friend class SimpleCFactory;
1189 friend class ICUCollatorFactory;
1190 friend class ICUCollatorService;
1191 static Collator* makeInstance(const Locale& desiredLocale,
1192 UErrorCode& status);
1193};
1194
1195#if !UCONFIG_NO_SERVICE
1213public:
1214
1220
1228 virtual UBool visible(void) const;
1229
1237 virtual Collator* createCollator(const Locale& loc) = 0;
1238
1249 virtual UnicodeString& getDisplayName(const Locale& objectLocale,
1250 const Locale& displayLocale,
1251 UnicodeString& result);
1252
1262 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0;
1263};
1264#endif /* UCONFIG_NO_SERVICE */
1265
1266// Collator inline methods -----------------------------------------------
1267
1269
1270#endif /* #if !UCONFIG_NO_COLLATION */
1271
1272#endif
Collation keys are generated by the Collator class.
Definition sortkey.h:97
A factory, used with registerFactory, the creates multiple collators and provides display names for t...
Definition coll.h:1212
virtual Collator * createCollator(const Locale &loc)=0
Return a collator for the provided locale.
virtual ~CollatorFactory()
Destructor.
virtual UBool visible(void) const
Return true if this factory is visible.
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status)=0
Return an array of all the locale names directly supported by this factory.
virtual UnicodeString & getDisplayName(const Locale &objectLocale, const Locale &displayLocale, UnicodeString &result)
Return the name of the collator for the objectLocale, localized for the displayLocale.
The Collator class performs locale-sensitive string comparison.
Definition coll.h:163
virtual Collator & setMaxVariable(UColReorderCode group, UErrorCode &errorCode)
Sets the variable top to the top of the specified reordering group.
UCollator * toUCollator()
Definition coll.h:1172
EComparisonResult
LESS is returned if source string is compared to be less than target string in the compare() method.
Definition coll.h:216
static UnicodeString & getDisplayName(const Locale &objectLocale, const Locale &displayLocale, UnicodeString &name)
Get name of the object for the desired Locale, in the desired langauge.
virtual ECollationStrength getStrength(void) const
Determines the minimum strength that will be used in comparison or transformation.
static URegistryKey registerInstance(Collator *toAdopt, const Locale &locale, UErrorCode &status)
Register a new Collator.
virtual void setAttribute(UColAttribute attr, UColAttributeValue value, UErrorCode &status)=0
Universal attribute setter.
static Collator * fromUCollator(UCollator *uc)
Definition coll.h:1164
virtual int32_t getReorderCodes(int32_t *dest, int32_t destCapacity, UErrorCode &status) const
Retrieves the reordering codes for this collator.
static Locale getFunctionalEquivalent(const char *keyword, const Locale &locale, UBool &isAvailable, UErrorCode &status)
Return the functionally equivalent locale for the given requested locale, with respect to given keywo...
const UCollator * toUCollator() const
Definition coll.h:1176
ECollationStrength
Base letter represents a primary difference.
Definition coll.h:194
Collator(UCollationStrength collationStrength, UNormalizationMode decompositionMode)
Constructor.
virtual Collator * safeClone(void) const
Same as clone().
virtual void setVariableTop(uint32_t varTop, UErrorCode &status)=0
Sets the variable top to the specified primary weight.
virtual void setStrength(ECollationStrength newStrength)
Sets the minimum strength to be used in comparison or transformation.
virtual UCollationResult compare(UCharIterator &sIter, UCharIterator &tIter, UErrorCode &status) const
Compares two strings using the Collator.
virtual UCollationResult internalCompareUTF8(const char *left, int32_t leftLength, const char *right, int32_t rightLength, UErrorCode &errorCode) const
Implements ucol_strcollUTF8().
virtual void setReorderCodes(const int32_t *reorderCodes, int32_t reorderCodesLength, UErrorCode &status)
Sets the ordering of scripts for this collator.
Collator(const Collator &other)
Copy constructor.
virtual void getVersion(UVersionInfo info) const =0
Gets the version information for a Collator.
virtual UBool operator==(const Collator &other) const
Returns TRUE if "other" is the same as "this".
virtual CollationKey & getCollationKey(const UChar *source, int32_t sourceLength, CollationKey &key, UErrorCode &status) const =0
Transforms the string into a series of characters that can be compared with CollationKey::compareTo.
virtual UCollationResult compare(const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength, UErrorCode &status) const =0
The comparison function compares the character data stored in two different string arrays.
virtual int32_t internalGetShortDefinitionString(const char *locale, char *buffer, int32_t capacity, UErrorCode &status) const
Get the short definition string for a collator.
virtual EComparisonResult compare(const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength) const
The comparison function compares the character data stored in two different string arrays.
virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status)=0
Sets the variable top to the primary weight of the specified string.
virtual int32_t internalNextSortKeyPart(UCharIterator *iter, uint32_t state[2], uint8_t *dest, int32_t count, UErrorCode &errorCode) const
Implements ucol_nextSortKeyPart().
virtual Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const =0
Gets the locale of the Collator.
static int32_t getBound(const uint8_t *source, int32_t sourceLength, UColBoundMode boundType, uint32_t noOfLevels, uint8_t *result, int32_t resultLength, UErrorCode &status)
Produce a bound for a given sortkey and a number of levels.
Collator()
Default constructor.
virtual UCollationResult compare(const UnicodeString &source, const UnicodeString &target, UErrorCode &status) const =0
The comparison function compares the character data stored in two different strings.
virtual UBool operator!=(const Collator &other) const
Returns true if "other" is not the same as "this".
static StringEnumeration * getKeywordValues(const char *keyword, UErrorCode &status)
Given a keyword, create a string enumeration of all values for that keyword that are currently in use...
virtual UnicodeSet * getTailoredSet(UErrorCode &status) const
Get a UnicodeSet that contains all the characters and sequences tailored in this collator.
UBool greater(const UnicodeString &source, const UnicodeString &target) const
Convenience method for comparing two strings based on the collation rules.
static StringEnumeration * getKeywords(UErrorCode &status)
Create a string enumerator of all possible keywords that are relevant to collation.
virtual int32_t hashCode(void) const =0
Generates the hash code for the collation object.
static Collator * createInstance(UErrorCode &err)
Creates the Collator object for the current default locale.
static const Collator * fromUCollator(const UCollator *uc)
Definition coll.h:1168
virtual EComparisonResult compare(const UnicodeString &source, const UnicodeString &target) const
The comparison function compares the character data stored in two different strings.
static StringEnumeration * getAvailableLocales(void)
Return a StringEnumeration over the locales available at the time of the call, including registered l...
static URegistryKey registerFactory(CollatorFactory *toAdopt, UErrorCode &status)
Register a new CollatorFactory.
static StringEnumeration * getKeywordValuesForLocale(const char *keyword, const Locale &locale, UBool commonlyUsed, UErrorCode &status)
Given a key and a locale, returns an array of string values in a preferred order that would make a di...
static UnicodeString & getDisplayName(const Locale &objectLocale, UnicodeString &name)
Get name of the object for the desired Locale, in the langauge of the default locale.
static const Locale * getAvailableLocales(int32_t &count)
Get the set of Locales for which Collations are installed.
virtual void setLocales(const Locale &requestedLocale, const Locale &validLocale, const Locale &actualLocale)
Used internally by registration to define the requested and valid locales.
virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status)=0
Sets the variable top to the primary weight of the specified string.
virtual UColReorderCode getMaxVariable() const
Returns the maximum reordering group whose characters are affected by UCOL_ALTERNATE_HANDLING.
static int32_t getEquivalentReorderCodes(int32_t reorderCode, int32_t *dest, int32_t destCapacity, UErrorCode &status)
Retrieves the reorder codes that are grouped with the given reorder code.
virtual Collator * clone(void) const =0
Makes a copy of this object.
virtual UCollationResult compareUTF8(const StringPiece &source, const StringPiece &target, UErrorCode &status) const
Compares two UTF-8 strings using the Collator.
virtual UColAttributeValue getAttribute(UColAttribute attr, UErrorCode &status) const =0
Universal attribute getter.
virtual UCollationResult compare(const UnicodeString &source, const UnicodeString &target, int32_t length, UErrorCode &status) const =0
Does the same thing as compare but limits the comparison to a specified length.
UBool equals(const UnicodeString &source, const UnicodeString &target) const
Convenience method for comparing two strings based on the collation rules.
static Collator * createInstance(const Locale &loc, UErrorCode &err)
Gets the collation object for the desired locale.
virtual uint32_t getVariableTop(UErrorCode &status) const =0
Gets the variable top value of a Collator.
virtual int32_t getSortKey(const UnicodeString &source, uint8_t *result, int32_t resultLength) const =0
Get the sort key as an array of bytes from a UnicodeString.
virtual EComparisonResult compare(const UnicodeString &source, const UnicodeString &target, int32_t length) const
Does the same thing as compare but limits the comparison to a specified length.
UBool greaterOrEqual(const UnicodeString &source, const UnicodeString &target) const
Convenience method for comparing two strings based on the collation rules.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
virtual ~Collator()
Destructor.
virtual int32_t getSortKey(const UChar *source, int32_t sourceLength, uint8_t *result, int32_t resultLength) const =0
Get the sort key as an array of bytes from a UChar buffer.
static UBool unregister(URegistryKey key, UErrorCode &status)
Unregister a previously-registered Collator or CollatorFactory using the key returned from the regist...
virtual CollationKey & getCollationKey(const UnicodeString &source, CollationKey &key, UErrorCode &status) const =0
Transforms the string into a series of characters that can be compared with CollationKey::compareTo.
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:185
Base class for 'pure' C++ implementations of uenum api.
Definition strenum.h:55
A string-like object that points to a sized piece of memory.
Definition stringpiece.h:52
UObject is the common ICU "boilerplate" class.
Definition uobject.h:221
A mutable set of Unicode characters and multicharacter strings.
Definition uniset.h:276
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:294
C++ API: Locale ID object.
C++ API: Unicode Normalization.
C++ API: StringPiece: Read-only byte string wrapper class.
C API for code unit iteration.
Definition uiter.h:339
C API: Collator.
struct UCollator UCollator
structure representing a collator object instance
Definition ucol.h:56
UColAttribute
Attributes that collation service understands.
Definition ucol.h:234
UColAttributeValue UCollationStrength
Base letter represents a primary difference.
Definition ucol.h:228
UCollationResult
UCOL_LESS is returned if source string is compared to be less than target string in the ucol_strcoll(...
Definition ucol.h:71
@ UCOL_LESS
string a < string b
Definition ucol.h:77
@ UCOL_GREATER
string a > string b
Definition ucol.h:75
@ UCOL_EQUAL
string a == string b
Definition ucol.h:73
UColBoundMode
enum that is taken by ucol_getBound API See below for explanation do not change the values assigned...
Definition ucol.h:1046
UColAttributeValue
Enum containing attribute values for controling collation behavior.
Definition ucol.h:87
@ UCOL_TERTIARY
Tertiary collation strength.
Definition ucol.h:96
@ UCOL_IDENTICAL
Identical collation strength.
Definition ucol.h:103
@ UCOL_QUATERNARY
Quaternary collation strength.
Definition ucol.h:101
@ UCOL_PRIMARY
Primary collation strength.
Definition ucol.h:92
@ UCOL_SECONDARY
Secondary collation strength.
Definition ucol.h:94
UColReorderCode
Enum containing the codes for reordering segments of the collation table that are not script codes.
Definition ucol.h:139
C API: Unicode Character Iteration.
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested,...
Definition uloc.h:336
int8_t UBool
The ICU boolean type.
Definition umachine.h:234
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition umachine.h:312
C API:misc definitions.
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration.
Definition umisc.h:55
C++ API: Unicode Set.
UNormalizationMode
Constants for normalization modes.
Definition unorm.h:136
C++ API: Common ICU base class UObject.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:91
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:358
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:130
uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]
The binary form of a version on ICU APIs is an array of 4 uint8_t.
Definition uversion.h:57
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:129