|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ****************************************************************************** 00005 * Copyright (C) 1996-2016, International Business Machines Corporation and 00006 * others. All Rights Reserved. 00007 ****************************************************************************** 00008 */ 00009 00062 #ifndef TBLCOLL_H 00063 #define TBLCOLL_H 00064 00065 #include "unicode/utypes.h" 00066 00067 #if U_SHOW_CPLUSPLUS_API 00068 00069 #if !UCONFIG_NO_COLLATION 00070 00071 #include "unicode/coll.h" 00072 #include "unicode/locid.h" 00073 #include "unicode/uiter.h" 00074 #include "unicode/ucol.h" 00075 00076 U_NAMESPACE_BEGIN 00077 00078 struct CollationCacheEntry; 00079 struct CollationData; 00080 struct CollationSettings; 00081 struct CollationTailoring; 00085 class StringSearch; 00089 class CollationElementIterator; 00090 class CollationKey; 00091 class SortKeyByteSink; 00092 class UnicodeSet; 00093 class UnicodeString; 00094 class UVector64; 00095 00115 class U_I18N_API RuleBasedCollator final : public Collator { 00116 public: 00125 RuleBasedCollator(const UnicodeString& rules, UErrorCode& status); 00126 00136 RuleBasedCollator(const UnicodeString& rules, 00137 ECollationStrength collationStrength, 00138 UErrorCode& status); 00139 00149 RuleBasedCollator(const UnicodeString& rules, 00150 UColAttributeValue decompositionMode, 00151 UErrorCode& status); 00152 00163 RuleBasedCollator(const UnicodeString& rules, 00164 ECollationStrength collationStrength, 00165 UColAttributeValue decompositionMode, 00166 UErrorCode& status); 00167 00168 #ifndef U_HIDE_INTERNAL_API 00169 00173 RuleBasedCollator(const UnicodeString &rules, 00174 UParseError &parseError, UnicodeString &reason, 00175 UErrorCode &errorCode); 00176 #endif /* U_HIDE_INTERNAL_API */ 00177 00183 RuleBasedCollator(const RuleBasedCollator& other); 00184 00185 00203 RuleBasedCollator(const uint8_t *bin, int32_t length, 00204 const RuleBasedCollator *base, 00205 UErrorCode &status); 00206 00211 virtual ~RuleBasedCollator(); 00212 00218 RuleBasedCollator& operator=(const RuleBasedCollator& other); 00219 00226 virtual bool operator==(const Collator& other) const override; 00227 00233 virtual RuleBasedCollator* clone() const override; 00234 00245 virtual CollationElementIterator* createCollationElementIterator( 00246 const UnicodeString& source) const; 00247 00257 virtual CollationElementIterator* createCollationElementIterator( 00258 const CharacterIterator& source) const; 00259 00260 // Make deprecated versions of Collator::compare() visible. 00261 using Collator::compare; 00262 00275 virtual UCollationResult compare(const UnicodeString& source, 00276 const UnicodeString& target, 00277 UErrorCode &status) const override; 00278 00292 virtual UCollationResult compare(const UnicodeString& source, 00293 const UnicodeString& target, 00294 int32_t length, 00295 UErrorCode &status) const override; 00296 00313 virtual UCollationResult compare(const char16_t* source, int32_t sourceLength, 00314 const char16_t* target, int32_t targetLength, 00315 UErrorCode &status) const override; 00316 00328 virtual UCollationResult compare(UCharIterator &sIter, 00329 UCharIterator &tIter, 00330 UErrorCode &status) const override; 00331 00345 virtual UCollationResult compareUTF8(const StringPiece &source, 00346 const StringPiece &target, 00347 UErrorCode &status) const override; 00348 00363 virtual CollationKey& getCollationKey(const UnicodeString& source, 00364 CollationKey& key, 00365 UErrorCode& status) const override; 00366 00382 virtual CollationKey& getCollationKey(const char16_t *source, 00383 int32_t sourceLength, 00384 CollationKey& key, 00385 UErrorCode& status) const override; 00386 00392 virtual int32_t hashCode() const override; 00393 00394 #ifndef U_FORCE_HIDE_DEPRECATED_API 00395 00405 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const override; 00406 #endif // U_FORCE_HIDE_DEPRECATED_API 00407 00413 const UnicodeString& getRules() const; 00414 00420 virtual void getVersion(UVersionInfo info) const override; 00421 00422 #ifndef U_HIDE_DEPRECATED_API 00423 00439 int32_t getMaxExpansion(int32_t order) const; 00440 #endif /* U_HIDE_DEPRECATED_API */ 00441 00452 virtual UClassID getDynamicClassID(void) const override; 00453 00465 static UClassID U_EXPORT2 getStaticClassID(void); 00466 00467 #ifndef U_HIDE_DEPRECATED_API 00468 00478 uint8_t *cloneRuleData(int32_t &length, UErrorCode &status) const; 00479 #endif /* U_HIDE_DEPRECATED_API */ 00480 00491 int32_t cloneBinary(uint8_t *buffer, int32_t capacity, UErrorCode &status) const; 00492 00504 void getRules(UColRuleOption delta, UnicodeString &buffer) const; 00505 00513 virtual void setAttribute(UColAttribute attr, UColAttributeValue value, 00514 UErrorCode &status) override; 00515 00523 virtual UColAttributeValue getAttribute(UColAttribute attr, 00524 UErrorCode &status) const override; 00525 00542 virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode) override; 00543 00550 virtual UColReorderCode getMaxVariable() const override; 00551 00552 #ifndef U_FORCE_HIDE_DEPRECATED_API 00553 00569 virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) override; 00570 00586 virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) override; 00587 00599 virtual void setVariableTop(uint32_t varTop, UErrorCode &status) override; 00600 #endif // U_FORCE_HIDE_DEPRECATED_API 00601 00609 virtual uint32_t getVariableTop(UErrorCode &status) const override; 00610 00620 virtual UnicodeSet *getTailoredSet(UErrorCode &status) const override; 00621 00636 virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result, 00637 int32_t resultLength) const override; 00638 00655 virtual int32_t getSortKey(const char16_t *source, int32_t sourceLength, 00656 uint8_t *result, int32_t resultLength) const override; 00657 00671 virtual int32_t getReorderCodes(int32_t *dest, 00672 int32_t destCapacity, 00673 UErrorCode& status) const override; 00674 00686 virtual void setReorderCodes(const int32_t* reorderCodes, 00687 int32_t reorderCodesLength, 00688 UErrorCode& status) override; 00689 00694 virtual UCollationResult internalCompareUTF8( 00695 const char *left, int32_t leftLength, 00696 const char *right, int32_t rightLength, 00697 UErrorCode &errorCode) const override; 00698 00722 virtual int32_t internalGetShortDefinitionString(const char *locale, 00723 char *buffer, 00724 int32_t capacity, 00725 UErrorCode &status) const override; 00726 00731 virtual int32_t internalNextSortKeyPart( 00732 UCharIterator *iter, uint32_t state[2], 00733 uint8_t *dest, int32_t count, UErrorCode &errorCode) const override; 00734 00735 // Do not enclose the default constructor with #ifndef U_HIDE_INTERNAL_API 00740 RuleBasedCollator(); 00741 00742 #ifndef U_HIDE_INTERNAL_API 00743 00749 const char *internalGetLocaleID(ULocDataLocaleType type, UErrorCode &errorCode) const; 00750 00763 void internalGetContractionsAndExpansions( 00764 UnicodeSet *contractions, UnicodeSet *expansions, 00765 UBool addPrefixes, UErrorCode &errorCode) const; 00766 00772 void internalAddContractions(UChar32 c, UnicodeSet &set, UErrorCode &errorCode) const; 00773 00778 void internalBuildTailoring( 00779 const UnicodeString &rules, 00780 int32_t strength, 00781 UColAttributeValue decompositionMode, 00782 UParseError *outParseError, UnicodeString *outReason, 00783 UErrorCode &errorCode); 00784 00786 static inline RuleBasedCollator *rbcFromUCollator(UCollator *uc) { 00787 return dynamic_cast<RuleBasedCollator *>(fromUCollator(uc)); 00788 } 00790 static inline const RuleBasedCollator *rbcFromUCollator(const UCollator *uc) { 00791 return dynamic_cast<const RuleBasedCollator *>(fromUCollator(uc)); 00792 } 00793 00798 void internalGetCEs(const UnicodeString &str, UVector64 &ces, UErrorCode &errorCode) const; 00799 #endif // U_HIDE_INTERNAL_API 00800 00801 protected: 00809 virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale) override; 00810 00811 private: 00812 friend class CollationElementIterator; 00813 friend class Collator; 00814 00815 RuleBasedCollator(const CollationCacheEntry *entry); 00816 00822 enum Attributes { 00823 ATTR_VARIABLE_TOP = UCOL_ATTRIBUTE_COUNT, 00824 ATTR_LIMIT 00825 }; 00826 00827 void adoptTailoring(CollationTailoring *t, UErrorCode &errorCode); 00828 00829 // Both lengths must be <0 or else both must be >=0. 00830 UCollationResult doCompare(const char16_t *left, int32_t leftLength, 00831 const char16_t *right, int32_t rightLength, 00832 UErrorCode &errorCode) const; 00833 UCollationResult doCompare(const uint8_t *left, int32_t leftLength, 00834 const uint8_t *right, int32_t rightLength, 00835 UErrorCode &errorCode) const; 00836 00837 void writeSortKey(const char16_t *s, int32_t length, 00838 SortKeyByteSink &sink, UErrorCode &errorCode) const; 00839 00840 void writeIdenticalLevel(const char16_t *s, const char16_t *limit, 00841 SortKeyByteSink &sink, UErrorCode &errorCode) const; 00842 00843 const CollationSettings &getDefaultSettings() const; 00844 00845 void setAttributeDefault(int32_t attribute) { 00846 explicitlySetAttributes &= ~((uint32_t)1 << attribute); 00847 } 00848 void setAttributeExplicitly(int32_t attribute) { 00849 explicitlySetAttributes |= (uint32_t)1 << attribute; 00850 } 00851 UBool attributeHasBeenSetExplicitly(int32_t attribute) const { 00852 // assert(0 <= attribute < ATTR_LIMIT); 00853 return (UBool)((explicitlySetAttributes & ((uint32_t)1 << attribute)) != 0); 00854 } 00855 00863 UBool isUnsafe(UChar32 c) const; 00864 00865 static void U_CALLCONV computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); 00866 UBool initMaxExpansions(UErrorCode &errorCode) const; 00867 00868 void setFastLatinOptions(CollationSettings &ownedSettings) const; 00869 00870 const CollationData *data; 00871 const CollationSettings *settings; // reference-counted 00872 const CollationTailoring *tailoring; // alias of cacheEntry->tailoring 00873 const CollationCacheEntry *cacheEntry; // reference-counted 00874 Locale validLocale; 00875 uint32_t explicitlySetAttributes; 00876 00877 UBool actualLocaleIsSameAsValid; 00878 }; 00879 00880 U_NAMESPACE_END 00881 00882 #endif // !UCONFIG_NO_COLLATION 00883 00884 #endif /* U_SHOW_CPLUSPLUS_API */ 00885 00886 #endif // TBLCOLL_H
1.7.6.1