LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - digitinterval.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 25 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 10 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             : * digitinterval.h
       9             : *
      10             : * created on: 2015jan6
      11             : * created by: Travis Keep
      12             : */
      13             : 
      14             : #ifndef __DIGITINTERVAL_H__
      15             : #define __DIGITINTERVAL_H__
      16             : 
      17             : #include "unicode/uobject.h"
      18             : #include "unicode/utypes.h"
      19             : 
      20             : U_NAMESPACE_BEGIN
      21             : 
      22             : /**
      23             :  * An interval of digits.
      24             :  * DigitIntervals are for fixed point formatting. A DigitInterval specifies
      25             :  * zero or more integer digits and zero or more fractional digits. This class
      26             :  * specifies particular digits in a number by their power of 10. For example,
      27             :  * the digit position just to the left of the decimal is 0, and the digit
      28             :  * position just left of that is 1. The digit position just to the right of
      29             :  * the decimal is -1. The digit position just to the right of that is -2.
      30             :  */
      31             : class U_I18N_API DigitInterval : public UMemory {
      32             : public:
      33             : 
      34             :     /**
      35             :      * Spans all integer and fraction digits
      36             :      */
      37           0 :     DigitInterval()
      38           0 :             : fLargestExclusive(INT32_MAX), fSmallestInclusive(INT32_MIN) { }
      39             : 
      40             : 
      41             :     /**
      42             :      * Makes this instance span all digits.
      43             :      */
      44           0 :     void clear() {
      45           0 :         fLargestExclusive = INT32_MAX;
      46           0 :         fSmallestInclusive = INT32_MIN;
      47           0 :     }
      48             : 
      49             :     /**
      50             :      * Returns TRUE if this interval contains this digit position.
      51             :      */
      52             :     UBool contains(int32_t digitPosition) const;
      53             : 
      54             :     /**
      55             :      * Returns true if this object is the same as rhs.
      56             :      */
      57           0 :     UBool equals(const DigitInterval &rhs) const {
      58           0 :         return ((fLargestExclusive == rhs.fLargestExclusive) &&
      59           0 :                 (fSmallestInclusive == rhs.fSmallestInclusive));
      60             :     }
      61             : 
      62             :     /**
      63             :      * Expand this interval so that it contains all of rhs.
      64             :      */
      65             :     void expandToContain(const DigitInterval &rhs);
      66             : 
      67             :     /**
      68             :      * Shrink this interval so that it contains no more than rhs.
      69             :      */
      70             :     void shrinkToFitWithin(const DigitInterval &rhs);
      71             : 
      72             :     /**
      73             :      * Expand this interval as necessary to contain digit with given exponent
      74             :      * After this method returns, this interval is guaranteed to contain
      75             :      * digitExponent.
      76             :      */
      77             :     void expandToContainDigit(int32_t digitExponent);
      78             : 
      79             :     /**
      80             :      * Changes the number of digits to the left of the decimal point that
      81             :      * this interval spans. If count is negative, it means span all digits
      82             :      * to the left of the decimal point.
      83             :      */
      84             :     void setIntDigitCount(int32_t count);
      85             : 
      86             :     /**
      87             :      * Changes the number of digits to the right of the decimal point that
      88             :      * this interval spans. If count is negative, it means span all digits
      89             :      * to the right of the decimal point.
      90             :      */
      91             :     void setFracDigitCount(int32_t count);
      92             : 
      93             :     /**
      94             :      * Sets the least significant inclusive value to smallest. If smallest >= 0
      95             :      * then least significant inclusive value becomes 0.
      96             :      */
      97           0 :     void setLeastSignificantInclusive(int32_t smallest) {
      98           0 :         fSmallestInclusive = smallest < 0 ? smallest : 0;
      99           0 :     }
     100             : 
     101             :     /**
     102             :      * Sets the most significant exclusive value to largest.
     103             :      * If largest <= 0 then most significant exclusive value becomes 0.
     104             :      */
     105           0 :     void setMostSignificantExclusive(int32_t largest) {
     106           0 :         fLargestExclusive = largest > 0 ? largest : 0;
     107           0 :     }
     108             : 
     109             :     /**
     110             :      * If returns 8, the most significant digit in interval is the 10^7 digit.
     111             :      * Returns INT32_MAX if this interval spans all digits to left of
     112             :      * decimal point.
     113             :      */
     114           0 :     int32_t getMostSignificantExclusive() const {
     115           0 :         return fLargestExclusive;
     116             :     }
     117             : 
     118             :     /**
     119             :      * Returns number of digits to the left of the decimal that this
     120             :      * interval includes. This is a synonym for getMostSignificantExclusive().
     121             :      */
     122           0 :     int32_t getIntDigitCount() const { 
     123           0 :         return fLargestExclusive;
     124             :     }
     125             : 
     126             :     /**
     127             :      * Returns number of digits to the right of the decimal that this
     128             :      * interval includes.
     129             :      */
     130           0 :     int32_t getFracDigitCount() const {
     131           0 :         return fSmallestInclusive == INT32_MIN ? INT32_MAX : -fSmallestInclusive;
     132             :     }
     133             : 
     134             :     /**
     135             :      * Returns the total number of digits that this interval spans.
     136             :      * Caution: If this interval spans all digits to the left or right of
     137             :      * decimal point instead of some fixed number, then what length()
     138             :      * returns is undefined.
     139             :      */
     140           0 :     int32_t length() const {
     141           0 :         return fLargestExclusive - fSmallestInclusive;
     142             :      }
     143             : 
     144             :     /**
     145             :      * If returns -3, the least significant digit in interval is the 10^-3
     146             :      * digit. Returns INT32_MIN if this interval spans all digits to right of
     147             :      * decimal point.
     148             :      */
     149           0 :     int32_t getLeastSignificantInclusive() const {
     150           0 :         return fSmallestInclusive;
     151             :     }
     152             : private:
     153             :     int32_t fLargestExclusive;
     154             :     int32_t fSmallestInclusive;
     155             : };
     156             : 
     157             : U_NAMESPACE_END
     158             : 
     159             : #endif  // __DIGITINTERVAL_H__

Generated by: LCOV version 1.13