summaryrefslogtreecommitdiffstats
path: root/intl/icu/source/common/pluralmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'intl/icu/source/common/pluralmap.cpp')
-rw-r--r--intl/icu/source/common/pluralmap.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/intl/icu/source/common/pluralmap.cpp b/intl/icu/source/common/pluralmap.cpp
new file mode 100644
index 0000000000..7e6156de89
--- /dev/null
+++ b/intl/icu/source/common/pluralmap.cpp
@@ -0,0 +1,44 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ * Copyright (C) 2015, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ */
+
+#include "unicode/unistr.h"
+#include "charstr.h"
+#include "cstring.h"
+#include "pluralmap.h"
+
+U_NAMESPACE_BEGIN
+
+static const char * const gPluralForms[] = {
+ "other", "zero", "one", "two", "few", "many"};
+
+PluralMapBase::Category
+PluralMapBase::toCategory(const char *pluralForm) {
+ for (int32_t i = 0; i < UPRV_LENGTHOF(gPluralForms); ++i) {
+ if (uprv_strcmp(pluralForm, gPluralForms[i]) == 0) {
+ return static_cast<Category>(i);
+ }
+ }
+ return NONE;
+}
+
+PluralMapBase::Category
+PluralMapBase::toCategory(const UnicodeString &pluralForm) {
+ CharString cCategory;
+ UErrorCode status = U_ZERO_ERROR;
+ cCategory.appendInvariantChars(pluralForm, status);
+ return U_FAILURE(status) ? NONE : toCategory(cCategory.data());
+}
+
+const char *PluralMapBase::getCategoryName(Category c) {
+ int32_t index = c;
+ return (index < 0 || index >= UPRV_LENGTHOF(gPluralForms)) ?
+ nullptr : gPluralForms[index];
+}
+
+
+U_NAMESPACE_END
+