LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - digitaffixesandpadding.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 11 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 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             : * digitaffixesandpadding.h
       9             : *
      10             : * created on: 2015jan06
      11             : * created by: Travis Keep
      12             : */
      13             : 
      14             : #ifndef __DIGITAFFIXESANDPADDING_H__
      15             : #define __DIGITAFFIXESANDPADDING_H__
      16             : 
      17             : #include "unicode/utypes.h"
      18             : 
      19             : #if !UCONFIG_NO_FORMATTING
      20             : 
      21             : #include "unicode/uobject.h"
      22             : #include "pluralaffix.h"
      23             : 
      24             : U_NAMESPACE_BEGIN
      25             : 
      26             : class DigitList;
      27             : class ValueFormatter;
      28             : class UnicodeString;
      29             : class FieldPositionHandler;
      30             : class PluralRules;
      31             : class VisibleDigitsWithExponent;
      32             : 
      33             : /**
      34             :  * A formatter of numbers. This class can format any numerical value
      35             :  * except for not a number (NaN), positive infinity, and negative infinity.
      36             :  * This class manages prefixes, suffixes, and padding but delegates the
      37             :  * formatting of actual positive values to a ValueFormatter.
      38             :  */
      39           0 : class U_I18N_API DigitAffixesAndPadding : public UMemory {
      40             : public:
      41             : 
      42             : /**
      43             :  * Equivalent to DecimalFormat EPadPosition, but redeclared here to prevent
      44             :  * depending on DecimalFormat which would cause a circular dependency.
      45             :  */
      46             : enum EPadPosition {
      47             :     kPadBeforePrefix,
      48             :     kPadAfterPrefix,
      49             :     kPadBeforeSuffix,
      50             :     kPadAfterSuffix
      51             : };
      52             : 
      53             : /**
      54             :  * The positive prefix
      55             :  */
      56             : PluralAffix fPositivePrefix;
      57             : 
      58             : /**
      59             :  * The positive suffix
      60             :  */
      61             : PluralAffix fPositiveSuffix;
      62             : 
      63             : /**
      64             :  * The negative suffix
      65             :  */
      66             : PluralAffix fNegativePrefix;
      67             : 
      68             : /**
      69             :  * The negative suffix
      70             :  */
      71             : PluralAffix fNegativeSuffix;
      72             : 
      73             : /**
      74             :  * The padding position
      75             :  */
      76             : EPadPosition fPadPosition;
      77             : 
      78             : /**
      79             :  * The padding character.
      80             :  */
      81             : UChar32 fPadChar;
      82             : 
      83             : /**
      84             :  * The field width in code points. The format method inserts instances of
      85             :  * the padding character as needed in the desired padding position so that
      86             :  * the entire formatted string contains this many code points. If the
      87             :  * formatted string already exceeds this many code points, the format method
      88             :  * inserts no padding.
      89             :  */
      90             : int32_t fWidth;
      91             : 
      92             : /**
      93             :  * Pad position is before prefix; padding character is '*' field width is 0.
      94             :  * The affixes are all the empty string with no annotated fields with just
      95             :  * the 'other' plural variation.
      96             :  */
      97           0 : DigitAffixesAndPadding()
      98           0 :         : fPadPosition(kPadBeforePrefix), fPadChar(0x2a), fWidth(0) { }
      99             : 
     100             : /**
     101             :  * Returns TRUE if this object is equal to rhs.
     102             :  */
     103           0 : UBool equals(const DigitAffixesAndPadding &rhs) const {
     104           0 :     return (fPositivePrefix.equals(rhs.fPositivePrefix) &&
     105           0 :             fPositiveSuffix.equals(rhs.fPositiveSuffix) &&
     106           0 :             fNegativePrefix.equals(rhs.fNegativePrefix) &&
     107           0 :             fNegativeSuffix.equals(rhs.fNegativeSuffix) &&
     108           0 :             fPadPosition == rhs.fPadPosition &&
     109           0 :             fWidth == rhs.fWidth &&
     110           0 :             fPadChar == rhs.fPadChar);
     111             : }
     112             : 
     113             : /**
     114             :  * Returns TRUE if a plural rules instance is needed to complete the
     115             :  * formatting by detecting if any of the affixes have multiple plural
     116             :  * variations.
     117             :  */
     118             : UBool needsPluralRules() const;
     119             : 
     120             : /**
     121             :  * Formats value and appends to appendTo.
     122             :  *
     123             :  * @param value the value to format. May be NaN or ininite.
     124             :  * @param formatter handles the details of formatting the actual value.
     125             :  * @param handler records field positions
     126             :  * @param optPluralRules the plural rules, but may be NULL if
     127             :  *   needsPluralRules returns FALSE. 
     128             :  * @appendTo formatted string appended here.
     129             :  * @status any error returned here.
     130             :  */
     131             : UnicodeString &format(
     132             :         const VisibleDigitsWithExponent &value,
     133             :         const ValueFormatter &formatter,
     134             :         FieldPositionHandler &handler,
     135             :         const PluralRules *optPluralRules,
     136             :         UnicodeString &appendTo,
     137             :         UErrorCode &status) const;
     138             : 
     139             : /**
     140             :  * For testing only.
     141             :  */
     142             : UnicodeString &format(
     143             :         DigitList &value,
     144             :         const ValueFormatter &formatter,
     145             :         FieldPositionHandler &handler,
     146             :         const PluralRules *optPluralRules,
     147             :         UnicodeString &appendTo,
     148             :         UErrorCode &status) const;
     149             : 
     150             : /**
     151             :  * Formats a 32-bit integer and appends to appendTo. When formatting an
     152             :  * integer, this method is preferred to plain format as it can run
     153             :  * several times faster under certain conditions.
     154             :  *
     155             :  * @param value the value to format.
     156             :  * @param formatter handles the details of formatting the actual value.
     157             :  * @param handler records field positions
     158             :  * @param optPluralRules the plural rules, but may be NULL if
     159             :  *   needsPluralRules returns FALSE. 
     160             :  * @appendTo formatted string appended here.
     161             :  * @status any error returned here.
     162             :  */
     163             : UnicodeString &formatInt32(
     164             :         int32_t value,
     165             :         const ValueFormatter &formatter,
     166             :         FieldPositionHandler &handler,
     167             :         const PluralRules *optPluralRules,
     168             :         UnicodeString &appendTo,
     169             :         UErrorCode &status) const;
     170             : 
     171             : private:
     172             : UnicodeString &appendPadding(int32_t paddingCount, UnicodeString &appendTo) const;
     173             : 
     174             : };
     175             : 
     176             : 
     177             : U_NAMESPACE_END
     178             : #endif /* #if !UCONFIG_NO_FORMATTING */
     179             : #endif  // __DIGITAFFIXANDPADDING_H__

Generated by: LCOV version 1.13