00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SORTKEY_H
00023 #define SORTKEY_H
00024
00025 #include "unicode/utypes.h"
00026
00027 #if !UCONFIG_NO_COLLATION
00028
00029 #include "unicode/uobject.h"
00030 #include "unicode/unistr.h"
00031 #include "unicode/coll.h"
00032
00033 U_NAMESPACE_BEGIN
00034
00035
00036 class RuleBasedCollator;
00037
00090 class U_I18N_API CollationKey : public UObject {
00091 public:
00099 CollationKey();
00100
00101
00109 CollationKey(const uint8_t* values,
00110 int32_t count);
00111
00117 CollationKey(const CollationKey& other);
00118
00123 ~CollationKey();
00124
00130 const CollationKey& operator=(const CollationKey& other);
00131
00138 UBool operator==(const CollationKey& source) const;
00139
00146 UBool operator!=(const CollationKey& source) const;
00147
00148
00155 UBool isBogus(void) const;
00156
00166 const uint8_t* getByteArray(int32_t& count) const;
00167
00168 #ifdef U_USE_COLLATION_KEY_DEPRECATES
00169
00176 uint8_t* toByteArray(int32_t& count) const;
00177 #endif
00178
00188 Collator::EComparisonResult compareTo(const CollationKey& target) const;
00189
00200 UCollationResult compareTo(const CollationKey& target, UErrorCode &status) const;
00201
00222 int32_t hashCode(void) const;
00223
00229 virtual inline UClassID getDynamicClassID() const;
00230
00236 static inline UClassID getStaticClassID();
00237
00238 private:
00246 void adopt(uint8_t *values, int32_t count);
00247
00248
00249
00250
00251
00258 CollationKey& ensureCapacity(int32_t newSize);
00263 CollationKey& setToBogus(void);
00268 CollationKey& reset(void);
00269
00273 friend class RuleBasedCollator;
00277 UBool fBogus;
00282 int32_t fCount;
00286 int32_t fCapacity;
00290 int32_t fHashCode;
00294 uint8_t* fBytes;
00295
00300 static const char fgClassID;
00301 };
00302
00303 inline UClassID
00304 CollationKey::getStaticClassID()
00305 { return (UClassID)&fgClassID; }
00306
00307 inline UClassID
00308 CollationKey::getDynamicClassID() const
00309 { return CollationKey::getStaticClassID(); }
00310
00311 inline UBool
00312 CollationKey::operator!=(const CollationKey& other) const
00313 {
00314 return !(*this == other);
00315 }
00316
00317 inline UBool
00318 CollationKey::isBogus() const
00319 {
00320 return fBogus;
00321 }
00322
00323 inline const uint8_t*
00324 CollationKey::getByteArray(int32_t &count) const
00325 {
00326 count = fCount;
00327 return fBytes;
00328 }
00329
00330 U_NAMESPACE_END
00331
00332 #endif
00333
00334 #endif