• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
isSeparatorAt(int32_t digitsLeftOfDecimal,int32_t digitPos) const15 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 
getSeparatorCount(int32_t digitsLeftOfDecimal) const23 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 
isGroupingEnabled(int32_t digitsLeftOfDecimal) const30 UBool DigitGrouping::isGroupingEnabled(int32_t digitsLeftOfDecimal) const {
31     return (isGroupingUsed()
32             && digitsLeftOfDecimal >= fGrouping + getMinGrouping());
33 }
34 
isNoGrouping(int32_t positiveValue,const IntDigitCountRange & range) const35 UBool DigitGrouping::isNoGrouping(
36         int32_t positiveValue, const IntDigitCountRange &range) const {
37     return getSeparatorCount(
38             SmallIntFormatter::estimateDigitCount(positiveValue, range)) == 0;
39 }
40 
getGrouping2() const41 int32_t DigitGrouping::getGrouping2() const {
42     return (fGrouping2 > 0 ? fGrouping2 : fGrouping);
43 }
44 
getMinGrouping() const45 int32_t DigitGrouping::getMinGrouping() const {
46     return (fMinGrouping > 0 ? fMinGrouping : 1);
47 }
48 
49 void
clear()50 DigitGrouping::clear() {
51     fMinGrouping = 0;
52     fGrouping = 0;
53     fGrouping2 = 0;
54 }
55 
56 U_NAMESPACE_END
57 
58