]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/number_scientific.h
ICU-64252.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / number_scientific.h
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 &micros, 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 */