]>
Commit | Line | Data |
---|---|---|
2ca993e8 A |
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 |