ICU 62.1 62.1
sortkey.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4 *****************************************************************************
5 * Copyright (C) 1996-2014, International Business Machines Corporation and others.
6 * All Rights Reserved.
7 *****************************************************************************
8 *
9 * File sortkey.h
10 *
11 * Created by: Helena Shih
12 *
13 * Modification History:
14 *
15 * Date Name Description
16 *
17 * 6/20/97 helena Java class name change.
18 * 8/18/97 helena Added internal API documentation.
19 * 6/26/98 erm Changed to use byte arrays and memcmp.
20 *****************************************************************************
21 */
22
23#ifndef SORTKEY_H
24#define SORTKEY_H
25
26#include "unicode/utypes.h"
27
33#if !UCONFIG_NO_COLLATION
34
35#include "unicode/uobject.h"
36#include "unicode/unistr.h"
37#include "unicode/coll.h"
38
40
41/* forward declaration */
42class RuleBasedCollator;
43class CollationKeyByteSink;
44
100public:
109
110
117 CollationKey(const uint8_t* values,
118 int32_t count);
119
126
131 virtual ~CollationKey();
132
139
146 UBool operator==(const CollationKey& source) const;
147
154 UBool operator!=(const CollationKey& source) const;
155
156
163 UBool isBogus(void) const;
164
174 const uint8_t* getByteArray(int32_t& count) const;
175
176#ifdef U_USE_COLLATION_KEY_DEPRECATES
184 uint8_t* toByteArray(int32_t& count) const;
185#endif
186
187#ifndef U_HIDE_DEPRECATED_API
198#endif /* U_HIDE_DEPRECATED_API */
199
211
232 int32_t hashCode(void) const;
233
239
245
246private:
252 uint8_t *reallocate(int32_t newCapacity, int32_t length);
256 void setLength(int32_t newLength);
257
258 uint8_t *getBytes() {
259 return (fFlagAndLength >= 0) ? fUnion.fStackBuffer : fUnion.fFields.fBytes;
260 }
261 const uint8_t *getBytes() const {
262 return (fFlagAndLength >= 0) ? fUnion.fStackBuffer : fUnion.fFields.fBytes;
263 }
264 int32_t getCapacity() const {
265 return (fFlagAndLength >= 0) ? (int32_t)sizeof(fUnion) : fUnion.fFields.fCapacity;
266 }
267 int32_t getLength() const { return fFlagAndLength & 0x7fffffff; }
268
273 CollationKey& setToBogus(void);
278 CollationKey& reset(void);
279
283 friend class RuleBasedCollator;
284 friend class CollationKeyByteSink;
285
286 // Class fields. sizeof(CollationKey) is intended to be 48 bytes
287 // on a machine with 64-bit pointers.
288 // We use a union to maximize the size of the internal buffer,
289 // similar to UnicodeString but not as tight and complex.
290
291 // (implicit) *vtable;
297 int32_t fFlagAndLength;
302 mutable int32_t fHashCode;
307 union StackBufferOrFields {
309 uint8_t fStackBuffer[32];
310 struct {
311 uint8_t *fBytes;
312 int32_t fCapacity;
313 } fFields;
314 } fUnion;
315};
316
317inline UBool
318CollationKey::operator!=(const CollationKey& other) const
319{
320 return !(*this == other);
321}
322
323inline UBool
324CollationKey::isBogus() const
325{
326 return fHashCode == 2; // kBogusHashCode
327}
328
329inline const uint8_t*
330CollationKey::getByteArray(int32_t &count) const
331{
332 count = getLength();
333 return getBytes();
334}
335
337
338#endif /* #if !UCONFIG_NO_COLLATION */
339
340#endif
Collation keys are generated by the Collator class.
Definition sortkey.h:99
virtual ~CollationKey()
Sort key destructor.
const CollationKey & operator=(const CollationKey &other)
Assignment operator.
CollationKey(const CollationKey &other)
Copy constructor.
UBool operator==(const CollationKey &source) const
Compare if two collation keys are the same.
virtual UClassID getDynamicClassID() const
ICU "poor man's RTTI", returns a UClassID for the actual class.
UCollationResult compareTo(const CollationKey &target, UErrorCode &status) const
Convenience method which does a string(bit-wise) comparison of the two collation keys.
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
CollationKey(const uint8_t *values, int32_t count)
Creates a collation key based on the collation key values.
Collator::EComparisonResult compareTo(const CollationKey &target) const
Convenience method which does a string(bit-wise) comparison of the two collation keys.
CollationKey()
This creates an empty collation key based on the null string.
int32_t hashCode(void) const
Creates an integer that is unique to the collation key.
EComparisonResult
LESS is returned if source string is compared to be less than target string in the compare() method.
Definition coll.h:218
"Smart pointer" base class; do not use directly: use LocalPointer etc.
The RuleBasedCollator class provides the implementation of Collator, using data-driven tables.
Definition tblcoll.h:113
UObject is the common ICU "boilerplate" class.
Definition uobject.h:223
C++ API: Collation Service.
UBool operator!=(const StringPiece &x, const StringPiece &y)
Global operator != for StringPiece.
UCollationResult
UCOL_LESS is returned if source string is compared to be less than target string in the ucol_strcoll(...
Definition ucol.h:73
int8_t UBool
The ICU boolean type.
Definition umachine.h:236
C++ API: Unicode String.
C++ API: Common ICU base class UObject.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:93
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:396
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:360
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:138
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:137