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