fpositer.h revision c73f511526464f8e56c242df80552e9b0d94ae3d
143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis/*
243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis********************************************************************************
343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*   Copyright (C) 2010-2012, International Business Machines
443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*   Corporation and others.  All Rights Reserved.
543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis********************************************************************************
643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*
743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis* File attiter.h
843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*
943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis* Modification History:
1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*
1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*   Date        Name        Description
1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*   12/15/2009  dougfelt    Created
1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis********************************************************************************
1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis*/
15ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek
16769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis#ifndef FPOSITER_H
17d1e5a89226da79f7e6f43d40facc46abda9e5245Jordy Rose#define FPOSITER_H
18769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
199fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "unicode/utypes.h"
2043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "unicode/uobject.h"
2143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis/**
2343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis * \file
24d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis * \brief C++ API: FieldPosition Iterator.
25d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis */
26d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
27d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#if UCONFIG_NO_FORMATTING
28d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
29d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios KyrtzidisU_NAMESPACE_BEGIN
30d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
31d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis/*
32d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis * Allow the declaration of APIs with pointers to FieldPositionIterator
33d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis * even when formatting is removed from the build.
34d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis */
35d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisclass FieldPositionIterator;
36d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
37dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna ZaksU_NAMESPACE_END
38dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna Zaks
39d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#else
40d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
41deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis#include "unicode/fieldpos.h"
42deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis#include "unicode/umisc.h"
43deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis
44deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios KyrtzidisU_NAMESPACE_BEGIN
45deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis
46deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidisclass UVector32;
47deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis
48deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis/**
49deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis * FieldPositionIterator returns the field ids and their start/limit positions generated
50deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis * by a call to Format::format.  See Format, NumberFormat, DecimalFormat.
51769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis * @stable ICU 4.4
52769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis */
53769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisclass U_I18N_API FieldPositionIterator : public UObject {
54769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidispublic:
559fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    /**
569fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * Destructor.
579fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * @stable ICU 4.4
589fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     */
599fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    ~FieldPositionIterator();
609fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
619fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    /**
629fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * Constructs a new, empty iterator.
639fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * @stable ICU 4.4
649fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     */
659fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    FieldPositionIterator(void);
669fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
679fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    /**
689fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * Copy constructor.  If the copy failed for some reason, the new iterator will
699fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * be empty.
70769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * @stable ICU 4.4
719fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     */
729fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    FieldPositionIterator(const FieldPositionIterator&);
739fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
749fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    /**
759fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * Return true if another object is semantically equal to this
76769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * one.
77769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * <p>
789fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * Return true if this FieldPositionIterator is at the same position in an
799fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * equal array of run values.
809fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     * @stable ICU 4.4
819fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis     */
829fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    UBool operator==(const FieldPositionIterator&) const;
839fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
84769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    /**
85769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * Returns the complement of the result of operator==
86769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * @param rhs The FieldPositionIterator to be compared for inequality
87769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * @return the complement of the result of operator==
88769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * @stable ICU 4.4
89769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     */
90769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    UBool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); }
91769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
92769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    /**
93c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis     * If the current position is valid, updates the FieldPosition values, advances the iterator,
94c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis     * and returns TRUE, otherwise returns FALSE.
95cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis     * @stable ICU 4.4
968ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks     */
978ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks    UBool next(FieldPosition& fp);
988ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks
99769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisprivate:
100e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis    friend class FieldPositionIteratorHandler;
101e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis
102e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis    /**
103769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * Sets the data used by the iterator, and resets the position.
104769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid
105769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     * (length is not a multiple of 3, or start >= limit for any run).
106769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis     */
107cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis    void setData(UVector32 *adopt, UErrorCode& status);
108cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis
109769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    UVector32 *data;
110e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis    int32_t pos;
111769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis};
112769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
113769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios KyrtzidisU_NAMESPACE_END
114769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
115cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis#endif /* #if !UCONFIG_NO_FORMATTING */
116769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
117769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis#endif // FPOSITER_H
118769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis