summaryrefslogtreecommitdiff
path: root/deps/icu-small/source/i18n/fphdlimp.cpp
diff options
context:
space:
mode:
authorSteven R. Loomis <srloomis@us.ibm.com>2016-04-08 19:03:16 -0700
committerSteven R. Loomis <srloomis@us.ibm.com>2016-05-04 16:02:45 -0700
commit2bbd1cd6004b3e1467e30d860385a85dad01fe24 (patch)
treeb812046e89e46e0de09bc858e0b128787cbc0632 /deps/icu-small/source/i18n/fphdlimp.cpp
parentcd752e8463fad7c4805951d9ba47cd2f39691f2d (diff)
downloadandroid-node-v8-2bbd1cd6004b3e1467e30d860385a85dad01fe24.tar.gz
android-node-v8-2bbd1cd6004b3e1467e30d860385a85dad01fe24.tar.bz2
android-node-v8-2bbd1cd6004b3e1467e30d860385a85dad01fe24.zip
deps: Intl: Check in "small-icu" 57.1
* this commit has "small" ICU 57.1. See other related commit for tools to generate this commit. Fixes: https://github.com/nodejs/node/issues/3476 PR-URL: https://github.com/nodejs/node/pull/6088 Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'deps/icu-small/source/i18n/fphdlimp.cpp')
-rw-r--r--deps/icu-small/source/i18n/fphdlimp.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/deps/icu-small/source/i18n/fphdlimp.cpp b/deps/icu-small/source/i18n/fphdlimp.cpp
new file mode 100644
index 0000000000..a8fa6f46e6
--- /dev/null
+++ b/deps/icu-small/source/i18n/fphdlimp.cpp
@@ -0,0 +1,120 @@
+/*
+*******************************************************************************
+* Copyright (C) 2009-2015, 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) const {
+ 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) const {
+ 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) const {
+ return U_SUCCESS(status);
+}
+
+U_NAMESPACE_END
+
+#endif /* !UCONFIG_NO_FORMATTING */