]> git.saurik.com Git - apple/icu.git/blame - icuSources/i18n/number_utils.h
ICU-62141.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / number_utils.h
CommitLineData
0f5d89e8
A
1// © 2017 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3
4#include "unicode/utypes.h"
5
6#if !UCONFIG_NO_FORMATTING
7#ifndef __NUMBER_UTILS_H__
8#define __NUMBER_UTILS_H__
9
10#include "unicode/numberformatter.h"
11#include "number_types.h"
12#include "number_decimalquantity.h"
13#include "number_scientific.h"
14#include "number_patternstring.h"
15#include "number_modifiers.h"
16#include "number_multiplier.h"
17#include "number_roundingutils.h"
18#include "decNumber.h"
19#include "charstr.h"
20
21U_NAMESPACE_BEGIN
22
23namespace number {
24namespace impl {
25
26enum CldrPatternStyle {
27 CLDR_PATTERN_STYLE_DECIMAL,
28 CLDR_PATTERN_STYLE_CURRENCY,
29 CLDR_PATTERN_STYLE_ACCOUNTING,
30 CLDR_PATTERN_STYLE_PERCENT,
31 CLDR_PATTERN_STYLE_SCIENTIFIC,
32 CLDR_PATTERN_STYLE_COUNT,
33};
34
35// Namespace for naked functions
36namespace utils {
37
38inline int32_t insertDigitFromSymbols(NumberStringBuilder& output, int32_t index, int8_t digit,
39 const DecimalFormatSymbols& symbols, Field field,
40 UErrorCode& status) {
41 if (symbols.getCodePointZero() != -1) {
42 return output.insertCodePoint(index, symbols.getCodePointZero() + digit, field, status);
43 }
44 return output.insert(index, symbols.getConstDigitSymbol(digit), field, status);
45}
46
47inline bool unitIsCurrency(const MeasureUnit& unit) {
48 return uprv_strcmp("currency", unit.getType()) == 0;
49}
50
51inline bool unitIsNoUnit(const MeasureUnit& unit) {
52 return uprv_strcmp("none", unit.getType()) == 0;
53}
54
55inline bool unitIsPercent(const MeasureUnit& unit) {
56 return uprv_strcmp("percent", unit.getSubtype()) == 0;
57}
58
59inline bool unitIsPermille(const MeasureUnit& unit) {
60 return uprv_strcmp("permille", unit.getSubtype()) == 0;
61}
62
63// NOTE: In Java, this method is in NumberFormat.java
64const char16_t*
65getPatternForStyle(const Locale& locale, const char* nsName, CldrPatternStyle style, UErrorCode& status);
66
67/**
68 * Computes the plural form for this number based on the specified set of rules.
69 *
70 * @param rules A {@link PluralRules} object representing the set of rules.
71 * @return The {@link StandardPlural} according to the PluralRules. If the plural form is not in
72 * the set of standard plurals, {@link StandardPlural#OTHER} is returned instead.
73 */
74inline StandardPlural::Form getStandardPlural(const PluralRules *rules,
75 const IFixedDecimal &fdec) {
76 if (rules == nullptr) {
77 // Fail gracefully if the user didn't provide a PluralRules
78 return StandardPlural::Form::OTHER;
79 } else {
80 UnicodeString ruleString = rules->select(fdec);
81 return StandardPlural::orOtherFromString(ruleString);
82 }
83}
84
85} // namespace utils
86
87} // namespace impl
88} // namespace number
89
90U_NAMESPACE_END
91
92#endif //__NUMBER_UTILS_H__
93
94#endif /* #if !UCONFIG_NO_FORMATTING */