LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - valueformatter.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 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 Corporation and         *
       6             : * others. All Rights Reserved.                                                *
       7             : *******************************************************************************
       8             : */
       9             : 
      10             : #ifndef VALUEFORMATTER_H
      11             : #define VALUEFORMATTER_H
      12             : 
      13             : #if !UCONFIG_NO_FORMATTING
      14             : 
      15             : #include "unicode/uobject.h"
      16             : #include "unicode/utypes.h"
      17             : 
      18             : 
      19             : 
      20             : U_NAMESPACE_BEGIN
      21             : 
      22             : class UnicodeString;
      23             : class DigitList;
      24             : class FieldPositionHandler;
      25             : class DigitGrouping;
      26             : class PluralRules;
      27             : class FixedPrecision;
      28             : class DigitFormatter;
      29             : class DigitFormatterOptions;
      30             : class ScientificPrecision;
      31             : class SciFormatterOptions;
      32             : class FixedDecimal;
      33             : class VisibleDigitsWithExponent;
      34             : 
      35             : 
      36             : /**
      37             :  * A closure around rounding and formatting a value. As these instances are
      38             :  * designed to be short lived (they only exist while formatting a value), they
      39             :  * do not own their own attributes. Rather the caller maintains ownership of
      40             :  * all attributes. A caller first calls a prepareXXX method on an instance
      41             :  * to share its data before using that instance. Using an
      42             :  * instance without first calling a prepareXXX method results in an
      43             :  * assertion error and a program crash.
      44             :  */
      45             : class U_I18N_API ValueFormatter : public UObject {
      46             : public:
      47           0 :     ValueFormatter() : fType(kFormatTypeCount) {
      48           0 :     }
      49             : 
      50             :     virtual ~ValueFormatter();
      51             : 
      52             :     /**
      53             :      * This function is here only to support the protected round() method
      54             :      * in DecimalFormat. It serves no ther purpose than that.
      55             :      *
      56             :      * @param value this value is rounded in place.
      57             :      * @param status any error returned here.
      58             :      */
      59             :     DigitList &round(DigitList &value, UErrorCode &status) const;
      60             : 
      61             :     /**
      62             :      * Returns TRUE if the absolute value of value can be fast formatted
      63             :      * using ValueFormatter::formatInt32.
      64             :      */
      65             :     UBool isFastFormattable(int32_t value) const;
      66             : 
      67             :     /**
      68             :      * Converts value to a VisibleDigitsWithExponent.
      69             :      * Result may be fixed point or scientific.
      70             :      */
      71             :     VisibleDigitsWithExponent &toVisibleDigitsWithExponent(
      72             :             int64_t value,
      73             :             VisibleDigitsWithExponent &digits,
      74             :             UErrorCode &status) const;
      75             : 
      76             :     /**
      77             :      * Converts value to a VisibleDigitsWithExponent.
      78             :      * Result may be fixed point or scientific.
      79             :      */
      80             :     VisibleDigitsWithExponent &toVisibleDigitsWithExponent(
      81             :             DigitList &value,
      82             :             VisibleDigitsWithExponent &digits,
      83             :             UErrorCode &status) const;
      84             : 
      85             :     /**
      86             :      * formats positiveValue and appends to appendTo. Returns appendTo.
      87             :      * @param positiveValue If negative, no negative sign is formatted.
      88             :      * @param handler stores the field positions
      89             :      * @param appendTo formatted value appended here.
      90             :      */
      91             :     UnicodeString &format(
      92             :         const VisibleDigitsWithExponent &positiveValue,
      93             :         FieldPositionHandler &handler,
      94             :         UnicodeString &appendTo) const;
      95             : 
      96             : 
      97             :     /**
      98             :      * formats positiveValue and appends to appendTo. Returns appendTo.
      99             :      * value must be positive. Calling formatInt32 to format a value when
     100             :      * isFastFormattable indicates that the value cannot be fast formatted
     101             :      * results in undefined behavior.
     102             :      */
     103             :     UnicodeString &formatInt32(
     104             :         int32_t positiveValue,
     105             :         FieldPositionHandler &handler,
     106             :         UnicodeString &appendTo) const;
     107             : 
     108             :     /**
     109             :      * Returns the number of code points needed to format.
     110             :      * @param positiveValue if negative, the negative sign is not included
     111             :      *   in count.
     112             :      */
     113             :     int32_t countChar32(
     114             :             const VisibleDigitsWithExponent &positiveValue) const;
     115             :   
     116             :     /**
     117             :      * Prepares this instance for fixed decimal formatting.
     118             :      */
     119             :     void prepareFixedDecimalFormatting(
     120             :         const DigitFormatter &formatter,
     121             :         const DigitGrouping &grouping,
     122             :         const FixedPrecision &precision,
     123             :         const DigitFormatterOptions &options);
     124             : 
     125             :     /**
     126             :      * Prepares this instance for scientific formatting.
     127             :      */
     128             :     void prepareScientificFormatting(
     129             :         const DigitFormatter &formatter,
     130             :         const ScientificPrecision &precision,
     131             :         const SciFormatterOptions &options);
     132             : 
     133             : private:
     134             :     ValueFormatter(const ValueFormatter &);
     135             :     ValueFormatter &operator=(const ValueFormatter &);
     136             :     enum FormatType {
     137             :         kFixedDecimal,
     138             :         kScientificNotation,
     139             :         kFormatTypeCount
     140             :     };
     141             : 
     142             :     FormatType fType;
     143             : 
     144             :     // for fixed decimal and scientific formatting
     145             :     const DigitFormatter *fDigitFormatter;
     146             : 
     147             :     // for fixed decimal formatting
     148             :     const FixedPrecision *fFixedPrecision;
     149             :     const DigitFormatterOptions *fFixedOptions;
     150             :     const DigitGrouping *fGrouping;
     151             : 
     152             :     // for scientific formatting
     153             :     const ScientificPrecision *fScientificPrecision;
     154             :     const SciFormatterOptions *fScientificOptions;
     155             : };
     156             : 
     157             : U_NAMESPACE_END
     158             : 
     159             : #endif /* !UCONFIG_NO_FORMATTING */
     160             : 
     161             : #endif /* VALUEFORMATTER_H */

Generated by: LCOV version 1.13