]>
Commit | Line | Data |
---|---|---|
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_SCIENTIFIC_H__ | |
8 | #define __NUMBER_SCIENTIFIC_H__ | |
9 | ||
10 | #include "number_types.h" | |
11 | ||
12 | U_NAMESPACE_BEGIN namespace number { | |
13 | namespace impl { | |
14 | ||
15 | // Forward-declare | |
16 | class ScientificHandler; | |
17 | ||
18 | class U_I18N_API ScientificModifier : public UMemory, public Modifier { | |
19 | public: | |
20 | ScientificModifier(); | |
21 | ||
22 | void set(int32_t exponent, const ScientificHandler *handler); | |
23 | ||
24 | int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex, | |
25 | UErrorCode &status) const U_OVERRIDE; | |
26 | ||
27 | int32_t getPrefixLength() const U_OVERRIDE; | |
28 | ||
29 | int32_t getCodePointCount() const U_OVERRIDE; | |
30 | ||
31 | bool isStrong() const U_OVERRIDE; | |
32 | ||
33 | bool containsField(UNumberFormatFields field) const U_OVERRIDE; | |
34 | ||
35 | void getParameters(Parameters& output) const U_OVERRIDE; | |
36 | ||
37 | bool semanticallyEquivalent(const Modifier& other) const U_OVERRIDE; | |
38 | ||
39 | private: | |
40 | int32_t fExponent; | |
41 | const ScientificHandler *fHandler; | |
42 | }; | |
43 | ||
44 | class ScientificHandler : public UMemory, public MicroPropsGenerator, public MultiplierProducer { | |
45 | public: | |
46 | ScientificHandler(const Notation *notation, const DecimalFormatSymbols *symbols, | |
47 | const MicroPropsGenerator *parent); | |
48 | ||
49 | void | |
50 | processQuantity(DecimalQuantity &quantity, MicroProps µs, UErrorCode &status) const U_OVERRIDE; | |
51 | ||
52 | int32_t getMultiplier(int32_t magnitude) const U_OVERRIDE; | |
53 | ||
54 | private: | |
55 | const Notation::ScientificSettings& fSettings; | |
56 | const DecimalFormatSymbols *fSymbols; | |
57 | const MicroPropsGenerator *fParent; | |
58 | ||
59 | friend class ScientificModifier; | |
60 | }; | |
61 | ||
62 | } // namespace impl | |
63 | } // namespace number | |
64 | U_NAMESPACE_END | |
65 | ||
66 | #endif //__NUMBER_SCIENTIFIC_H__ | |
67 | ||
68 | #endif /* #if !UCONFIG_NO_FORMATTING */ |