/src/icu/source/i18n/numparse_validators.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // © 2018 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 | | |
8 | | // Allow implicit conversion from char16_t* to UnicodeString for this file: |
9 | | // Helpful in toString methods and elsewhere. |
10 | | #define UNISTR_FROM_STRING_EXPLICIT |
11 | | |
12 | | #include "numparse_types.h" |
13 | | #include "numparse_validators.h" |
14 | | #include "static_unicode_sets.h" |
15 | | |
16 | | using namespace icu; |
17 | | using namespace icu::numparse; |
18 | | using namespace icu::numparse::impl; |
19 | | |
20 | | |
21 | 0 | void RequireAffixValidator::postProcess(ParsedNumber& result) const { |
22 | 0 | if (result.prefix.isBogus() || result.suffix.isBogus()) { |
23 | | // We saw a prefix or a suffix but not both. Fail the parse. |
24 | 0 | result.flags |= FLAG_FAIL; |
25 | 0 | } |
26 | 0 | } |
27 | | |
28 | 0 | UnicodeString RequireAffixValidator::toString() const { |
29 | 0 | return u"<ReqAffix>"; |
30 | 0 | } |
31 | | |
32 | | |
33 | 0 | void RequireCurrencyValidator::postProcess(ParsedNumber& result) const { |
34 | 0 | if (result.currencyCode[0] == 0) { |
35 | 0 | result.flags |= FLAG_FAIL; |
36 | 0 | } |
37 | 0 | } |
38 | | |
39 | 0 | UnicodeString RequireCurrencyValidator::toString() const { |
40 | 0 | return u"<ReqCurrency>"; |
41 | 0 | } |
42 | | |
43 | | |
44 | | RequireDecimalSeparatorValidator::RequireDecimalSeparatorValidator(bool patternHasDecimalSeparator) |
45 | 0 | : fPatternHasDecimalSeparator(patternHasDecimalSeparator) { |
46 | 0 | } |
47 | | |
48 | 0 | void RequireDecimalSeparatorValidator::postProcess(ParsedNumber& result) const { |
49 | 0 | bool parseHasDecimalSeparator = 0 != (result.flags & FLAG_HAS_DECIMAL_SEPARATOR); |
50 | 0 | if (parseHasDecimalSeparator != fPatternHasDecimalSeparator) { |
51 | 0 | result.flags |= FLAG_FAIL; |
52 | 0 | } |
53 | 0 | } |
54 | | |
55 | 0 | UnicodeString RequireDecimalSeparatorValidator::toString() const { |
56 | 0 | return u"<ReqDecimal>"; |
57 | 0 | } |
58 | | |
59 | | |
60 | 0 | void RequireNumberValidator::postProcess(ParsedNumber& result) const { |
61 | | // Require that a number is matched. |
62 | 0 | if (!result.seenNumber()) { |
63 | 0 | result.flags |= FLAG_FAIL; |
64 | 0 | } |
65 | 0 | } |
66 | | |
67 | 0 | UnicodeString RequireNumberValidator::toString() const { |
68 | 0 | return u"<ReqNumber>"; |
69 | 0 | } |
70 | | |
71 | | MultiplierParseHandler::MultiplierParseHandler(::icu::number::Scale multiplier) |
72 | 0 | : fMultiplier(std::move(multiplier)) {} |
73 | | |
74 | 0 | void MultiplierParseHandler::postProcess(ParsedNumber& result) const { |
75 | 0 | if (!result.quantity.bogus) { |
76 | 0 | fMultiplier.applyReciprocalTo(result.quantity); |
77 | | // NOTE: It is okay if the multiplier was negative. |
78 | 0 | } |
79 | 0 | } |
80 | | |
81 | 0 | UnicodeString MultiplierParseHandler::toString() const { |
82 | 0 | return u"<Scale>"; |
83 | 0 | } |
84 | | |
85 | | #endif /* #if !UCONFIG_NO_FORMATTING */ |