Coverage Report

Created: 2018-09-25 14:53

/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 == &micros) {
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 */