|
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 point |
|
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 forward; |
|
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 forward; |
|
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 |