| Index: icu46/source/i18n/fphdlimp.cpp
|
| ===================================================================
|
| --- icu46/source/i18n/fphdlimp.cpp (revision 0)
|
| +++ icu46/source/i18n/fphdlimp.cpp (revision 0)
|
| @@ -0,0 +1,120 @@
|
| +/*
|
| +*******************************************************************************
|
| +* Copyright (C) 2009-2010, International Business Machines Corporation and
|
| +* others. All Rights Reserved.
|
| +*******************************************************************************
|
| +*/
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "fphdlimp.h"
|
| +#include "uvectr32.h"
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +// utility FieldPositionHandler
|
| +// base class, null implementation
|
| +
|
| +FieldPositionHandler::~FieldPositionHandler() {
|
| +}
|
| +
|
| +void
|
| +FieldPositionHandler::addAttribute(int32_t, int32_t, int32_t) {
|
| +}
|
| +
|
| +void
|
| +FieldPositionHandler::shiftLast(int32_t) {
|
| +}
|
| +
|
| +UBool
|
| +FieldPositionHandler::isRecording(void) {
|
| + return FALSE;
|
| +}
|
| +
|
| +
|
| +// utility subclass FieldPositionOnlyHandler
|
| +
|
| +FieldPositionOnlyHandler::FieldPositionOnlyHandler(FieldPosition& _pos)
|
| + : pos(_pos) {
|
| +}
|
| +
|
| +FieldPositionOnlyHandler::~FieldPositionOnlyHandler() {
|
| +}
|
| +
|
| +void
|
| +FieldPositionOnlyHandler::addAttribute(int32_t id, int32_t start, int32_t limit) {
|
| + if (pos.getField() == id) {
|
| + pos.setBeginIndex(start);
|
| + pos.setEndIndex(limit);
|
| + }
|
| +}
|
| +
|
| +void
|
| +FieldPositionOnlyHandler::shiftLast(int32_t delta) {
|
| + if (delta != 0 && pos.getField() != FieldPosition::DONT_CARE && pos.getBeginIndex() != -1) {
|
| + pos.setBeginIndex(delta + pos.getBeginIndex());
|
| + pos.setEndIndex(delta + pos.getEndIndex());
|
| + }
|
| +}
|
| +
|
| +UBool
|
| +FieldPositionOnlyHandler::isRecording(void) {
|
| + return pos.getField() != FieldPosition::DONT_CARE;
|
| +}
|
| +
|
| +
|
| +// utility subclass FieldPositionIteratorHandler
|
| +
|
| +FieldPositionIteratorHandler::FieldPositionIteratorHandler(FieldPositionIterator* posIter,
|
| + UErrorCode& _status)
|
| + : iter(posIter), vec(NULL), status(_status) {
|
| + if (iter && U_SUCCESS(status)) {
|
| + vec = new UVector32(status);
|
| + }
|
| +}
|
| +
|
| +FieldPositionIteratorHandler::~FieldPositionIteratorHandler() {
|
| + // setData adopts the vec regardless of status, so it's safe to null it
|
| + if (iter) {
|
| + iter->setData(vec, status);
|
| + }
|
| + // if iter is null, we never allocated vec, so no need to free it
|
| + vec = NULL;
|
| +}
|
| +
|
| +void
|
| +FieldPositionIteratorHandler::addAttribute(int32_t id, int32_t start, int32_t limit) {
|
| + if (iter && U_SUCCESS(status) && start < limit) {
|
| + int32_t size = vec->size();
|
| + vec->addElement(id, status);
|
| + vec->addElement(start, status);
|
| + vec->addElement(limit, status);
|
| + if (!U_SUCCESS(status)) {
|
| + vec->setSize(size);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void
|
| +FieldPositionIteratorHandler::shiftLast(int32_t delta) {
|
| + if (U_SUCCESS(status) && delta != 0) {
|
| + int32_t i = vec->size();
|
| + if (i > 0) {
|
| + --i;
|
| + vec->setElementAt(delta + vec->elementAti(i), i);
|
| + --i;
|
| + vec->setElementAt(delta + vec->elementAti(i), i);
|
| + }
|
| + }
|
| +}
|
| +
|
| +UBool
|
| +FieldPositionIteratorHandler::isRecording(void) {
|
| + return U_SUCCESS(status);
|
| +}
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* !UCONFIG_NO_FORMATTING */
|
|
|
| Property changes on: icu46/source/i18n/fphdlimp.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|