16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2010-2012, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File attiter.h 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 12/15/2009 dougfelt Created 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef FPOSITER_H 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define FPOSITER_H 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: FieldPosition Iterator. 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_NO_FORMATTING 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Allow the declaration of APIs with pointers to FieldPositionIterator 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * even when formatting is removed from the build. 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass FieldPositionIterator; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/fieldpos.h" 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umisc.h" 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass UVector32; 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FieldPositionIterator returns the field ids and their start/limit positions generated 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by a call to Format::format. See Format, NumberFormat, DecimalFormat. 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API FieldPositionIterator : public UObject { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor. 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ~FieldPositionIterator(); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs a new, empty iterator. 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPositionIterator(void); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy constructor. If the copy failed for some reason, the new iterator will 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * be empty. 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPositionIterator(const FieldPositionIterator&); 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return true if another object is semantically equal to this 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * one. 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p> 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return true if this FieldPositionIterator is at the same position in an 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * equal array of run values. 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator==(const FieldPositionIterator&) const; 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the complement of the result of operator== 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param rhs The FieldPositionIterator to be compared for inequality 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the complement of the result of operator== 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); } 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the current position is valid, updates the FieldPosition values, advances the iterator, 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and returns TRUE, otherwise returns FALSE. 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool next(FieldPosition& fp); 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org friend class FieldPositionIteratorHandler; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the data used by the iterator, and resets the position. 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (length is not a multiple of 3, or start >= limit for any run). 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setData(UVector32 *adopt, UErrorCode& status); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVector32 *data; 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // FPOSITER_H 118