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