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

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 U_NAMESPACE_BEGIN
00062 
00063 class RuleBasedCollatorStreamer;
00064 class StringSearch;
00065 class CollationElementIterator;
00066 
00094 class U_I18N_API RuleBasedCollator : public Collator
00095 {
00096 public:
00097 
00098   // constructor -------------------------------------------------------------
00099 
00109     RuleBasedCollator(const UnicodeString& rules, UErrorCode& status);
00110 
00121   RuleBasedCollator(const UnicodeString& rules,
00122                        ECollationStrength collationStrength,
00123                        UErrorCode& status);
00124 
00135   RuleBasedCollator(const UnicodeString& rules,
00136                     UColAttributeValue decompositionMode,
00137                     UErrorCode& status);
00138 
00150   RuleBasedCollator(const UnicodeString& rules,
00151                     ECollationStrength collationStrength,
00152                     UColAttributeValue decompositionMode,
00153                     UErrorCode& status);
00154 
00161     RuleBasedCollator(const RuleBasedCollator& other);
00162 
00163   // destructor --------------------------------------------------------------
00164 
00169     virtual ~RuleBasedCollator();
00170 
00171   // public methods ----------------------------------------------------------
00172 
00178     RuleBasedCollator& operator=(const RuleBasedCollator& other);
00179 
00186   virtual UBool operator==(const Collator& other) const;
00187 
00194   virtual UBool operator!=(const Collator& other) const;
00195 
00202   virtual Collator* clone(void) const;
00203 
00214     virtual CollationElementIterator* createCollationElementIterator(
00215                                            const UnicodeString& source) const;
00216 
00226   virtual CollationElementIterator* createCollationElementIterator(
00227                                        const CharacterIterator& source) const;
00228 
00241   virtual EComparisonResult compare(const UnicodeString& source,
00242                                     const UnicodeString& target) const;
00243 
00244 
00258   virtual EComparisonResult compare(const UnicodeString& source,
00259                                     const UnicodeString&  target,
00260                                     int32_t length) const;
00261 
00294   virtual EComparisonResult compare(const UChar* source, int32_t sourceLength,
00295                                     const UChar* target, int32_t targetLength)
00296                                     const;
00297 
00310   virtual CollationKey& getCollationKey(const UnicodeString& source,
00311                                         CollationKey& key,
00312                                         UErrorCode& status) const;
00313 
00326   virtual CollationKey& getCollationKey(const UChar *source,
00327                                         int32_t sourceLength,
00328                                         CollationKey& key,
00329                                         UErrorCode& status) const;
00330 
00336   virtual int32_t hashCode(void) const;
00337 
00344   const UnicodeString& getRules(void) const;
00345 
00356     int32_t getMaxExpansion(int32_t order) const;
00357 
00368   virtual UClassID getDynamicClassID(void) const
00369   {
00370     return RuleBasedCollator::getStaticClassID();
00371   }
00372 
00384   static UClassID getStaticClassID(void)
00385   {
00386     return (UClassID)&fgClassID;
00387   }
00388 
00397   uint8_t *cloneRuleData(int32_t &length, UErrorCode &status);
00398 
00406     UnicodeString getRules(UColRuleOption delta);
00407 
00415   virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
00416                             UErrorCode &status);
00417 
00425   virtual UColAttributeValue getAttribute(UColAttribute attr,
00426                                           UErrorCode &status);
00427 
00438   virtual uint32_t setVariableTop(const UChar *varTop, int32_t len, UErrorCode &status);
00439 
00449   virtual uint32_t setVariableTop(const UnicodeString varTop, UErrorCode &status);
00450 
00458   virtual void setVariableTop(const uint32_t varTop, UErrorCode &status);
00459 
00466   virtual uint32_t getVariableTop(UErrorCode &status) const;
00467 
00473   virtual Collator* safeClone(void);
00474 
00484   virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result,
00485                              int32_t resultLength) const;
00486 
00499   virtual int32_t getSortKey(const UChar *source, int32_t sourceLength,
00500                              uint8_t *result, int32_t resultLength) const;
00501 
00512   virtual ECollationStrength getStrength(void) const;
00513 
00520   virtual void setStrength(ECollationStrength newStrength);
00521 
00522   // deprecated functions ---------------------------------------------------
00523 
00534   RuleBasedCollator(const UnicodeString& rules,
00535                     Normalizer::EMode decompositionMode,
00536                     UErrorCode& status);
00537 
00549   RuleBasedCollator(const UnicodeString& rules,
00550                     ECollationStrength collationStrength,
00551                     Normalizer::EMode decompositionMode,
00552                     UErrorCode& status);
00553 
00561   virtual void setDecomposition(Normalizer::EMode  mode);
00562 
00569   virtual Normalizer::EMode getDecomposition(void) const;
00570 
00571 private:
00572 
00573   // private static constants -----------------------------------------------
00574 
00575   static const int32_t UNMAPPED;
00576   static const int32_t CHARINDEX;  // need look up in .commit()
00577   static const int32_t EXPANDCHARINDEX; // Expand index follows
00578   static const int32_t CONTRACTCHARINDEX;  // contract indexes follow
00579 
00580   static const int32_t PRIMARYORDERINCREMENT;
00581   static const int32_t SECONDARYORDERINCREMENT;
00582   static const int32_t TERTIARYORDERINCREMENT;
00583   static const int32_t PRIMARYORDERMASK;
00584   static const int32_t SECONDARYORDERMASK;
00585   static const int32_t TERTIARYORDERMASK;
00586   static const int32_t IGNORABLEMASK;
00587   static const int32_t PRIMARYDIFFERENCEONLY;
00588   static const int32_t SECONDARYDIFFERENCEONLY;
00589   static const int32_t PRIMARYORDERSHIFT;
00590   static const int32_t SECONDARYORDERSHIFT;
00591 
00592   static const int32_t COLELEMENTSTART;
00593   static const int32_t PRIMARYLOWZEROMASK;
00594   static const int32_t RESETSECONDARYTERTIARY;
00595   static const int32_t RESETTERTIARY;
00596 
00597   static const int32_t PRIMIGNORABLE;
00598 
00599   static const int16_t FILEID;
00600   static const char    kFilenameSuffix[];
00601 
00602   // private static variables -----------------------------------------------
00603 
00607   static const char fgClassID;
00608 
00609   // private data members ---------------------------------------------------
00610 
00611   UBool dataIsOwned;
00612 
00617   UCollator *ucollator;
00618 
00622   UnicodeString *urulestring;
00623 
00624   // friend classes --------------------------------------------------------
00625 
00629   friend class RuleBasedCollatorStreamer;
00630 
00634   friend class CollationElementIterator;
00635 
00640   friend class Collator;
00641 
00645   friend class StringSearch;
00646 
00647   // private constructors --------------------------------------------------
00648 
00652   RuleBasedCollator();
00653 
00658   RuleBasedCollator(UCollator *collator, UnicodeString *rule);
00659 
00670   RuleBasedCollator(const Locale& desiredLocale, UErrorCode& status);
00671 
00673   void
00674   construct(const UnicodeString& rules,
00675             UColAttributeValue collationStrength,
00676             UColAttributeValue decompositionMode,
00677             UErrorCode& status);
00678 
00679   // private methods -------------------------------------------------------
00680 
00686   void setUCollator(const Locale& locale, UErrorCode& status);
00687 
00693   void setUCollator(const char* locale, UErrorCode& status);
00694 
00699   void setUCollator(UCollator *collator);
00700 
00708   void setUCollator(UCollator *collator, UnicodeString *rules);
00709 
00714   const UCollator * getUCollator();
00715 
00721   Collator::EComparisonResult getEComparisonResult(
00722                                           const UCollationResult &result) const;
00723 
00729   Collator::ECollationStrength getECollationStrength(
00730                                       const UCollationStrength &strength) const;
00731 
00737   UCollationStrength getUCollationStrength(
00738     const Collator::ECollationStrength &strength) const;
00739 };
00740 
00741 // inline method implementation ---------------------------------------------
00742 
00743 inline UBool RuleBasedCollator::operator!=(const Collator& other) const
00744 {
00745   return !(*this == other);
00746 }
00747 
00748 inline void RuleBasedCollator::setUCollator(const char *locale,
00749                                                UErrorCode &status)
00750 {
00751   if (U_FAILURE(status))
00752     return;
00753   if (ucollator && dataIsOwned)
00754     ucol_close(ucollator);
00755   ucollator = ucol_open(locale, &status);
00756 }
00757 
00758 inline void RuleBasedCollator::setUCollator(const Locale &locale,
00759                                                UErrorCode &status)
00760 {
00761   setUCollator(locale.getName(), status);
00762 }
00763 
00764 inline void RuleBasedCollator::setUCollator(UCollator *collator)
00765 {
00766   if (ucollator && dataIsOwned) {
00767     ucol_close(ucollator);
00768   }
00769   ucollator = collator;
00770 }
00771 
00772 inline void RuleBasedCollator::setUCollator(UCollator     *collator, 
00773                                             UnicodeString *rules)
00774 {
00775     if (ucollator && dataIsOwned) {
00776         ucol_close(ucollator);
00777         delete urulestring;
00778     }
00779     ucollator   = collator;
00780     urulestring = rules;
00781     dataIsOwned = FALSE;
00782 }
00783 
00784 inline const UCollator * RuleBasedCollator::getUCollator()
00785 {
00786     return ucollator;
00787 }
00788 
00789 inline Collator::EComparisonResult RuleBasedCollator::getEComparisonResult(
00790                                            const UCollationResult &result) const
00791 {
00792   switch (result)
00793   {
00794   case UCOL_LESS :
00795     return Collator::LESS;
00796   case UCOL_EQUAL :
00797     return Collator::EQUAL;
00798   default :
00799     return Collator::GREATER;
00800   }
00801 }
00802 
00803 inline Collator::ECollationStrength RuleBasedCollator::getECollationStrength(
00804                                        const UCollationStrength &strength) const
00805 {
00806   switch (strength)
00807   {
00808   case UCOL_PRIMARY :
00809     return Collator::PRIMARY;
00810   case UCOL_SECONDARY :
00811     return Collator::SECONDARY;
00812   case UCOL_TERTIARY :
00813     return Collator::TERTIARY;
00814   case UCOL_QUATERNARY :
00815     return Collator::QUATERNARY;   
00816   default :
00817     return Collator::IDENTICAL;
00818   }
00819 }
00820 
00821 inline UCollationStrength RuleBasedCollator::getUCollationStrength(
00822                              const Collator::ECollationStrength &strength) const
00823 {
00824   switch (strength)
00825   {
00826   case Collator::PRIMARY :
00827     return UCOL_PRIMARY;
00828   case Collator::SECONDARY :
00829     return UCOL_SECONDARY;
00830   case Collator::TERTIARY :
00831     return UCOL_TERTIARY;
00832   case Collator::QUATERNARY :
00833     return UCOL_QUATERNARY;
00834   default :
00835     return UCOL_IDENTICAL;
00836   }
00837 }
00838 
00839 U_NAMESPACE_END
00840 
00841 #endif

Generated on Mon Dec 3 19:00:24 2001 for ICU 2.0 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001