/src/icu/source/common/unicode/parsepos.h
Line | Count | Source (jump to first uncovered line) |
1 | | // © 2016 and later: Unicode, Inc. and others. |
2 | | // License & terms of use: http://www.unicode.org/copyright.html |
3 | | /* |
4 | | * Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. |
5 | | ******************************************************************************* |
6 | | * |
7 | | * File PARSEPOS.H |
8 | | * |
9 | | * Modification History: |
10 | | * |
11 | | * Date Name Description |
12 | | * 07/09/97 helena Converted from java. |
13 | | * 07/17/98 stephen Added errorIndex support. |
14 | | * 05/11/99 stephen Cleaned up. |
15 | | ******************************************************************************* |
16 | | */ |
17 | | |
18 | | #ifndef PARSEPOS_H |
19 | | #define PARSEPOS_H |
20 | | |
21 | | #include "unicode/utypes.h" |
22 | | #include "unicode/uobject.h" |
23 | | |
24 | | |
25 | | U_NAMESPACE_BEGIN |
26 | | |
27 | | /** |
28 | | * \file |
29 | | * \brief C++ API: Canonical Iterator |
30 | | */ |
31 | | /** |
32 | | * <code>ParsePosition</code> is a simple class used by <code>Format</code> |
33 | | * and its subclasses to keep track of the current position during parsing. |
34 | | * The <code>parseObject</code> method in the various <code>Format</code> |
35 | | * classes requires a <code>ParsePosition</code> object as an argument. |
36 | | * |
37 | | * <p> |
38 | | * By design, as you parse through a string with different formats, |
39 | | * you can use the same <code>ParsePosition</code>, since the index parameter |
40 | | * records the current position. |
41 | | * |
42 | | * The ParsePosition class is not suitable for subclassing. |
43 | | * |
44 | | * @version 1.3 10/30/97 |
45 | | * @author Mark Davis, Helena Shih |
46 | | * @see java.text.Format |
47 | | */ |
48 | | |
49 | | class U_COMMON_API ParsePosition : public UObject { |
50 | | public: |
51 | | /** |
52 | | * Default constructor, the index starts with 0 as default. |
53 | | * @stable ICU 2.0 |
54 | | */ |
55 | | ParsePosition() |
56 | | : UObject(), |
57 | | index(0), |
58 | | errorIndex(-1) |
59 | 0 | {} |
60 | | |
61 | | /** |
62 | | * Create a new ParsePosition with the given initial index. |
63 | | * @param newIndex the new text offset. |
64 | | * @stable ICU 2.0 |
65 | | */ |
66 | | ParsePosition(int32_t newIndex) |
67 | | : UObject(), |
68 | | index(newIndex), |
69 | | errorIndex(-1) |
70 | 0 | {} |
71 | | |
72 | | /** |
73 | | * Copy constructor |
74 | | * @param copy the object to be copied from. |
75 | | * @stable ICU 2.0 |
76 | | */ |
77 | | ParsePosition(const ParsePosition& copy) |
78 | | : UObject(copy), |
79 | | index(copy.index), |
80 | | errorIndex(copy.errorIndex) |
81 | 0 | {} |
82 | | |
83 | | /** |
84 | | * Destructor |
85 | | * @stable ICU 2.0 |
86 | | */ |
87 | | virtual ~ParsePosition(); |
88 | | |
89 | | /** |
90 | | * Assignment operator |
91 | | * @stable ICU 2.0 |
92 | | */ |
93 | | ParsePosition& operator=(const ParsePosition& copy); |
94 | | |
95 | | /** |
96 | | * Equality operator. |
97 | | * @return TRUE if the two parse positions are equal, FALSE otherwise. |
98 | | * @stable ICU 2.0 |
99 | | */ |
100 | | UBool operator==(const ParsePosition& that) const; |
101 | | |
102 | | /** |
103 | | * Equality operator. |
104 | | * @return TRUE if the two parse positions are not equal, FALSE otherwise. |
105 | | * @stable ICU 2.0 |
106 | | */ |
107 | | UBool operator!=(const ParsePosition& that) const; |
108 | | |
109 | | /** |
110 | | * Clone this object. |
111 | | * Clones can be used concurrently in multiple threads. |
112 | | * If an error occurs, then NULL is returned. |
113 | | * The caller must delete the clone. |
114 | | * |
115 | | * @return a clone of this object |
116 | | * |
117 | | * @see getDynamicClassID |
118 | | * @stable ICU 2.8 |
119 | | */ |
120 | | ParsePosition *clone() const; |
121 | | |
122 | | /** |
123 | | * Retrieve the current parse position. On input to a parse method, this |
124 | | * is the index of the character at which parsing will begin; on output, it |
125 | | * is the index of the character following the last character parsed. |
126 | | * @return the current index. |
127 | | * @stable ICU 2.0 |
128 | | */ |
129 | | int32_t getIndex(void) const; |
130 | | |
131 | | /** |
132 | | * Set the current parse position. |
133 | | * @param index the new index. |
134 | | * @stable ICU 2.0 |
135 | | */ |
136 | | void setIndex(int32_t index); |
137 | | |
138 | | /** |
139 | | * Set the index at which a parse error occurred. Formatters |
140 | | * should set this before returning an error code from their |
141 | | * parseObject method. The default value is -1 if this is not |
142 | | * set. |
143 | | * @stable ICU 2.0 |
144 | | */ |
145 | | void setErrorIndex(int32_t ei); |
146 | | |
147 | | /** |
148 | | * Retrieve the index at which an error occurred, or -1 if the |
149 | | * error index has not been set. |
150 | | * @stable ICU 2.0 |
151 | | */ |
152 | | int32_t getErrorIndex(void) const; |
153 | | |
154 | | /** |
155 | | * ICU "poor man's RTTI", returns a UClassID for this class. |
156 | | * |
157 | | * @stable ICU 2.2 |
158 | | */ |
159 | | static UClassID U_EXPORT2 getStaticClassID(); |
160 | | |
161 | | /** |
162 | | * ICU "poor man's RTTI", returns a UClassID for the actual class. |
163 | | * |
164 | | * @stable ICU 2.2 |
165 | | */ |
166 | | virtual UClassID getDynamicClassID() const; |
167 | | |
168 | | private: |
169 | | /** |
170 | | * Input: the place you start parsing. |
171 | | * <br>Output: position where the parse stopped. |
172 | | * This is designed to be used serially, |
173 | | * with each call setting index up for the next one. |
174 | | */ |
175 | | int32_t index; |
176 | | |
177 | | /** |
178 | | * The index at which a parse error occurred. |
179 | | */ |
180 | | int32_t errorIndex; |
181 | | |
182 | | }; |
183 | | |
184 | | inline ParsePosition& |
185 | | ParsePosition::operator=(const ParsePosition& copy) |
186 | 0 | { |
187 | 0 | index = copy.index; |
188 | 0 | errorIndex = copy.errorIndex; |
189 | 0 | return *this; |
190 | 0 | } |
191 | | |
192 | | inline UBool |
193 | | ParsePosition::operator==(const ParsePosition& copy) const |
194 | 0 | { |
195 | 0 | if(index != copy.index || errorIndex != copy.errorIndex) |
196 | 0 | return FALSE; |
197 | 0 | else |
198 | 0 | return TRUE; |
199 | 0 | } |
200 | | |
201 | | inline UBool |
202 | | ParsePosition::operator!=(const ParsePosition& copy) const |
203 | 0 | { |
204 | 0 | return !operator==(copy); |
205 | 0 | } |
206 | | |
207 | | inline int32_t |
208 | | ParsePosition::getIndex() const |
209 | 0 | { |
210 | 0 | return index; |
211 | 0 | } |
212 | | |
213 | | inline void |
214 | | ParsePosition::setIndex(int32_t offset) |
215 | 0 | { |
216 | 0 | this->index = offset; |
217 | 0 | } |
218 | | |
219 | | inline int32_t |
220 | | ParsePosition::getErrorIndex() const |
221 | 0 | { |
222 | 0 | return errorIndex; |
223 | 0 | } |
224 | | |
225 | | inline void |
226 | | ParsePosition::setErrorIndex(int32_t ei) |
227 | 0 | { |
228 | 0 | this->errorIndex = ei; |
229 | 0 | } |
230 | | U_NAMESPACE_END |
231 | | |
232 | | #endif |