LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - digitformatter.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 21 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 14 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             : *******************************************************************************
       5             : * Copyright (C) 2015, International Business Machines
       6             : * Corporation and others.  All Rights Reserved.
       7             : *******************************************************************************
       8             : * digitformatter.h
       9             : *
      10             : * created on: 2015jan06
      11             : * created by: Travis Keep
      12             : */
      13             : 
      14             : #ifndef __DIGITFORMATTER_H__
      15             : #define __DIGITFORMATTER_H__
      16             : 
      17             : #include "unicode/uobject.h"
      18             : 
      19             : #if !UCONFIG_NO_FORMATTING
      20             : 
      21             : #include "unicode/utypes.h"
      22             : #include "unicode/unistr.h"
      23             : #include "digitaffix.h"
      24             : 
      25             : U_NAMESPACE_BEGIN
      26             : 
      27             : class DecimalFormatSymbols;
      28             : class DigitList;
      29             : class DigitGrouping;
      30             : class DigitInterval;
      31             : class UnicodeString;
      32             : class FieldPositionHandler;
      33             : class IntDigitCountRange;
      34             : class VisibleDigits;
      35             : class VisibleDigitsWithExponent;
      36             : 
      37             : /**
      38             :  * Various options for formatting in fixed point.
      39             :  */
      40             : class U_I18N_API DigitFormatterOptions : public UMemory {
      41             :     public:
      42           0 :     DigitFormatterOptions() : fAlwaysShowDecimal(FALSE) { }
      43             : 
      44             :     /**
      45             :      * Returns TRUE if this object equals rhs.
      46             :      */
      47           0 :     UBool equals(const DigitFormatterOptions &rhs) const {
      48             :         return (
      49           0 :             fAlwaysShowDecimal == rhs.fAlwaysShowDecimal);
      50             :     }
      51             : 
      52             :     /**
      53             :      * Returns TRUE if these options allow for fast formatting of
      54             :      * integers.
      55             :      */
      56           0 :     UBool isFastFormattable() const {
      57           0 :         return (fAlwaysShowDecimal == FALSE);
      58             :     }
      59             : 
      60             :     /**
      61             :      * If TRUE, show the decimal separator even when there are no fraction
      62             :      * digits. default is FALSE.
      63             :      */
      64             :     UBool fAlwaysShowDecimal;
      65             : };
      66             : 
      67             : /**
      68             :  * Various options for formatting an integer.
      69             :  */
      70             : class U_I18N_API DigitFormatterIntOptions : public UMemory {
      71             :     public:
      72           0 :     DigitFormatterIntOptions() : fAlwaysShowSign(FALSE) { }
      73             : 
      74             :     /**
      75             :      * Returns TRUE if this object equals rhs.
      76             :      */
      77           0 :     UBool equals(const DigitFormatterIntOptions &rhs) const {
      78           0 :         return (fAlwaysShowSign == rhs.fAlwaysShowSign);
      79             :     }
      80             : 
      81             :     /**
      82             :      * If TRUE, always prefix the integer with its sign even if the number is
      83             :      * positive. Default is FALSE.
      84             :      */
      85             :     UBool fAlwaysShowSign;
      86             : };
      87             : 
      88             : /**
      89             :  * Options for formatting in scientific notation.
      90             :  */
      91           0 : class U_I18N_API SciFormatterOptions : public UMemory {
      92             :     public:
      93             : 
      94             :     /**
      95             :      * Returns TRUE if this object equals rhs.
      96             :      */
      97           0 :     UBool equals(const SciFormatterOptions &rhs) const {
      98           0 :         return (fMantissa.equals(rhs.fMantissa) &&
      99           0 :                 fExponent.equals(rhs.fExponent));
     100             :     }
     101             : 
     102             :     /**
     103             :      * Options for formatting the mantissa.
     104             :      */
     105             :     DigitFormatterOptions fMantissa;
     106             : 
     107             :     /**
     108             :      * Options for formatting the exponent.
     109             :      */
     110             :     DigitFormatterIntOptions fExponent;
     111             : };
     112             : 
     113             : 
     114             : /**
     115             :  * Does fixed point formatting.
     116             :  *
     117             :  * This class only does fixed point formatting. It does no rounding before
     118             :  * formatting.
     119             :  */
     120           0 : class U_I18N_API DigitFormatter : public UMemory {
     121             : public:
     122             : 
     123             : /**
     124             :  * Decimal separator is period (.), Plus sign is plus (+),
     125             :  * minus sign is minus (-), grouping separator is comma (,), digits are 0-9.
     126             :  */
     127             : DigitFormatter();
     128             : 
     129             : /**
     130             :  * Let symbols determine the digits, decimal separator,
     131             :  * plus and mius sign, grouping separator, and possibly other settings.
     132             :  */
     133             : DigitFormatter(const DecimalFormatSymbols &symbols);
     134             : 
     135             : /**
     136             :  * Change what this instance uses for digits, decimal separator,
     137             :  * plus and mius sign, grouping separator, and possibly other settings
     138             :  * according to symbols.
     139             :  */
     140             : void setDecimalFormatSymbols(const DecimalFormatSymbols &symbols);
     141             : 
     142             : /**
     143             :  * Change what this instance uses for digits, decimal separator,
     144             :  * plus and mius sign, grouping separator, and possibly other settings
     145             :  * according to symbols in the context of monetary amounts.
     146             :  */
     147             : void setDecimalFormatSymbolsForMonetary(const DecimalFormatSymbols &symbols);
     148             : 
     149             : /**
     150             :  * Fixed point formatting.
     151             :  *
     152             :  * @param positiveDigits the value to format
     153             :  *  Negative sign can be present, but it won't show.
     154             :  * @param grouping controls how digit grouping is done
     155             :  * @param options formatting options
     156             :  * @param handler records field positions
     157             :  * @param appendTo formatted value appended here.
     158             :  * @return appendTo
     159             :  */
     160             : UnicodeString &format(
     161             :         const VisibleDigits &positiveDigits,
     162             :         const DigitGrouping &grouping,
     163             :         const DigitFormatterOptions &options,
     164             :         FieldPositionHandler &handler,
     165             :         UnicodeString &appendTo) const;
     166             : 
     167             : /**
     168             :  * formats in scientifc notation.
     169             :  * @param positiveDigits the value to format.
     170             :  *  Negative sign can be present, but it won't show.
     171             :  * @param options formatting options
     172             :  * @param handler records field positions.
     173             :  * @param appendTo formatted value appended here.
     174             :  */
     175             : UnicodeString &format(
     176             :         const VisibleDigitsWithExponent &positiveDigits,
     177             :         const SciFormatterOptions &options,
     178             :         FieldPositionHandler &handler,
     179             :         UnicodeString &appendTo) const;
     180             : 
     181             : /**
     182             :  * Fixed point formatting of integers.
     183             :  * Always performed with no grouping and no decimal point.
     184             :  *
     185             :  * @param positiveValue the value to format must be positive.
     186             :  * @param range specifies minimum and maximum number of digits.
     187             :  * @param handler records field positions
     188             :  * @param appendTo formatted value appended here.
     189             :  * @return appendTo
     190             :  */
     191             : UnicodeString &formatPositiveInt32(
     192             :         int32_t positiveValue,
     193             :         const IntDigitCountRange &range,
     194             :         FieldPositionHandler &handler,
     195             :         UnicodeString &appendTo) const;
     196             : 
     197             : /**
     198             :  * Counts how many code points are needed for fixed formatting.
     199             :  *   If digits is negative, the negative sign is not included in the count.
     200             :  */
     201             : int32_t countChar32(
     202             :         const VisibleDigits &digits,
     203             :         const DigitGrouping &grouping,
     204             :         const DigitFormatterOptions &options) const;
     205             : 
     206             : /**
     207             :  * Counts how many code points are needed for scientific formatting.
     208             :  *   If digits is negative, the negative sign is not included in the count.
     209             :  */
     210             : int32_t countChar32(
     211             :         const VisibleDigitsWithExponent &digits,
     212             :         const SciFormatterOptions &options) const;
     213             : 
     214             : /**
     215             :  * Returns TRUE if this object equals rhs.
     216             :  */
     217             : UBool equals(const DigitFormatter &rhs) const;
     218             : 
     219             : private:
     220             : UChar32 fLocalizedDigits[10];
     221             : UnicodeString fGroupingSeparator;
     222             : UnicodeString fDecimal;
     223             : UnicodeString fNegativeSign;
     224             : UnicodeString fPositiveSign;
     225             : DigitAffix fInfinity;
     226             : DigitAffix fNan;
     227             : UBool fIsStandardDigits;
     228             : UnicodeString fExponent;
     229             : UBool isStandardDigits() const;
     230             : 
     231             : UnicodeString &formatDigits(
     232             :         const uint8_t *digits,
     233             :         int32_t count,
     234             :         const IntDigitCountRange &range,
     235             :         int32_t intField,
     236             :         FieldPositionHandler &handler,
     237             :         UnicodeString &appendTo) const;
     238             : 
     239             : void setOtherDecimalFormatSymbols(const DecimalFormatSymbols &symbols);
     240             : 
     241             : int32_t countChar32(
     242             :         const VisibleDigits &exponent,
     243             :         const DigitInterval &mantissaInterval,
     244             :         const SciFormatterOptions &options) const;
     245             : 
     246           0 : UnicodeString &formatNaN(
     247             :         FieldPositionHandler &handler,
     248             :         UnicodeString &appendTo) const {
     249           0 :     return fNan.format(handler, appendTo);
     250             : }
     251             : 
     252           0 : int32_t countChar32ForNaN() const {
     253           0 :     return fNan.toString().countChar32();
     254             : }
     255             : 
     256           0 : UnicodeString &formatInfinity(
     257             :         FieldPositionHandler &handler,
     258             :         UnicodeString &appendTo) const {
     259           0 :     return fInfinity.format(handler, appendTo);
     260             : }
     261             : 
     262           0 : int32_t countChar32ForInfinity() const {
     263           0 :     return fInfinity.toString().countChar32();
     264             : }
     265             : 
     266             : UnicodeString &formatExponent(
     267             :         const VisibleDigits &digits,
     268             :         const DigitFormatterIntOptions &options,
     269             :         int32_t signField,
     270             :         int32_t intField,
     271             :         FieldPositionHandler &handler,
     272             :         UnicodeString &appendTo) const;
     273             : 
     274             : int32_t countChar32(
     275             :         const DigitGrouping &grouping,
     276             :         const DigitInterval &interval,
     277             :         const DigitFormatterOptions &options) const;
     278             : 
     279             : int32_t countChar32ForExponent(
     280             :         const VisibleDigits &exponent,
     281             :         const DigitFormatterIntOptions &options) const;
     282             : 
     283             : };
     284             : 
     285             : 
     286             : U_NAMESPACE_END
     287             : #endif /* #if !UCONFIG_NO_FORMATTING */
     288             : #endif  // __DIGITFORMATTER_H__

Generated by: LCOV version 1.13