Home | History | Annotate | Download | only in unicode
      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