Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

tblcoll.h

Go to the documentation of this file.
00001 /*
00002 ******************************************************************************
00003 * Copyright (C) 1996-2001, International Business Machines Corporation and
00004 * others. All Rights Reserved.
00005 ******************************************************************************
00006 */
00007 
00054 #ifndef TBLCOLL_H
00055 #define TBLCOLL_H
00056 
00057 #include "unicode/coll.h"
00058 #include "unicode/sortkey.h"
00059 #include "unicode/normlzr.h"
00060 
00061 class CollationElementIterator;
00062 
00355 class U_I18N_API RuleBasedCollator : public Collator
00356 {
00357 public:
00358 
00359   // constructor -------------------------------------------------------------
00360 
00369         RuleBasedCollator(const UnicodeString& rules, UErrorCode& status);
00370 
00380   RuleBasedCollator(const UnicodeString& rules,
00381                        ECollationStrength collationStrength,
00382                        UErrorCode& status);
00383 
00393   RuleBasedCollator(const UnicodeString& rules,
00394                     Normalizer::EMode decompositionMode,
00395                     UErrorCode& status);
00396 
00407   RuleBasedCollator(const UnicodeString& rules,
00408                     ECollationStrength collationStrength,
00409                     Normalizer::EMode decompositionMode,
00410                     UErrorCode& status);
00411 
00417         RuleBasedCollator(const RuleBasedCollator& other);
00418 
00419   // destructor --------------------------------------------------------------
00420 
00424         virtual ~RuleBasedCollator();
00425 
00426   // public methods ----------------------------------------------------------
00427 
00432         RuleBasedCollator& operator=(const RuleBasedCollator& other);
00433 
00439   virtual UBool operator==(const Collator& other) const;
00440 
00446   virtual UBool operator!=(const Collator& other) const;
00447 
00453   virtual Collator* clone(void) const;
00454 
00464         virtual CollationElementIterator* createCollationElementIterator(
00465                                            const UnicodeString& source) const;
00466 
00475   virtual CollationElementIterator* createCollationElementIterator(
00476                                        const CharacterIterator& source) const;
00477 
00489   virtual EComparisonResult compare(const UnicodeString& source,
00490                                     const UnicodeString& target) const;
00491 
00492 
00505   virtual EComparisonResult compare(const UnicodeString& source,
00506                                     const UnicodeString&  target,
00507                                     int32_t length) const;
00508 
00540   virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00541                                     const UChar* target, int32_t targetLength)
00542                                     const;
00543 
00555   virtual CollationKey& getCollationKey(const UnicodeString& source,
00556                                         CollationKey& key,
00557                                         UErrorCode& status) const;
00558 
00570   virtual CollationKey& getCollationKey(const UChar *source,
00571                                         int32_t sourceLength,
00572                                         CollationKey& key,
00573                                         UErrorCode& status) const;
00574 
00579   virtual int32_t hashCode(void) const;
00580 
00586   const UnicodeString& getRules(void) const;
00587 
00597         int32_t getMaxExpansion(int32_t order) const;
00598 
00608   virtual UClassID getDynamicClassID(void) const
00609   {
00610     return RuleBasedCollator::getStaticClassID();
00611   }
00612 
00623   static UClassID getStaticClassID(void)
00624   {
00625     return (UClassID)&fgClassID;
00626   }
00627 
00635   uint8_t *cloneRuleData(int32_t &length, UErrorCode &status);
00636 
00643         UnicodeString getRules(UColRuleOption delta);
00644 
00651   virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00652                             UErrorCode &status);
00653 
00660   virtual UColAttributeValue getAttribute(UColAttribute attr,
00661                                           UErrorCode &status);
00662 
00667   virtual Collator* safeClone(void);
00668 
00680   virtual EComparisonResult compare(ForwardCharacterIterator &source,
00681                                                                    ForwardCharacterIterator &target);
00682 
00692   virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result,
00693                                                                  int32_t resultLength) const;
00694 
00706   virtual int32_t getSortKey(const UChar *source, int32_t sourceLength,
00707                                                                  uint8_t *result, int32_t resultLength) const;
00708 
00718   virtual ECollationStrength getStrength(void) const;
00719 
00738   virtual void setStrength(ECollationStrength newStrength);
00739 
00746   virtual void setDecomposition(Normalizer::EMode  mode);
00747 
00753   virtual Normalizer::EMode getDecomposition(void) const;
00754 
00755 private:
00756 
00757   // private static constants -----------------------------------------------
00758 
00759   static const int32_t UNMAPPED;
00760   static const int32_t CHARINDEX;  // need look up in .commit()
00761   static const int32_t EXPANDCHARINDEX; // Expand index follows
00762   static const int32_t CONTRACTCHARINDEX;  // contract indexes follow
00763 
00764   static const int32_t PRIMARYORDERINCREMENT;
00765   static const int32_t SECONDARYORDERINCREMENT;
00766   static const int32_t TERTIARYORDERINCREMENT;
00767   static const int32_t PRIMARYORDERMASK;
00768   static const int32_t SECONDARYORDERMASK;
00769   static const int32_t TERTIARYORDERMASK;
00770   static const int32_t IGNORABLEMASK;
00771   static const int32_t PRIMARYDIFFERENCEONLY;
00772   static const int32_t SECONDARYDIFFERENCEONLY;
00773   static const int32_t PRIMARYORDERSHIFT;
00774   static const int32_t SECONDARYORDERSHIFT;
00775 
00776   static const int32_t COLELEMENTSTART;
00777   static const int32_t PRIMARYLOWZEROMASK;
00778   static const int32_t RESETSECONDARYTERTIARY;
00779   static const int32_t RESETTERTIARY;
00780 
00781   static const int32_t PRIMIGNORABLE;
00782 
00783   static const int16_t FILEID;
00784   static const char    *kFilenameSuffix;
00785 
00786   // private static variables -----------------------------------------------
00787 
00791   static char fgClassID;
00792 
00793   // private data members ---------------------------------------------------
00794 
00795   UBool dataIsOwned;
00796 
00801   UCollator *ucollator;
00802 
00806   UnicodeString *urulestring;
00807 
00808   // friend classes --------------------------------------------------------
00809 
00813   friend class RuleBasedCollatorStreamer;
00814 
00818   friend class CollationElementIterator;
00819 
00824   friend class Collator;
00825 
00826   // private constructors --------------------------------------------------
00827 
00831   RuleBasedCollator();
00832 
00837   RuleBasedCollator(UCollator *collator, UnicodeString *rule);
00838 
00849   RuleBasedCollator(const Locale& desiredLocale, UErrorCode& status);
00850 
00851   // private methods -------------------------------------------------------
00852 
00858   void setUCollator(const Locale& locale, UErrorCode& status);
00859 
00865   void setUCollator(const char* locale, UErrorCode& status);
00866 
00872   void setUCollator(UCollator *collator);
00873 
00879   Collator::EComparisonResult getEComparisonResult(
00880                                           const UCollationResult &result) const;
00881 
00887   Collator::ECollationStrength getECollationStrength(
00888                                       const UCollationStrength &strength) const;
00889 
00895   UCollationStrength getUCollationStrength(
00896     const Collator::ECollationStrength &strength) const;
00897 };
00898 
00899 // inline method implementation ---------------------------------------------
00900 
00901 inline UBool RuleBasedCollator::operator!=(const Collator& other) const
00902 {
00903   return !(*this == other);
00904 }
00905 
00906 inline void RuleBasedCollator::setUCollator(const char *locale,
00907                                                UErrorCode &status)
00908 {
00909   if (U_FAILURE(status))
00910     return;
00911   if (ucollator && dataIsOwned)
00912     ucol_close(ucollator);
00913   ucollator = ucol_open(locale, &status);
00914 }
00915 
00916 inline void RuleBasedCollator::setUCollator(const Locale &locale,
00917                                                UErrorCode &status)
00918 {
00919   setUCollator(locale.getName(), status);
00920 }
00921 
00922 inline void RuleBasedCollator::setUCollator(UCollator *collator)
00923 {
00924   if (ucollator && dataIsOwned)
00925     ucol_close(ucollator);
00926   ucollator = collator;
00927 }
00928 
00929 inline Collator::EComparisonResult RuleBasedCollator::getEComparisonResult(
00930                                            const UCollationResult &result) const
00931 {
00932   switch (result)
00933   {
00934   case UCOL_LESS :
00935     return Collator::LESS;
00936   case UCOL_EQUAL :
00937     return Collator::EQUAL;
00938   default :
00939     return Collator::GREATER;
00940   }
00941 }
00942 
00943 inline Collator::ECollationStrength RuleBasedCollator::getECollationStrength(
00944                                        const UCollationStrength &strength) const
00945 {
00946   switch (strength)
00947   {
00948   case UCOL_PRIMARY :
00949     return Collator::PRIMARY;
00950   case UCOL_SECONDARY :
00951     return Collator::SECONDARY;
00952   case UCOL_TERTIARY :
00953     return Collator::TERTIARY;
00954   default :
00955     return Collator::IDENTICAL;
00956   }
00957 }
00958 
00959 inline UCollationStrength RuleBasedCollator::getUCollationStrength(
00960                              const Collator::ECollationStrength &strength) const
00961 {
00962   switch (strength)
00963   {
00964   case Collator::PRIMARY :
00965     return UCOL_PRIMARY;
00966   case Collator::SECONDARY :
00967     return UCOL_SECONDARY;
00968   case Collator::TERTIARY :
00969     return UCOL_TERTIARY;
00970   default :
00971     return UCOL_IDENTICAL;
00972   }
00973 }
00974 
00975 #endif

Generated at Thu Mar 22 16:12:38 2001 for ICU 1.8 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000