1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
4 ******************************************************************************
5 * Copyright (C) 2009-2012, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 ******************************************************************************
8 * Date Name Description
9 * 12/14/09 doug Creation.
10 ******************************************************************************
13 #include "unicode/utypes.h"
15 #if !UCONFIG_NO_FORMATTING
17 #include "unicode/fpositer.h"
23 FieldPositionIterator::~FieldPositionIterator() {
29 FieldPositionIterator::FieldPositionIterator()
30 : data(NULL), pos(-1) {
33 FieldPositionIterator::FieldPositionIterator(const FieldPositionIterator &rhs)
34 : UObject(rhs), data(NULL), pos(rhs.pos) {
37 UErrorCode status = U_ZERO_ERROR;
38 data = new UVector32(status);
39 data->assign(*rhs.data, status);
40 if (status != U_ZERO_ERROR) {
48 UBool FieldPositionIterator::operator==(const FieldPositionIterator &rhs) const {
56 return rhs.data == NULL;
58 return rhs.data ? data->operator==(*rhs.data) : FALSE;
61 void FieldPositionIterator::setData(UVector32 *adopt, UErrorCode& status) {
62 // Verify that adopt has valid data, and update status if it doesn't.
63 if (U_SUCCESS(status)) {
65 if (adopt->size() == 0) {
68 } else if ((adopt->size() % 3) != 0) {
69 status = U_ILLEGAL_ARGUMENT_ERROR;
71 for (int i = 1; i < adopt->size(); i += 3) {
72 if (adopt->elementAti(i) >= adopt->elementAti(i+1)) {
73 status = U_ILLEGAL_ARGUMENT_ERROR;
81 // We own the data, even if status is in error, so we need to delete it now
82 // if we're not keeping track of it.
83 if (!U_SUCCESS(status)) {
90 pos = adopt == NULL ? -1 : 0;
93 UBool FieldPositionIterator::next(FieldPosition& fp) {
98 fp.setField(data->elementAti(pos++));
99 fp.setBeginIndex(data->elementAti(pos++));
100 fp.setEndIndex(data->elementAti(pos++));
102 if (pos == data->size()) {
111 #endif /* #if !UCONFIG_NO_FORMATTING */