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