ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ****************************************************************************** 00003 * Copyright (C) 1997-2008, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ****************************************************************************** 00006 */ 00007 00032 #ifndef COLEITR_H 00033 #define COLEITR_H 00034 00035 #include "unicode/utypes.h" 00036 00037 00038 #if !UCONFIG_NO_COLLATION 00039 00040 #include "unicode/uobject.h" 00041 #include "unicode/tblcoll.h" 00042 #include "unicode/ucoleitr.h" 00043 00049 typedef struct UCollationElements UCollationElements; 00050 00051 U_NAMESPACE_BEGIN 00052 00120 class U_I18N_API CollationElementIterator : public UObject { 00121 public: 00122 00123 // CollationElementIterator public data member ------------------------------ 00124 00125 enum { 00130 NULLORDER = (int32_t)0xffffffff 00131 }; 00132 00133 // CollationElementIterator public constructor/destructor ------------------- 00134 00141 CollationElementIterator(const CollationElementIterator& other); 00142 00147 virtual ~CollationElementIterator(); 00148 00149 // CollationElementIterator public methods ---------------------------------- 00150 00158 UBool operator==(const CollationElementIterator& other) const; 00159 00167 UBool operator!=(const CollationElementIterator& other) const; 00168 00173 void reset(void); 00174 00182 int32_t next(UErrorCode& status); 00183 00191 int32_t previous(UErrorCode& status); 00192 00199 static inline int32_t primaryOrder(int32_t order); 00200 00207 static inline int32_t secondaryOrder(int32_t order); 00208 00215 static inline int32_t tertiaryOrder(int32_t order); 00216 00226 int32_t getMaxExpansion(int32_t order) const; 00227 00234 int32_t strengthOrder(int32_t order) const; 00235 00242 void setText(const UnicodeString& str, UErrorCode& status); 00243 00250 void setText(CharacterIterator& str, UErrorCode& status); 00251 00258 static inline UBool isIgnorable(int32_t order); 00259 00265 int32_t getOffset(void) const; 00266 00274 void setOffset(int32_t newOffset, UErrorCode& status); 00275 00281 virtual UClassID getDynamicClassID() const; 00282 00288 static UClassID U_EXPORT2 getStaticClassID(); 00289 00290 protected: 00291 00292 // CollationElementIterator protected constructors -------------------------- 00296 friend class RuleBasedCollator; 00297 00308 CollationElementIterator(const UnicodeString& sourceText, 00309 const RuleBasedCollator* order, UErrorCode& status); 00310 00321 CollationElementIterator(const CharacterIterator& sourceText, 00322 const RuleBasedCollator* order, UErrorCode& status); 00323 00324 // CollationElementIterator protected methods ------------------------------- 00325 00332 const CollationElementIterator& 00333 operator=(const CollationElementIterator& other); 00334 00335 private: 00336 CollationElementIterator(); // default constructor not implemented 00337 00338 // CollationElementIterator private data members ---------------------------- 00339 00343 UCollationElements *m_data_; 00344 00348 UBool isDataOwned_; 00349 00350 }; 00351 00352 // CollationElementIterator inline method defination -------------------------- 00353 00359 inline int32_t CollationElementIterator::primaryOrder(int32_t order) 00360 { 00361 order &= RuleBasedCollator::PRIMARYORDERMASK; 00362 return (order >> RuleBasedCollator::PRIMARYORDERSHIFT); 00363 } 00364 00370 inline int32_t CollationElementIterator::secondaryOrder(int32_t order) 00371 { 00372 order = order & RuleBasedCollator::SECONDARYORDERMASK; 00373 return (order >> RuleBasedCollator::SECONDARYORDERSHIFT); 00374 } 00375 00381 inline int32_t CollationElementIterator::tertiaryOrder(int32_t order) 00382 { 00383 return (order &= RuleBasedCollator::TERTIARYORDERMASK); 00384 } 00385 00386 inline int32_t CollationElementIterator::getMaxExpansion(int32_t order) const 00387 { 00388 return ucol_getMaxExpansion(m_data_, (uint32_t)order); 00389 } 00390 00391 inline UBool CollationElementIterator::isIgnorable(int32_t order) 00392 { 00393 return (primaryOrder(order) == RuleBasedCollator::PRIMIGNORABLE); 00394 } 00395 00396 U_NAMESPACE_END 00397 00398 #endif /* #if !UCONFIG_NO_COLLATION */ 00399 00400 #endif