Coverage Report

Created: 2025-06-24 06:43

/src/icu/source/i18n/numparse_symbols.h
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
#ifndef __NUMPARSE_SYMBOLS_H__
8
#define __NUMPARSE_SYMBOLS_H__
9
10
#include "numparse_types.h"
11
#include "unicode/uniset.h"
12
#include "static_unicode_sets.h"
13
14
U_NAMESPACE_BEGIN namespace numparse {
15
namespace impl {
16
17
18
/**
19
 * A base class for many matchers that performs a simple match against a UnicodeString and/or UnicodeSet.
20
 *
21
 * @author sffc
22
 */
23
// Exported as U_I18N_API for tests
24
class U_I18N_API SymbolMatcher : public NumberParseMatcher, public UMemory {
25
  public:
26
0
    SymbolMatcher() = default;  // WARNING: Leaves the object in an unusable state
27
28
    const UnicodeSet* getSet() const;
29
30
    bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override;
31
32
    bool smokeTest(const StringSegment& segment) const override;
33
34
    UnicodeString toString() const override;
35
36
    virtual bool isDisabled(const ParsedNumber& result) const = 0;
37
38
    virtual void accept(StringSegment& segment, ParsedNumber& result) const = 0;
39
40
  protected:
41
    UnicodeString fString;
42
    const UnicodeSet* fUniSet; // a reference from numparse_unisets.h; never owned
43
44
    SymbolMatcher(const UnicodeString& symbolString, unisets::Key key);
45
};
46
47
48
// Exported as U_I18N_API for tests
49
class U_I18N_API IgnorablesMatcher : public SymbolMatcher {
50
  public:
51
0
    IgnorablesMatcher() = default;  // WARNING: Leaves the object in an unusable state
52
53
    IgnorablesMatcher(parse_flags_t parseFlags);
54
55
    bool isFlexible() const override;
56
57
    UnicodeString toString() const override;
58
59
  protected:
60
    bool isDisabled(const ParsedNumber& result) const override;
61
62
    void accept(StringSegment& segment, ParsedNumber& result) const override;
63
};
64
65
66
class InfinityMatcher : public SymbolMatcher {
67
  public:
68
0
    InfinityMatcher() = default;  // WARNING: Leaves the object in an unusable state
69
70
    InfinityMatcher(const DecimalFormatSymbols& dfs);
71
72
  protected:
73
    bool isDisabled(const ParsedNumber& result) const override;
74
75
    void accept(StringSegment& segment, ParsedNumber& result) const override;
76
};
77
78
79
// Exported as U_I18N_API for tests
80
class U_I18N_API MinusSignMatcher : public SymbolMatcher {
81
  public:
82
0
    MinusSignMatcher() = default;  // WARNING: Leaves the object in an unusable state
83
84
    MinusSignMatcher(const DecimalFormatSymbols& dfs, bool allowTrailing);
85
86
  protected:
87
    bool isDisabled(const ParsedNumber& result) const override;
88
89
    void accept(StringSegment& segment, ParsedNumber& result) const override;
90
91
  private:
92
    bool fAllowTrailing;
93
};
94
95
96
class NanMatcher : public SymbolMatcher {
97
  public:
98
0
    NanMatcher() = default;  // WARNING: Leaves the object in an unusable state
99
100
    NanMatcher(const DecimalFormatSymbols& dfs);
101
102
  protected:
103
    bool isDisabled(const ParsedNumber& result) const override;
104
105
    void accept(StringSegment& segment, ParsedNumber& result) const override;
106
};
107
108
109
class PaddingMatcher : public SymbolMatcher {
110
  public:
111
0
    PaddingMatcher() = default;  // WARNING: Leaves the object in an unusable state
112
113
    PaddingMatcher(const UnicodeString& padString);
114
115
    bool isFlexible() const override;
116
117
  protected:
118
    bool isDisabled(const ParsedNumber& result) const override;
119
120
    void accept(StringSegment& segment, ParsedNumber& result) const override;
121
};
122
123
124
// Exported as U_I18N_API for tests
125
class U_I18N_API PercentMatcher : public SymbolMatcher {
126
  public:
127
0
    PercentMatcher() = default;  // WARNING: Leaves the object in an unusable state
128
129
    PercentMatcher(const DecimalFormatSymbols& dfs);
130
131
  protected:
132
    bool isDisabled(const ParsedNumber& result) const override;
133
134
    void accept(StringSegment& segment, ParsedNumber& result) const override;
135
};
136
137
// Exported as U_I18N_API for tests
138
class U_I18N_API PermilleMatcher : public SymbolMatcher {
139
  public:
140
0
    PermilleMatcher() = default;  // WARNING: Leaves the object in an unusable state
141
142
    PermilleMatcher(const DecimalFormatSymbols& dfs);
143
144
  protected:
145
    bool isDisabled(const ParsedNumber& result) const override;
146
147
    void accept(StringSegment& segment, ParsedNumber& result) const override;
148
};
149
150
151
// Exported as U_I18N_API for tests
152
class U_I18N_API PlusSignMatcher : public SymbolMatcher {
153
  public:
154
0
    PlusSignMatcher() = default;  // WARNING: Leaves the object in an unusable state
155
156
    PlusSignMatcher(const DecimalFormatSymbols& dfs, bool allowTrailing);
157
158
  protected:
159
    bool isDisabled(const ParsedNumber& result) const override;
160
161
    void accept(StringSegment& segment, ParsedNumber& result) const override;
162
163
  private:
164
    bool fAllowTrailing;
165
};
166
167
168
} // namespace impl
169
} // namespace numparse
170
U_NAMESPACE_END
171
172
#endif //__NUMPARSE_SYMBOLS_H__
173
#endif /* #if !UCONFIG_NO_FORMATTING */