diff options
Diffstat (limited to 'intl/icu/source/i18n/digitgrouping.h')
-rw-r--r-- | intl/icu/source/i18n/digitgrouping.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/digitgrouping.h b/intl/icu/source/i18n/digitgrouping.h new file mode 100644 index 000000000..934fd4b9a --- /dev/null +++ b/intl/icu/source/i18n/digitgrouping.h @@ -0,0 +1,112 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* Copyright (C) 2015, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* digitgrouping.h +* +* created on: 2015jan6 +* created by: Travis Keep +*/ + +#ifndef __DIGITGROUPING_H__ +#define __DIGITGROUPING_H__ + +#include "unicode/uobject.h" +#include "unicode/utypes.h" + +U_NAMESPACE_BEGIN + +class IntDigitCountRange; + +/** + * The digit grouping policy. + */ +class U_I18N_API DigitGrouping : public UMemory { +public: + /** + * Default is no digit grouping. + */ + DigitGrouping() : fGrouping(0), fGrouping2(0), fMinGrouping(0) { } + + /** + * Returns TRUE if this object is equal to rhs. + */ + UBool equals(const DigitGrouping &rhs) const { + return ((fGrouping == rhs.fGrouping) && + (fGrouping2 == rhs.fGrouping2) && + (fMinGrouping == rhs.fMinGrouping)); + } + + /** + * Returns true if a separator is needed after a particular digit. + * @param digitsLeftOfDecimal the total count of digits left of the + * decimal. + * @param digitPos 0 is the one's place; 1 is the 10's place; -1 is the + * 1/10's place etc. + */ + UBool isSeparatorAt(int32_t digitsLeftOfDecimal, int32_t digitPos) const; + + /** + * Returns the total number of separators to be used to format a particular + * number. + * @param digitsLeftOfDecimal the total number of digits to the left of + * the decimal. + */ + int32_t getSeparatorCount(int32_t digitsLeftOfDecimal) const; + + /** + * Returns true if grouping is used FALSE otherwise. When + * isGroupingUsed() returns FALSE; isSeparatorAt always returns FALSE + * and getSeparatorCount always returns 0. + */ + UBool isGroupingUsed() const { return fGrouping > 0; } + + /** + * Returns TRUE if this instance would not add grouping separators + * when formatting value using the given constraint on digit count. + * + * @param value the value to format. + * @param range the minimum and maximum digits for formatting value. + */ + UBool isNoGrouping( + int32_t positiveValue, const IntDigitCountRange &range) const; + + /** + * Clears this instance so that digit grouping is not in effect. + */ + void clear(); + +public: + + /** + * Primary grouping size. A value of 0, the default, or a negative + * number causes isGroupingUsed() to return FALSE. + */ + int32_t fGrouping; + + /** + * Secondary grouping size. If > 0, this size is used instead of + * 'fGrouping' for all but the group just to the left of the decimal + * point. The default value of 0, or a negative value indicates that + * there is no secondary grouping size. + */ + int32_t fGrouping2; + + /** + * If set (that is > 0), uses no grouping separators if fewer than + * (fGrouping + fMinGrouping) digits appear left of the decimal place. + * The default value for this field is 0. + */ + int32_t fMinGrouping; +private: + UBool isGroupingEnabled(int32_t digitsLeftOfDecimal) const; + int32_t getGrouping2() const; + int32_t getMinGrouping() const; +}; + +U_NAMESPACE_END + +#endif // __DIGITGROUPING_H__ |