1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ******************************************************************************* 5 * Copyright (C) 2015, International Business Machines 6 * Corporation and others. All Rights Reserved. 7 ******************************************************************************* 8 * smallintformatter.h 9 * 10 * created on: 2015jan06 11 * created by: Travis Keep 12 */ 13 14 #ifndef __SMALLINTFORMATTER_H__ 15 #define __SMALLINTFORMATTER_H__ 16 17 #include "unicode/uobject.h" 18 #include "unicode/utypes.h" 19 20 U_NAMESPACE_BEGIN 21 22 class UnicodeString; 23 24 /** 25 * A representation an acceptable range of digit counts for integers. 26 */ 27 class U_I18N_API IntDigitCountRange : public UMemory { 28 public: 29 /** 30 * No constraints: 0 up to INT32_MAX 31 */ 32 IntDigitCountRange() : fMin(0), fMax(INT32_MAX) { } 33 IntDigitCountRange(int32_t min, int32_t max); 34 int32_t pin(int32_t digitCount) const; 35 int32_t getMax() const { return fMax; } 36 int32_t getMin() const { return fMin; } 37 private: 38 int32_t fMin; 39 int32_t fMax; 40 }; 41 42 43 /** 44 * A formatter for small, positive integers. 45 */ 46 class U_I18N_API SmallIntFormatter : public UMemory { 47 public: 48 /** 49 * Estimates the actual digit count needed to format positiveValue 50 * using the given range of digit counts. 51 * Returns a value that is at least the actual digit count needed. 52 * 53 * @param positiveValue the value to format 54 * @param range the acceptable range of digit counts. 55 */ 56 static int32_t estimateDigitCount( 57 int32_t positiveValue, const IntDigitCountRange &range); 58 59 /** 60 * Returns TRUE if this class can format positiveValue using 61 * the given range of digit counts. 62 * 63 * @param positiveValue the value to format 64 * @param range the acceptable range of digit counts. 65 */ 66 static UBool canFormat( 67 int32_t positiveValue, const IntDigitCountRange &range); 68 69 /** 70 * Formats positiveValue using the given range of digit counts. 71 * Always uses standard digits '0' through '9'. Formatted value is 72 * left padded with '0' as necessary to achieve minimum digit count. 73 * Does not produce any grouping separators or trailing decimal point. 74 * Calling format to format a value with a particular digit count range 75 * when canFormat indicates that the same value and digit count range 76 * cannot be formatted results in undefined behavior. 77 * 78 * @param positiveValue the value to format 79 * @param range the acceptable range of digit counts. 80 */ 81 static UnicodeString &format( 82 int32_t positiveValue, 83 const IntDigitCountRange &range, 84 UnicodeString &appendTo); 85 86 }; 87 88 U_NAMESPACE_END 89 90 #endif // __SMALLINTFORMATTER_H__ 91