Home | History | Annotate | Download | only in i18n
      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