]>
git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/fpositer.cpp
1 // © 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() % 4) != 0) {
69 status
= U_ILLEGAL_ARGUMENT_ERROR
;
71 for (int i
= 2; i
< adopt
->size(); i
+= 4) {
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 // Ignore the first element of the tetrad: used for field category
100 fp
.setField(data
->elementAti(pos
++));
101 fp
.setBeginIndex(data
->elementAti(pos
++));
102 fp
.setEndIndex(data
->elementAti(pos
++));
104 if (pos
== data
->size()) {
113 #endif /* #if !UCONFIG_NO_FORMATTING */