1/* 2******************************************************************************** 3* Copyright (C) 2010, 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 29U_NAMESPACE_BEGIN 30 31/* 32 * Allow the declaration of APIs with pointers to FieldPositionIterator 33 * even when formatting is removed from the build. 34 */ 35class FieldPositionIterator; 36 37U_NAMESPACE_END 38 39#else 40 41#include "unicode/fieldpos.h" 42#include "unicode/umisc.h" 43 44U_NAMESPACE_BEGIN 45 46class 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 */ 53class U_I18N_API FieldPositionIterator : public UObject { 54public: 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 // BEGIN android-added 100 /** 101 * Returns the data. If dest is null, returns the length of the data. 102 * Otherwise, if capacity is insufficient, returns the negative of the 103 * length of the data. Otherwise, copies data into dest and returns 104 * the length of the data. 105 * @internal 106 */ 107 int32_t getData(int32_t *dest, int32_t capacity) const; 108 // END android-added 109 110private: 111 friend class FieldPositionIteratorHandler; 112 113 /** 114 * Sets the data used by the iterator, and resets the position. 115 * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid 116 * (length is not a multiple of 3, or start >= limit for any run). 117 */ 118 void setData(UVector32 *adopt, UErrorCode& status); 119 120 UVector32 *data; 121 int32_t pos; 122 123 // No ICU "poor man's RTTI" for this class nor its subclasses. 124 virtual UClassID getDynamicClassID() const; 125}; 126 127U_NAMESPACE_END 128 129#endif /* #if !UCONFIG_NO_FORMATTING */ 130 131#endif // FPOSITER_H 132