Home | History | Annotate | Download | only in unicode
      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 
     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     // 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 
    110 private:
    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 
    127 U_NAMESPACE_END
    128 
    129 #endif /* #if !UCONFIG_NO_FORMATTING */
    130 
    131 #endif // FPOSITER_H
    132