• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 ******************************************************************************
3 *
4 *   Copyright (C) 1998-2005, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *
7 ******************************************************************************
8 *
9 * File schriter.h
10 *
11 * Modification History:
12 *
13 *   Date        Name        Description
14 *  05/05/99     stephen     Cleaned up.
15 ******************************************************************************
16 */
17 
18 #ifndef SCHRITER_H
19 #define SCHRITER_H
20 
21 #include "unicode/utypes.h"
22 #include "unicode/chariter.h"
23 #include "unicode/uchriter.h"
24 
25 /**
26  * \file
27  * \brief C++ API: String Character Iterator
28  */
29 
30 U_NAMESPACE_BEGIN
31 /**
32  * A concrete subclass of CharacterIterator that iterates over the
33  * characters (code units or code points) in a UnicodeString.
34  * It's possible not only to create an
35  * iterator that iterates over an entire UnicodeString, but also to
36  * create one that iterates over only a subrange of a UnicodeString
37  * (iterators over different subranges of the same UnicodeString don't
38  * compare equal).
39  * @see CharacterIterator
40  * @see ForwardCharacterIterator
41  * @stable ICU 2.0
42  */
43 class U_COMMON_API StringCharacterIterator : public UCharCharacterIterator {
44 public:
45   /**
46    * Create an iterator over the UnicodeString referred to by "textStr".
47    * The UnicodeString object is copied.
48    * The iteration range is the whole string, and the starting position is 0.
49    * @param textStr The unicode string used to create an iterator
50    * @stable ICU 2.0
51    */
52   StringCharacterIterator(const UnicodeString& textStr);
53 
54   /**
55    * Create an iterator over the UnicodeString referred to by "textStr".
56    * The iteration range is the whole string, and the starting
57    * position is specified by "textPos".  If "textPos" is outside the valid
58    * iteration range, the behavior of this object is undefined.
59    * @param textStr The unicode string used to create an iterator
60    * @param textPos The starting position of the iteration
61    * @stable ICU 2.0
62    */
63   StringCharacterIterator(const UnicodeString&    textStr,
64               int32_t              textPos);
65 
66   /**
67    * Create an iterator over the UnicodeString referred to by "textStr".
68    * The UnicodeString object is copied.
69    * The iteration range begins with the code unit specified by
70    * "textBegin" and ends with the code unit BEFORE the code unit specfied
71    * by "textEnd".  The starting position is specified by "textPos".  If
72    * "textBegin" and "textEnd" don't form a valid range on "text" (i.e.,
73    * textBegin >= textEnd or either is negative or greater than text.size()),
74    * or "textPos" is outside the range defined by "textBegin" and "textEnd",
75    * the behavior of this iterator is undefined.
76    * @param textStr    The unicode string used to create the StringCharacterIterator
77    * @param textBegin  The begin position of the iteration range
78    * @param textEnd    The end position of the iteration range
79    * @param textPos    The starting position of the iteration
80    * @stable ICU 2.0
81    */
82   StringCharacterIterator(const UnicodeString&    textStr,
83               int32_t              textBegin,
84               int32_t              textEnd,
85               int32_t              textPos);
86 
87   /**
88    * Copy constructor.  The new iterator iterates over the same range
89    * of the same string as "that", and its initial position is the
90    * same as "that"'s current position.
91    * The UnicodeString object in "that" is copied.
92    * @param that The StringCharacterIterator to be copied
93    * @stable ICU 2.0
94    */
95   StringCharacterIterator(const StringCharacterIterator&  that);
96 
97   /**
98    * Destructor.
99    * @stable ICU 2.0
100    */
101   virtual ~StringCharacterIterator();
102 
103   /**
104    * Assignment operator.  *this is altered to iterate over the same
105    * range of the same string as "that", and refers to the same
106    * character within that string as "that" does.
107    * @param that The object to be copied.
108    * @return the newly created object.
109    * @stable ICU 2.0
110    */
111   StringCharacterIterator&
112   operator=(const StringCharacterIterator&    that);
113 
114   /**
115    * Returns true if the iterators iterate over the same range of the
116    * same string and are pointing at the same character.
117    * @param that The ForwardCharacterIterator to be compared for equality
118    * @return true if the iterators iterate over the same range of the
119    * same string and are pointing at the same character.
120    * @stable ICU 2.0
121    */
122   virtual UBool          operator==(const ForwardCharacterIterator& that) const;
123 
124   /**
125    * Returns a new StringCharacterIterator referring to the same
126    * character in the same range of the same string as this one.  The
127    * caller must delete the new iterator.
128    * @return the newly cloned object.
129    * @stable ICU 2.0
130    */
131   virtual CharacterIterator* clone(void) const;
132 
133   /**
134    * Sets the iterator to iterate over the provided string.
135    * @param newText The string to be iterated over
136    * @stable ICU 2.0
137    */
138   void setText(const UnicodeString& newText);
139 
140   /**
141    * Copies the UnicodeString under iteration into the UnicodeString
142    * referred to by "result".  Even if this iterator iterates across
143    * only a part of this string, the whole string is copied.
144    * @param result Receives a copy of the text under iteration.
145    * @stable ICU 2.0
146    */
147   virtual void            getText(UnicodeString& result);
148 
149   /**
150    * Return a class ID for this object (not really public)
151    * @return a class ID for this object.
152    * @stable ICU 2.0
153    */
154   virtual UClassID         getDynamicClassID(void) const;
155 
156   /**
157    * Return a class ID for this class (not really public)
158    * @return a class ID for this class
159    * @stable ICU 2.0
160    */
161   static UClassID   U_EXPORT2 getStaticClassID(void);
162 
163 protected:
164   /**
165    * Default constructor, iteration over empty string.
166    * @stable ICU 2.0
167    */
168   StringCharacterIterator();
169 
170   /**
171    * Sets the iterator to iterate over the provided string.
172    * @param newText The string to be iterated over
173    * @param newTextLength The length of the String
174    * @stable ICU 2.0
175    */
176   void setText(const UChar* newText, int32_t newTextLength);
177 
178   /**
179    * Copy of the iterated string object.
180    * @stable ICU 2.0
181    */
182   UnicodeString            text;
183 
184 };
185 
186 U_NAMESPACE_END
187 #endif
188