Coverage Report

Created: 2025-06-24 06:43

/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 */