00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SORTKEY_H
00022 #define SORTKEY_H
00023
00024 #include "unicode/utypes.h"
00025
00031 #if !UCONFIG_NO_COLLATION
00032
00033 #include "unicode/uobject.h"
00034 #include "unicode/unistr.h"
00035 #include "unicode/coll.h"
00036
00037 U_NAMESPACE_BEGIN
00038
00039
00040 class RuleBasedCollator;
00041
00096 class U_I18N_API CollationKey : public UObject {
00097 public:
00105 CollationKey();
00106
00107
00114 CollationKey(const uint8_t* values,
00115 int32_t count);
00116
00122 CollationKey(const CollationKey& other);
00123
00128 virtual ~CollationKey();
00129
00135 const CollationKey& operator=(const CollationKey& other);
00136
00143 UBool operator==(const CollationKey& source) const;
00144
00151 UBool operator!=(const CollationKey& source) const;
00152
00153
00160 UBool isBogus(void) const;
00161
00171 const uint8_t* getByteArray(int32_t& count) const;
00172
00173 #ifdef U_USE_COLLATION_KEY_DEPRECATES
00174
00181 uint8_t* toByteArray(int32_t& count) const;
00182 #endif
00183
00193 Collator::EComparisonResult compareTo(const CollationKey& target) const;
00194
00205 UCollationResult compareTo(const CollationKey& target, UErrorCode &status) const;
00206
00227 int32_t hashCode(void) const;
00228
00233 virtual UClassID getDynamicClassID() const;
00234
00239 static UClassID U_EXPORT2 getStaticClassID();
00240
00241 private:
00249 void adopt(uint8_t *values, int32_t count);
00250
00251
00252
00253
00254
00261 CollationKey& ensureCapacity(int32_t newSize);
00266 CollationKey& setToBogus(void);
00271 CollationKey& reset(void);
00272
00276 friend class RuleBasedCollator;
00280 UBool fBogus;
00285 int32_t fCount;
00289 int32_t fCapacity;
00293 int32_t fHashCode;
00297 uint8_t* fBytes;
00298
00299 };
00300
00301 inline UBool
00302 CollationKey::operator!=(const CollationKey& other) const
00303 {
00304 return !(*this == other);
00305 }
00306
00307 inline UBool
00308 CollationKey::isBogus() const
00309 {
00310 return fBogus;
00311 }
00312
00313 inline const uint8_t*
00314 CollationKey::getByteArray(int32_t &count) const
00315 {
00316 count = fCount;
00317 return fBytes;
00318 }
00319
00320 U_NAMESPACE_END
00321
00322 #endif
00323
00324 #endif