• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 && !UPRV_INCOMPLETE_CPP11_SUPPORT
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(UErrorCode &status) const U_OVERRIDE;
28 
29     int32_t getCodePointCount(UErrorCode &status) const U_OVERRIDE;
30 
31     bool isStrong() const U_OVERRIDE;
32 
33   private:
34     int32_t fExponent;
35     const ScientificHandler *fHandler;
36 };
37 
38 class ScientificHandler : public UMemory, public MicroPropsGenerator, public MultiplierProducer {
39   public:
40     ScientificHandler(const Notation *notation, const DecimalFormatSymbols *symbols,
41                       const MicroPropsGenerator *parent);
42 
43     void
44     processQuantity(DecimalQuantity &quantity, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
45 
46     int32_t getMultiplier(int32_t magnitude) const U_OVERRIDE;
47 
48   private:
49     const Notation::ScientificSettings& fSettings;
50     const DecimalFormatSymbols *fSymbols;
51     const MicroPropsGenerator *fParent;
52 
53     friend class ScientificModifier;
54 };
55 
56 } // namespace impl
57 } // namespace number
58 U_NAMESPACE_END
59 
60 #endif //__NUMBER_SCIENTIFIC_H__
61 
62 #endif /* #if !UCONFIG_NO_FORMATTING */
63