aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/icu/i18n/number_microprops.h
blob: 3f82a0c4b78ef4a4993d291eb269e9ee0e59c8b5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// © 2017 and later: Unicode, Inc. and others. 
// License & terms of use: http://www.unicode.org/copyright.html 
 
#include "unicode/utypes.h" 
 
#if !UCONFIG_NO_FORMATTING 
#ifndef __NUMBER_MICROPROPS_H__ 
#define __NUMBER_MICROPROPS_H__ 
 
// TODO: minimize includes 
#include "unicode/numberformatter.h" 
#include "number_types.h" 
#include "number_decimalquantity.h" 
#include "number_scientific.h" 
#include "number_patternstring.h" 
#include "number_modifiers.h" 
#include "number_multiplier.h" 
#include "number_roundingutils.h" 
#include "decNumber.h" 
#include "charstr.h" 
 
U_NAMESPACE_BEGIN namespace number { 
namespace impl { 
 
struct MicroProps : public MicroPropsGenerator { 
 
    // NOTE: All of these fields are properly initialized in NumberFormatterImpl. 
    RoundingImpl rounder; 
    Grouper grouping; 
    Padder padding; 
    IntegerWidth integerWidth; 
    UNumberSignDisplay sign; 
    UNumberDecimalSeparatorDisplay decimal; 
    bool useCurrency; 
    char nsName[9]; 
 
    // Note: This struct has no direct ownership of the following pointers. 
    const DecimalFormatSymbols* symbols; 
    const Modifier* modOuter; 
    const Modifier* modMiddle = nullptr; 
    const Modifier* modInner; 
 
    // The following "helper" fields may optionally be used during the MicroPropsGenerator. 
    // They live here to retain memory. 
    struct { 
        ScientificModifier scientificModifier; 
        EmptyModifier emptyWeakModifier{false}; 
        EmptyModifier emptyStrongModifier{true}; 
        MultiplierFormatHandler multiplier; 
    } helpers; 
 
 
    MicroProps() = default; 
 
    MicroProps(const MicroProps& other) = default; 
 
    MicroProps& operator=(const MicroProps& other) = default; 
 
    void processQuantity(DecimalQuantity&, MicroProps& micros, UErrorCode& status) const U_OVERRIDE { 
        (void) status; 
        if (this == &micros) { 
            // Unsafe path: no need to perform a copy. 
            U_ASSERT(!exhausted); 
            micros.exhausted = true; 
            U_ASSERT(exhausted); 
        } else { 
            // Safe path: copy self into the output micros. 
            micros = *this; 
        } 
    } 
 
  private: 
    // Internal fields: 
    bool exhausted = false; 
}; 
 
} // namespace impl 
} // namespace number 
U_NAMESPACE_END 
 
#endif // __NUMBER_MICROPROPS_H__ 
 
#endif /* #if !UCONFIG_NO_FORMATTING */