Index: icu46/source/i18n/fpositer.cpp |
=================================================================== |
--- icu46/source/i18n/fpositer.cpp (revision 0) |
+++ icu46/source/i18n/fpositer.cpp (revision 0) |
@@ -0,0 +1,109 @@ |
+/* |
+****************************************************************************** |
+* Copyright (C) 2009-2010, International Business Machines Corporation and |
+* others. All Rights Reserved. |
+****************************************************************************** |
+* Date Name Description |
+* 12/14/09 doug Creation. |
+****************************************************************************** |
+*/ |
+ |
+#include "unicode/utypes.h" |
+ |
+#if !UCONFIG_NO_FORMATTING |
+ |
+#include "unicode/fpositer.h" |
+#include "cmemory.h" |
+#include "uvectr32.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(FieldPositionIterator) |
+ |
+FieldPositionIterator::~FieldPositionIterator() { |
+ delete data; |
+ data = NULL; |
+ pos = -1; |
+} |
+ |
+FieldPositionIterator::FieldPositionIterator() |
+ : data(NULL), pos(-1) { |
+} |
+ |
+FieldPositionIterator::FieldPositionIterator(const FieldPositionIterator &rhs) |
+ : UObject(rhs), data(NULL), pos(rhs.pos) { |
+ |
+ if (rhs.data) { |
+ UErrorCode status = U_ZERO_ERROR; |
+ data = new UVector32(status); |
+ data->assign(*rhs.data, status); |
+ if (status != U_ZERO_ERROR) { |
+ delete data; |
+ data = NULL; |
+ pos = -1; |
+ } |
+ } |
+} |
+ |
+UBool FieldPositionIterator::operator==(const FieldPositionIterator &rhs) const { |
+ if (&rhs == this) { |
+ return TRUE; |
+ } |
+ if (pos != rhs.pos) { |
+ return FALSE; |
+ } |
+ if (!data) { |
+ return rhs.data == NULL; |
+ } |
+ return rhs.data ? data->operator==(*rhs.data) : FALSE; |
+} |
+ |
+void FieldPositionIterator::setData(UVector32 *adopt, UErrorCode& status) { |
+ // Verify that adopt has valid data, and update status if it doesn't. |
+ if (U_SUCCESS(status)) { |
+ if (adopt) { |
+ if ((adopt->size() % 3) != 0) { |
+ status = U_ILLEGAL_ARGUMENT_ERROR; |
+ } else { |
+ for (int i = 1; i < adopt->size(); i += 3) { |
+ if (adopt->elementAti(i) >= adopt->elementAti(i+1)) { |
+ status = U_ILLEGAL_ARGUMENT_ERROR; |
+ break; |
+ } |
+ } |
+ } |
+ } |
+ } |
+ |
+ // We own the data, even if status is in error, so we need to delete it now |
+ // if we're not keeping track of it. |
+ if (!U_SUCCESS(status)) { |
+ delete adopt; |
+ return; |
+ } |
+ |
+ delete data; |
+ data = adopt; |
+ pos = adopt == NULL ? -1 : 0; |
+} |
+ |
+UBool FieldPositionIterator::next(FieldPosition& fp) { |
+ if (pos == -1) { |
+ return FALSE; |
+ } |
+ |
+ fp.setField(data->elementAti(pos++)); |
+ fp.setBeginIndex(data->elementAti(pos++)); |
+ fp.setEndIndex(data->elementAti(pos++)); |
+ |
+ if (pos == data->size()) { |
+ pos = -1; |
+ } |
+ |
+ return TRUE; |
+} |
+ |
+U_NAMESPACE_END |
+ |
+#endif /* #if !UCONFIG_NO_FORMATTING */ |
+ |
Property changes on: icu46/source/i18n/fpositer.cpp |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |