| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 ********************************************************************** | |
| 3 * Copyright (C) 1998-2005, International Business Machines | |
| 4 * Corporation and others. All Rights Reserved. | |
| 5 ********************************************************************** | |
| 6 */ | |
| 7 | |
| 8 #ifndef UCHRITER_H | |
| 9 #define UCHRITER_H | |
| 10 | |
| 11 #include "unicode/utypes.h" | |
| 12 #include "unicode/chariter.h" | |
| 13 | |
| 14 /** | |
| 15 * \file | |
| 16 * \brief C++ API: UChar Character Iterator | |
| 17 */ | |
| 18 | |
| 19 U_NAMESPACE_BEGIN | |
| 20 | |
| 21 /** | |
| 22 * A concrete subclass of CharacterIterator that iterates over the | |
| 23 * characters (code units or code points) in a UChar array. | |
| 24 * It's possible not only to create an | |
| 25 * iterator that iterates over an entire UChar array, but also to | |
| 26 * create one that iterates over only a subrange of a UChar array | |
| 27 * (iterators over different subranges of the same UChar array don't | |
| 28 * compare equal). | |
| 29 * @see CharacterIterator | |
| 30 * @see ForwardCharacterIterator | |
| 31 * @stable ICU 2.0 | |
| 32 */ | |
| 33 class U_COMMON_API UCharCharacterIterator : public CharacterIterator { | |
| 34 public: | |
| 35 /** | |
| 36 * Create an iterator over the UChar array referred to by "textPtr". | |
| 37 * The iteration range is 0 to <code>length-1</code>. | |
| 38 * text is only aliased, not adopted (the | |
| 39 * destructor will not delete it). | |
| 40 * @param textPtr The UChar array to be iterated over | |
| 41 * @param length The length of the UChar array | |
| 42 * @stable ICU 2.0 | |
| 43 */ | |
| 44 UCharCharacterIterator(const UChar* textPtr, int32_t length); | |
| 45 | |
| 46 /** | |
| 47 * Create an iterator over the UChar array referred to by "textPtr". | |
| 48 * The iteration range is 0 to <code>length-1</code>. | |
| 49 * text is only aliased, not adopted (the | |
| 50 * destructor will not delete it). | |
| 51 * The starting | |
| 52 * position is specified by "position". If "position" is outside the valid | |
| 53 * iteration range, the behavior of this object is undefined. | |
| 54 * @param textPtr The UChar array to be iteratd over | |
| 55 * @param length The length of the UChar array | |
| 56 * @param position The starting position of the iteration | |
| 57 * @stable ICU 2.0 | |
| 58 */ | |
| 59 UCharCharacterIterator(const UChar* textPtr, int32_t length, | |
| 60 int32_t position); | |
| 61 | |
| 62 /** | |
| 63 * Create an iterator over the UChar array referred to by "textPtr". | |
| 64 * The iteration range is 0 to <code>end-1</code>. | |
| 65 * text is only aliased, not adopted (the | |
| 66 * destructor will not delete it). | |
| 67 * The starting | |
| 68 * position is specified by "position". If begin and end do not | |
| 69 * form a valid iteration range or "position" is outside the valid | |
| 70 * iteration range, the behavior of this object is undefined. | |
| 71 * @param textPtr The UChar array to be iterated over | |
| 72 * @param length The length of the UChar array | |
| 73 * @param textBegin The begin position of the iteration range | |
| 74 * @param textEnd The end position of the iteration range | |
| 75 * @param position The starting position of the iteration | |
| 76 * @stable ICU 2.0 | |
| 77 */ | |
| 78 UCharCharacterIterator(const UChar* textPtr, int32_t length, | |
| 79 int32_t textBegin, | |
| 80 int32_t textEnd, | |
| 81 int32_t position); | |
| 82 | |
| 83 /** | |
| 84 * Copy constructor. The new iterator iterates over the same range | |
| 85 * of the same string as "that", and its initial position is the | |
| 86 * same as "that"'s current position. | |
| 87 * @param that The UCharCharacterIterator to be copied | |
| 88 * @stable ICU 2.0 | |
| 89 */ | |
| 90 UCharCharacterIterator(const UCharCharacterIterator& that); | |
| 91 | |
| 92 /** | |
| 93 * Destructor. | |
| 94 * @stable ICU 2.0 | |
| 95 */ | |
| 96 virtual ~UCharCharacterIterator(); | |
| 97 | |
| 98 /** | |
| 99 * Assignment operator. *this is altered to iterate over the sane | |
| 100 * range of the same string as "that", and refers to the same | |
| 101 * character within that string as "that" does. | |
| 102 * @param that The object to be copied | |
| 103 * @return the newly created object | |
| 104 * @stable ICU 2.0 | |
| 105 */ | |
| 106 UCharCharacterIterator& | |
| 107 operator=(const UCharCharacterIterator& that); | |
| 108 | |
| 109 /** | |
| 110 * Returns true if the iterators iterate over the same range of the | |
| 111 * same string and are pointing at the same character. | |
| 112 * @param that The ForwardCharacterIterator used to be compared for equality | |
| 113 * @return true if the iterators iterate over the same range of the | |
| 114 * same string and are pointing at the same character. | |
| 115 * @stable ICU 2.0 | |
| 116 */ | |
| 117 virtual UBool operator==(const ForwardCharacterIterator& that) const; | |
| 118 | |
| 119 /** | |
| 120 * Generates a hash code for this iterator. | |
| 121 * @return the hash code. | |
| 122 * @stable ICU 2.0 | |
| 123 */ | |
| 124 virtual int32_t hashCode(void) const; | |
| 125 | |
| 126 /** | |
| 127 * Returns a new UCharCharacterIterator referring to the same | |
| 128 * character in the same range of the same string as this one. The | |
| 129 * caller must delete the new iterator. | |
| 130 * @return the CharacterIterator newly created | |
| 131 * @stable ICU 2.0 | |
| 132 */ | |
| 133 virtual CharacterIterator* clone(void) const; | |
| 134 | |
| 135 /** | |
| 136 * Sets the iterator to refer to the first code unit in its | |
| 137 * iteration range, and returns that code unit. | |
| 138 * This can be used to begin an iteration with next(). | |
| 139 * @return the first code unit in its iteration range. | |
| 140 * @stable ICU 2.0 | |
| 141 */ | |
| 142 virtual UChar first(void); | |
| 143 | |
| 144 /** | |
| 145 * Sets the iterator to refer to the first code unit in its | |
| 146 * iteration range, returns that code unit, and moves the position | |
| 147 * to the second code unit. This is an alternative to setToStart() | |
| 148 * for forward iteration with nextPostInc(). | |
| 149 * @return the first code unit in its iteration range | |
| 150 * @stable ICU 2.0 | |
| 151 */ | |
| 152 virtual UChar firstPostInc(void); | |
| 153 | |
| 154 /** | |
| 155 * Sets the iterator to refer to the first code point in its | |
| 156 * iteration range, and returns that code unit, | |
| 157 * This can be used to begin an iteration with next32(). | |
| 158 * Note that an iteration with next32PostInc(), beginning with, | |
| 159 * e.g., setToStart() or firstPostInc(), is more efficient. | |
| 160 * @return the first code point in its iteration range | |
| 161 * @stable ICU 2.0 | |
| 162 */ | |
| 163 virtual UChar32 first32(void); | |
| 164 | |
| 165 /** | |
| 166 * Sets the iterator to refer to the first code point in its | |
| 167 * iteration range, returns that code point, and moves the position | |
| 168 * to the second code point. This is an alternative to setToStart() | |
| 169 * for forward iteration with next32PostInc(). | |
| 170 * @return the first code point in its iteration range. | |
| 171 * @stable ICU 2.0 | |
| 172 */ | |
| 173 virtual UChar32 first32PostInc(void); | |
| 174 | |
| 175 /** | |
| 176 * Sets the iterator to refer to the last code unit in its | |
| 177 * iteration range, and returns that code unit. | |
| 178 * This can be used to begin an iteration with previous(). | |
| 179 * @return the last code unit in its iteration range. | |
| 180 * @stable ICU 2.0 | |
| 181 */ | |
| 182 virtual UChar last(void); | |
| 183 | |
| 184 /** | |
| 185 * Sets the iterator to refer to the last code point in its | |
| 186 * iteration range, and returns that code unit. | |
| 187 * This can be used to begin an iteration with previous32(). | |
| 188 * @return the last code point in its iteration range. | |
| 189 * @stable ICU 2.0 | |
| 190 */ | |
| 191 virtual UChar32 last32(void); | |
| 192 | |
| 193 /** | |
| 194 * Sets the iterator to refer to the "position"-th code unit | |
| 195 * in the text-storage object the iterator refers to, and | |
| 196 * returns that code unit. | |
| 197 * @param position the position within the text-storage object | |
| 198 * @return the code unit | |
| 199 * @stable ICU 2.0 | |
| 200 */ | |
| 201 virtual UChar setIndex(int32_t position); | |
| 202 | |
| 203 /** | |
| 204 * Sets the iterator to refer to the beginning of the code point | |
| 205 * that contains the "position"-th code unit | |
| 206 * in the text-storage object the iterator refers to, and | |
| 207 * returns that code point. | |
| 208 * The current position is adjusted to the beginning of the code point | |
| 209 * (its first code unit). | |
| 210 * @param position the position within the text-storage object | |
| 211 * @return the code unit | |
| 212 * @stable ICU 2.0 | |
| 213 */ | |
| 214 virtual UChar32 setIndex32(int32_t position); | |
| 215 | |
| 216 /** | |
| 217 * Returns the code unit the iterator currently refers to. | |
| 218 * @return the code unit the iterator currently refers to. | |
| 219 * @stable ICU 2.0 | |
| 220 */ | |
| 221 virtual UChar current(void) const; | |
| 222 | |
| 223 /** | |
| 224 * Returns the code point the iterator currently refers to. | |
| 225 * @return the code point the iterator currently refers to. | |
| 226 * @stable ICU 2.0 | |
| 227 */ | |
| 228 virtual UChar32 current32(void) const; | |
| 229 | |
| 230 /** | |
| 231 * Advances to the next code unit in the iteration range (toward | |
| 232 * endIndex()), and returns that code unit. If there are no more | |
| 233 * code units to return, returns DONE. | |
| 234 * @return the next code unit in the iteration range. | |
| 235 * @stable ICU 2.0 | |
| 236 */ | |
| 237 virtual UChar next(void); | |
| 238 | |
| 239 /** | |
| 240 * Gets the current code unit for returning and advances to the next code unit | |
| 241 * in the iteration range | |
| 242 * (toward endIndex()). If there are | |
| 243 * no more code units to return, returns DONE. | |
| 244 * @return the current code unit. | |
| 245 * @stable ICU 2.0 | |
| 246 */ | |
| 247 virtual UChar nextPostInc(void); | |
| 248 | |
| 249 /** | |
| 250 * Advances to the next code point in the iteration range (toward | |
| 251 * endIndex()), and returns that code point. If there are no more | |
| 252 * code points to return, returns DONE. | |
| 253 * Note that iteration with "pre-increment" semantics is less | |
| 254 * efficient than iteration with "post-increment" semantics | |
| 255 * that is provided by next32PostInc(). | |
| 256 * @return the next code point in the iteration range. | |
| 257 * @stable ICU 2.0 | |
| 258 */ | |
| 259 virtual UChar32 next32(void); | |
| 260 | |
| 261 /** | |
| 262 * Gets the current code point for returning and advances to the next code poi
nt | |
| 263 * in the iteration range | |
| 264 * (toward endIndex()). If there are | |
| 265 * no more code points to return, returns DONE. | |
| 266 * @return the current point. | |
| 267 * @stable ICU 2.0 | |
| 268 */ | |
| 269 virtual UChar32 next32PostInc(void); | |
| 270 | |
| 271 /** | |
| 272 * Returns FALSE if there are no more code units or code points | |
| 273 * at or after the current position in the iteration range. | |
| 274 * This is used with nextPostInc() or next32PostInc() in forward | |
| 275 * iteration. | |
| 276 * @return FALSE if there are no more code units or code points | |
| 277 * at or after the current position in the iteration range. | |
| 278 * @stable ICU 2.0 | |
| 279 */ | |
| 280 virtual UBool hasNext(); | |
| 281 | |
| 282 /** | |
| 283 * Advances to the previous code unit in the iteration range (toward | |
| 284 * startIndex()), and returns that code unit. If there are no more | |
| 285 * code units to return, returns DONE. | |
| 286 * @return the previous code unit in the iteration range. | |
| 287 * @stable ICU 2.0 | |
| 288 */ | |
| 289 virtual UChar previous(void); | |
| 290 | |
| 291 /** | |
| 292 * Advances to the previous code point in the iteration range (toward | |
| 293 * startIndex()), and returns that code point. If there are no more | |
| 294 * code points to return, returns DONE. | |
| 295 * @return the previous code point in the iteration range. | |
| 296 * @stable ICU 2.0 | |
| 297 */ | |
| 298 virtual UChar32 previous32(void); | |
| 299 | |
| 300 /** | |
| 301 * Returns FALSE if there are no more code units or code points | |
| 302 * before the current position in the iteration range. | |
| 303 * This is used with previous() or previous32() in backward | |
| 304 * iteration. | |
| 305 * @return FALSE if there are no more code units or code points | |
| 306 * before the current position in the iteration range. | |
| 307 * @stable ICU 2.0 | |
| 308 */ | |
| 309 virtual UBool hasPrevious(); | |
| 310 | |
| 311 /** | |
| 312 * Moves the current position relative to the start or end of the | |
| 313 * iteration range, or relative to the current position itself. | |
| 314 * The movement is expressed in numbers of code units forward | |
| 315 * or backward by specifying a positive or negative delta. | |
| 316 * @param delta the position relative to origin. A positive delta means forwar
d; | |
| 317 * a negative delta means backward. | |
| 318 * @param origin Origin enumeration {kStart, kCurrent, kEnd} | |
| 319 * @return the new position | |
| 320 * @stable ICU 2.0 | |
| 321 */ | |
| 322 virtual int32_t move(int32_t delta, EOrigin origin); | |
| 323 | |
| 324 /** | |
| 325 * Moves the current position relative to the start or end of the | |
| 326 * iteration range, or relative to the current position itself. | |
| 327 * The movement is expressed in numbers of code points forward | |
| 328 * or backward by specifying a positive or negative delta. | |
| 329 * @param delta the position relative to origin. A positive delta means forwar
d; | |
| 330 * a negative delta means backward. | |
| 331 * @param origin Origin enumeration {kStart, kCurrent, kEnd} | |
| 332 * @return the new position | |
| 333 * @stable ICU 2.0 | |
| 334 */ | |
| 335 virtual int32_t move32(int32_t delta, EOrigin origin); | |
| 336 | |
| 337 /** | |
| 338 * Sets the iterator to iterate over a new range of text | |
| 339 * @stable ICU 2.0 | |
| 340 */ | |
| 341 void setText(const UChar* newText, int32_t newTextLength); | |
| 342 | |
| 343 /** | |
| 344 * Copies the UChar array under iteration into the UnicodeString | |
| 345 * referred to by "result". Even if this iterator iterates across | |
| 346 * only a part of this string, the whole string is copied. | |
| 347 * @param result Receives a copy of the text under iteration. | |
| 348 * @stable ICU 2.0 | |
| 349 */ | |
| 350 virtual void getText(UnicodeString& result); | |
| 351 | |
| 352 /** | |
| 353 * Return a class ID for this class (not really public) | |
| 354 * @return a class ID for this class | |
| 355 * @stable ICU 2.0 | |
| 356 */ | |
| 357 static UClassID U_EXPORT2 getStaticClassID(void); | |
| 358 | |
| 359 /** | |
| 360 * Return a class ID for this object (not really public) | |
| 361 * @return a class ID for this object. | |
| 362 * @stable ICU 2.0 | |
| 363 */ | |
| 364 virtual UClassID getDynamicClassID(void) const; | |
| 365 | |
| 366 protected: | |
| 367 /** | |
| 368 * Protected constructor | |
| 369 * @stable ICU 2.0 | |
| 370 */ | |
| 371 UCharCharacterIterator(); | |
| 372 /** | |
| 373 * Protected member text | |
| 374 * @stable ICU 2.0 | |
| 375 */ | |
| 376 const UChar* text; | |
| 377 | |
| 378 }; | |
| 379 | |
| 380 U_NAMESPACE_END | |
| 381 #endif | |
| OLD | NEW |