#include <sortkey.h>
Inheritance diagram for CollationKey::
Public Methods | |
CollationKey () | |
This creates an empty collation key based on the null string. More... | |
CollationKey (const uint8_t *values, int32_t count) | |
Creates a collation key based on the collation key values. More... | |
CollationKey (const CollationKey &other) | |
Copy constructor. More... | |
~CollationKey () | |
Sort key destructor. More... | |
const CollationKey & | operator= (const CollationKey &other) |
Assignment operator. More... | |
UBool | operator== (const CollationKey &source) const |
Compare if two collation keys are the same. More... | |
UBool | operator!= (const CollationKey &source) const |
Compare if two collation keys are not the same. More... | |
UBool | isBogus (void) const |
Test to see if the key is in an invalid state. More... | |
const uint8_t * | getByteArray (int32_t &count) const |
Returns a pointer to the collation key values. More... | |
Collator::EComparisonResult | compareTo (const CollationKey &target) const |
Convenience method which does a string(bit-wise) comparison of the two collation keys. More... | |
UCollationResult | compareTo (const CollationKey &target, UErrorCode &status) const |
Convenience method which does a string(bit-wise) comparison of the two collation keys. More... | |
int32_t | hashCode (void) const |
Creates an integer that is unique to the collation key. More... | |
virtual UClassID | getDynamicClassID () const |
ICU "poor man's RTTI", returns a UClassID for the actual class. More... | |
Static Public Methods | |
UClassID | getStaticClassID () |
ICU "poor man's RTTI", returns a UClassID for this class. More... | |
Private Methods | |
void | adopt (uint8_t *values, int32_t count) |
Returns an array of the collation key values as 16-bit integers. More... | |
CollationKey & | ensureCapacity (int32_t newSize) |
If this CollationKey has capacity less than newSize, its internal capacity will be increased to newSize. More... | |
CollationKey & | setToBogus (void) |
Set the CollationKey to a "bogus" or invalid state. More... | |
CollationKey & | reset (void) |
Resets this CollationKey to an empty state. More... | |
Private Attributes | |
UBool | fBogus |
Bogus status. More... | |
int32_t | fCount |
Size of fBytes used to store the sortkey. More... | |
int32_t | fCapacity |
Full size of the fBytes. More... | |
int32_t | fHashCode |
Unique hash value of this CollationKey. More... | |
uint8_t * | fBytes |
Array to store the sortkey. More... | |
Friends | |
class | RuleBasedCollator |
Allow private access to RuleBasedCollator. More... |
Use the CollationKey objects instead of Collator to compare strings multiple times. A CollationKey preprocesses the comparison information from the Collator object to make the comparison faster. If you are not going to comparing strings multiple times, then using the Collator object is generally faster, since it only processes as much of the string as needed to make a comparison.
For example (with strength == tertiary)
When comparing "Abernathy" to "Baggins-Smythworthy", Collator only needs to process a couple of characters, while a comparison with CollationKeys will process all of the characters. On the other hand, if you are doing a sort of a number of fields, it is much faster to use CollationKeys, since you will be comparing strings multiple times.
Typical use of CollationKeys are in databases, where you store a CollationKey in a hidden field, and use it for sorting or indexing.
Example of use:
UErrorCode success = U_ZERO_ERROR; Collator* myCollator = Collator::createInstance(success); CollationKey* keys = new CollationKey [3]; myCollator->getCollationKey("Tom", keys[0], success ); myCollator->getCollationKey("Dick", keys[1], success ); myCollator->getCollationKey("Harry", keys[2], success ); // Inside body of sort routine, compare keys this way: CollationKey tmp; if(keys[0].compareTo( keys[1] ) > 0 ) { tmp = keys[0]; keys[0] = keys[1]; keys[1] = tmp; } //...
Because Collator::compare()'s algorithm is complex, it is faster to sort long lists of words by retrieving collation keys with Collator::getCollationKey(). You can then cache the collation keys and compare them using CollationKey::compareTo().
Note: Collator
s with different Locale, CollationStrength and DecompositionMode settings will return different CollationKeys for the same set of strings. Locales have specific collation rules, and the way in which secondary and tertiary differences are taken into account, for example, will result in different CollationKeys for same strings.
Definition at line 91 of file sortkey.h.
|
This creates an empty collation key based on the null string. An empty collation key contains no sorting information. When comparing two empty collation keys, the result is Collator::EQUAL. Comparing empty collation key with non-empty collation key is always Collator::LESS.
|
|
Creates a collation key based on the collation key values.
|
|
Copy constructor.
|
|
Sort key destructor.
|
|
Returns an array of the collation key values as 16-bit integers. The caller owns the storage and must delete it.
|
|
Convenience method which does a string(bit-wise) comparison of the two collation keys.
|
|
Convenience method which does a string(bit-wise) comparison of the two collation keys.
|
|
If this CollationKey has capacity less than newSize, its internal capacity will be increased to newSize.
|
|
Returns a pointer to the collation key values. The storage is owned by the collation key and the pointer will become invalid if the key is deleted.
|
|
ICU "poor man's RTTI", returns a UClassID for the actual class.
Reimplemented from UObject. |
|
ICU "poor man's RTTI", returns a UClassID for this class.
|
|
Creates an integer that is unique to the collation key. NOTE: this is not the same as String.hashCode. Example of use: . UErrorCode status = U_ZERO_ERROR; . Collator *myCollation = Collator::createInstance(Locale::US, status); . if (U_FAILURE(status)) return; . CollationKey key1, key2; . UErrorCode status1 = U_ZERO_ERROR, status2 = U_ZERO_ERROR; . myCollation->getCollationKey("abc", key1, status1); . if (U_FAILURE(status1)) { delete myCollation; return; } . myCollation->getCollationKey("ABC", key2, status2); . if (U_FAILURE(status2)) { delete myCollation; return; } . // key1.hashCode() != key2.hashCode()
|
|
Test to see if the key is in an invalid state. The key will be in an invalid state if it couldn't allocate memory for some operation.
|
|
Compare if two collation keys are not the same.
|
|
Assignment operator.
|
|
Compare if two collation keys are the same.
|
|
Resets this CollationKey to an empty state.
|
|
Set the CollationKey to a "bogus" or invalid state.
|
|
Allow private access to RuleBasedCollator.
|
|
Bogus status.
|
|
Array to store the sortkey.
|
|
Full size of the fBytes.
|
|
Size of fBytes used to store the sortkey. i.e. up till the null-termination. |
|
Unique hash value of this CollationKey.
|