1 /* 2 * Copyright (C) 2015, International Business Machines 3 * Corporation and others. All Rights Reserved. 4 * 5 * file name: digitgrouping.cpp 6 */ 7 8 #include "unicode/utypes.h" 9 10 #include "digitgrouping.h" 11 #include "smallintformatter.h" 12 13 U_NAMESPACE_BEGIN 14 15 UBool DigitGrouping::isSeparatorAt( 16 int32_t digitsLeftOfDecimal, int32_t digitPos) const { 17 if (!isGroupingEnabled(digitsLeftOfDecimal) || digitPos < fGrouping) { 18 return FALSE; 19 } 20 return ((digitPos - fGrouping) % getGrouping2() == 0); 21 } 22 23 int32_t DigitGrouping::getSeparatorCount(int32_t digitsLeftOfDecimal) const { 24 if (!isGroupingEnabled(digitsLeftOfDecimal)) { 25 return 0; 26 } 27 return (digitsLeftOfDecimal - 1 - fGrouping) / getGrouping2() + 1; 28 } 29 30 UBool DigitGrouping::isGroupingEnabled(int32_t digitsLeftOfDecimal) const { 31 return (isGroupingUsed() 32 && digitsLeftOfDecimal >= fGrouping + getMinGrouping()); 33 } 34 35 UBool DigitGrouping::isNoGrouping( 36 int32_t positiveValue, const IntDigitCountRange &range) const { 37 return getSeparatorCount( 38 SmallIntFormatter::estimateDigitCount(positiveValue, range)) == 0; 39 } 40 41 int32_t DigitGrouping::getGrouping2() const { 42 return (fGrouping2 > 0 ? fGrouping2 : fGrouping); 43 } 44 45 int32_t DigitGrouping::getMinGrouping() const { 46 return (fMinGrouping > 0 ? fMinGrouping : 1); 47 } 48 49 void 50 DigitGrouping::clear() { 51 fMinGrouping = 0; 52 fGrouping = 0; 53 fGrouping2 = 0; 54 } 55 56 U_NAMESPACE_END 57 58