Coverage Report

Created: 2025-07-11 06:23

/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