]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/digitgrouping.cpp
ICU-57132.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / digitgrouping.cpp
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