• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ********************************************************************************
5 *   Copyright (C) 2010-2012, International Business Machines
6 *   Corporation and others.  All Rights Reserved.
7 ********************************************************************************
8 *
9 * File attiter.h
10 *
11 * Modification History:
12 *
13 *   Date        Name        Description
14 *   12/15/2009  dougfelt    Created
15 ********************************************************************************
16 */
17 
18 #ifndef FPOSITER_H
19 #define FPOSITER_H
20 
21 #include "unicode/utypes.h"
22 
23 #if U_SHOW_CPLUSPLUS_API
24 
25 #include "unicode/uobject.h"
26 
27 /**
28  * \file
29  * \brief C++ API: FieldPosition Iterator.
30  */
31 
32 #if UCONFIG_NO_FORMATTING
33 
34 U_NAMESPACE_BEGIN
35 
36 /*
37  * Allow the declaration of APIs with pointers to FieldPositionIterator
38  * even when formatting is removed from the build.
39  */
40 class FieldPositionIterator;
41 
42 U_NAMESPACE_END
43 
44 #else
45 
46 #include "unicode/fieldpos.h"
47 #include "unicode/umisc.h"
48 
49 U_NAMESPACE_BEGIN
50 
51 class UVector32;
52 
53 /**
54  * FieldPositionIterator returns the field ids and their start/limit positions generated
55  * by a call to Format::format.  See Format, NumberFormat, DecimalFormat.
56  * @stable ICU 4.4
57  */
58 class U_I18N_API FieldPositionIterator : public UObject {
59 public:
60     /**
61      * Destructor.
62      * @stable ICU 4.4
63      */
64     ~FieldPositionIterator();
65 
66     /**
67      * Constructs a new, empty iterator.
68      * @stable ICU 4.4
69      */
70     FieldPositionIterator(void);
71 
72     /**
73      * Copy constructor.  If the copy failed for some reason, the new iterator will
74      * be empty.
75      * @stable ICU 4.4
76      */
77     FieldPositionIterator(const FieldPositionIterator&);
78 
79     /**
80      * Return true if another object is semantically equal to this
81      * one.
82      * <p>
83      * Return true if this FieldPositionIterator is at the same position in an
84      * equal array of run values.
85      * @stable ICU 4.4
86      */
87     bool operator==(const FieldPositionIterator&) const;
88 
89     /**
90      * Returns the complement of the result of operator==
91      * @param rhs The FieldPositionIterator to be compared for inequality
92      * @return the complement of the result of operator==
93      * @stable ICU 4.4
94      */
95     bool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); }
96 
97     /**
98      * If the current position is valid, updates the FieldPosition values, advances the iterator,
99      * and returns true, otherwise returns false.
100      * @stable ICU 4.4
101      */
102     UBool next(FieldPosition& fp);
103 
104 private:
105     /**
106      * Sets the data used by the iterator, and resets the position.
107      * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid
108      * (length is not a multiple of 3, or start >= limit for any run).
109      */
110     void setData(UVector32 *adopt, UErrorCode& status);
111 
112     friend class FieldPositionIteratorHandler;
113 
114     UVector32 *data;
115     int32_t pos;
116 };
117 
118 U_NAMESPACE_END
119 
120 #endif /* #if !UCONFIG_NO_FORMATTING */
121 
122 #endif /* U_SHOW_CPLUSPLUS_API */
123 
124 #endif // FPOSITER_H
125