/src/mozilla-central/intl/icu/source/i18n/number_microprops.h
Line | Count | Source (jump to first uncovered line) |
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_MICROPROPS_H__ |
8 | | #define __NUMBER_MICROPROPS_H__ |
9 | | |
10 | | // TODO: minimize includes |
11 | | #include "unicode/numberformatter.h" |
12 | | #include "number_types.h" |
13 | | #include "number_decimalquantity.h" |
14 | | #include "number_scientific.h" |
15 | | #include "number_patternstring.h" |
16 | | #include "number_modifiers.h" |
17 | | #include "number_multiplier.h" |
18 | | #include "number_roundingutils.h" |
19 | | #include "decNumber.h" |
20 | | #include "charstr.h" |
21 | | |
22 | | U_NAMESPACE_BEGIN namespace number { |
23 | | namespace impl { |
24 | | |
25 | | struct MicroProps : public MicroPropsGenerator { |
26 | | |
27 | | // NOTE: All of these fields are properly initialized in NumberFormatterImpl. |
28 | | RoundingImpl rounder; |
29 | | Grouper grouping; |
30 | | Padder padding; |
31 | | IntegerWidth integerWidth; |
32 | | UNumberSignDisplay sign; |
33 | | UNumberDecimalSeparatorDisplay decimal; |
34 | | bool useCurrency; |
35 | | |
36 | | // Note: This struct has no direct ownership of the following pointers. |
37 | | const DecimalFormatSymbols* symbols; |
38 | | const Modifier* modOuter; |
39 | | const Modifier* modMiddle; |
40 | | const Modifier* modInner; |
41 | | |
42 | | // The following "helper" fields may optionally be used during the MicroPropsGenerator. |
43 | | // They live here to retain memory. |
44 | | struct { |
45 | | ScientificModifier scientificModifier; |
46 | | EmptyModifier emptyWeakModifier{false}; |
47 | | EmptyModifier emptyStrongModifier{true}; |
48 | | MultiplierFormatHandler multiplier; |
49 | | } helpers; |
50 | | |
51 | | |
52 | 0 | MicroProps() = default; |
53 | | |
54 | | MicroProps(const MicroProps& other) = default; |
55 | | |
56 | 0 | MicroProps& operator=(const MicroProps& other) = default; |
57 | | |
58 | 0 | void processQuantity(DecimalQuantity&, MicroProps& micros, UErrorCode& status) const U_OVERRIDE { |
59 | 0 | (void) status; |
60 | 0 | if (this == µs) { |
61 | 0 | // Unsafe path: no need to perform a copy. |
62 | 0 | U_ASSERT(!exhausted); |
63 | 0 | micros.exhausted = true; |
64 | 0 | U_ASSERT(exhausted); |
65 | 0 | } else { |
66 | 0 | // Safe path: copy self into the output micros. |
67 | 0 | micros = *this; |
68 | 0 | } |
69 | 0 | } |
70 | | |
71 | | private: |
72 | | // Internal fields: |
73 | | bool exhausted = false; |
74 | | }; |
75 | | |
76 | | } // namespace impl |
77 | | } // namespace number |
78 | | U_NAMESPACE_END |
79 | | |
80 | | #endif // __NUMBER_MICROPROPS_H__ |
81 | | |
82 | | #endif /* #if !UCONFIG_NO_FORMATTING */ |