1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 1997-2013, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File DIGITLST.H 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 02/25/97 aliu Converted from java. 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 03/21/97 clhuang Updated per C++ implementation. 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 04/15/97 aliu Changed MAX_COUNT to DBL_DIG. Changed Digit to char. 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 09/09/97 aliu Adapted for exponential notation support. 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 08/02/98 stephen Added nearest/even rounding 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 06/29/99 stephen Made LONG_DIGITS a macro to satisfy SUN compiler 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/09/99 stephen Removed kMaxCount (unused, for HP compiler) 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef DIGITLST_H 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DIGITLST_H 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uobject.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <float.h> 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "decContext.h" 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "decNumber.h" 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "cmemory.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Decimal digits in a 64-bit int 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define INT64_DIGITS 19 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum EDigitListValues { 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MAX_DBL_DIGITS = DBL_DIG, 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MAX_I64_DIGITS = INT64_DIGITS, 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MAX_DIGITS = MAX_I64_DIGITS, 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MAX_EXPONENT = DBL_DIG, 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGIT_PADDING = 3, 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DEFAULT_DIGITS = 40, // Initial storage size, will grow as needed. 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "+." + fDigits + "e" + fDecimalAt 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MAX_DEC_DIGITS = MAX_DIGITS + DIGIT_PADDING + MAX_EXPONENT 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} EDigitListValues; 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 5327f654740f2a26ad62a5c155af9199af9e69b889clairehoclass CharString; 5427f654740f2a26ad62a5c155af9199af9e69b889claireho 5527f654740f2a26ad62a5c155af9199af9e69b889claireho// Export an explicit template instantiation of the MaybeStackHeaderAndArray that 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// is used as a data member of DigitList. 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// MSVC requires this, even though it should not be necessary. 5927f654740f2a26ad62a5c155af9199af9e69b889claireho// No direct access to the MaybeStackHeaderAndArray leaks out of the i18n library. 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Macintosh produces duplicate definition linker errors with the explicit template 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// instantiation. 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !U_PLATFORM_IS_DARWIN_BASED 6527f654740f2a26ad62a5c155af9199af9e69b889clairehotemplate class U_I18N_API MaybeStackHeaderAndArray<decNumber, char, DEFAULT_DIGITS>; 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 69103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusenum EStackMode { kOnStack }; 70103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusenum EFastpathBits { kFastpathOk = 1, kNoDecimal = 2 }; 7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Digit List is actually a Decimal Floating Point number. 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * The original implementation has been replaced by a thin wrapper onto a 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * decimal number from the decNumber library. 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * The original DigitList API has been retained, to minimize the impact of 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * the change on the rest of the ICU formatting code. 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * The change to decNumber enables support for big decimal numbers, and 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * allows rounding computations to be done directly in decimal, avoiding 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * extra, and inaccurate, conversions to and from doubles. 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Original DigitList comments: 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Digit List utility class. Private to DecimalFormat. Handles the transcoding 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * between numeric values and strings of characters. Only handles 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * non-negative numbers. The division of labor between DigitList and 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DecimalFormat is that DigitList handles the radix 10 representation 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * issues; DecimalFormat handles the locale-specific issues such as 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * positive/negative, grouping, decimal point, currency, and so on. 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A DigitList is really a representation of a floating point value. 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It may be an integer value; we assume that a double has sufficient 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * precision to represent all digits of a long. 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The DigitList representation consists of a string of characters, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which are the digits radix 10, from '0' to '9'. It also has a radix 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 10 exponent associated with it. The value represented by a DigitList 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * object can be computed by mulitplying the fraction f, where 0 <= f < 1, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * derived by placing all the digits of the list to the right of the 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * decimal point, by 10^exponent. 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * -------- 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * DigitList vs. decimalNumber: 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * DigitList stores digits with the most significant first. 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * decNumber stores digits with the least significant first. 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * DigitList, decimal point is before the most significant. 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * decNumber, decimal point is after the least signficant digit. 11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * digitList: 0.ddddd * 10 ^ exp 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * decNumber: ddddd. * 10 ^ exp 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * digitList exponent = decNumber exponent + digit count 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 12027f654740f2a26ad62a5c155af9199af9e69b889claireho * digitList, digits are platform invariant chars, '0' - '9' 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * decNumber, digits are binary, one per byte, 0 - 9. 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * (decNumber library is configurable in how digits are stored, ICU has configured 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * it this way for convenience in replacing the old DigitList implementation.) 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 12650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass U_I18N_API DigitList : public UMemory { // Declare external to make compiler happy 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList(); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~DigitList(); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* copy constructor 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param DigitList The object to be copied. 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the newly created object. 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList(const DigitList&); // copy constructor 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* assignment operator 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param DigitList The object to be copied. 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the newly created object. 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList& operator=(const DigitList&); // assignment operator 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return true if another object is semantically equal to this one. 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param other The DigitList to be compared for equality 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return true if another object is semantically equal to this one. 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * return false otherwise. 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool operator==(const DigitList& other) const; 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t compare(const DigitList& other); 15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho inline UBool operator!=(const DigitList& other) const { return !operator==(other); } 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Clears out the digits. 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Use before appending them. 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Typically, you set a series of digits with append, then at the point 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * you hit the decimal point, you set myDigitList.fDecimalAt = myDigitList.fCount; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * then go on appending digits. 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void clear(void); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Remove, by rounding, any fractional part of the decimal number, 16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * leaving an integer value. 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void toIntegralValue(); 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Appends digits to the list. 17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * CAUTION: this function is not recommended for new code. 17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * In the original DigitList implementation, decimal numbers were 17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * parsed by appending them to a digit list as they were encountered. 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * With the revamped DigitList based on decNumber, append is very 17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * inefficient, and the interaction with the exponent value is confusing. 17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Best avoided. 18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * TODO: remove this function once all use has been replaced. 18127f654740f2a26ad62a5c155af9199af9e69b889claireho * TODO: describe alternative to append() 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param digit The digit to be appended. 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void append(char digit); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Utility routine to get the value of the digit list 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns 0.0 if zero length. 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the value of the digit list. 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double getDouble(void) const; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Utility routine to get the value of the digit list 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Make sure that fitsIntoLong() is called before calling this function. 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns 0 if zero length. 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the value of the digit list, return 0 if it is zero length 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t getLong(void) /*const*/; 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Utility routine to get the value of the digit list 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Make sure that fitsIntoInt64() is called before calling this function. 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns 0 if zero length. 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the value of the digit list, return 0 if it is zero length 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t getInt64(void) /*const*/; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Utility routine to get the value of the digit list as a decimal string. 21127f654740f2a26ad62a5c155af9199af9e69b889claireho */ 21227f654740f2a26ad62a5c155af9199af9e69b889claireho void getDecimal(CharString &str, UErrorCode &status); 21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return true if the number represented by this object can fit into 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a long. 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ignoreNegativeZero True if negative zero is ignored. 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return true if the number represented by this object can fit into 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a long, return false otherwise. 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fitsIntoLong(UBool ignoreNegativeZero) /*const*/; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return true if the number represented by this object can fit into 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * an int64_t. 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ignoreNegativeZero True if negative zero is ignored. 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return true if the number represented by this object can fit into 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a long, return false otherwise. 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fitsIntoInt64(UBool ignoreNegativeZero) /*const*/; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Utility routine to set the value of the digit list from a double. 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param source The value to be set 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void set(double source); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Utility routine to set the value of the digit list from a long. 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If a non-zero maximumDigits is specified, no more than that number of 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * significant digits will be produced. 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param source The value to be set 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void set(int32_t source); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Utility routine to set the value of the digit list from an int64. 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If a non-zero maximumDigits is specified, no more than that number of 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * significant digits will be produced. 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param source The value to be set 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void set(int64_t source); 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 254103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /** 255103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Utility routine to set the value of the digit list from an int64. 256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Does not set the decnumber unless requested later 257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If a non-zero maximumDigits is specified, no more than that number of 258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * significant digits will be produced. 259103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @param source The value to be set 260103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 261103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void setInteger(int64_t source); 262103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Utility routine to set the value of the digit list from a decimal number 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * string. 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @param source The value to be set. The string must be nul-terminated. 26754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @param fastpathBits special flags for fast parsing 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 26954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius void set(const StringPiece &source, UErrorCode &status, uint32_t fastpathBits = 0); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Multiply this = this * arg 27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * This digitlist will be expanded if necessary to accomodate the result. 27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @param arg the number to multiply by. 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void mult(const DigitList &arg, UErrorCode &status); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Divide this = this / arg 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void div(const DigitList &arg, UErrorCode &status); 28250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 28350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The following functions replace direct access to the original DigitList implmentation 28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // data structures. 28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setRoundingMode(DecimalFormat::ERoundingMode m); 28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 28850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Test a number for zero. 28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @return TRUE if the number is zero 29050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool isZero(void) const; 29250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Test for a Nan 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @return TRUE if the number is a NaN 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 296b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool isNaN(void) const {return decNumberIsNaN(fDecNumber);} 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 298b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool isInfinite() const {return decNumberIsInfinite(fDecNumber);} 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Reduce, or normalize. Removes trailing zeroes, adjusts exponent appropriately. */ 30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void reduce(); 30250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Remove trailing fraction zeros, adjust exponent accordingly. */ 30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void trim(); 30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Set to zero */ 307b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho void setToZero() {uprv_decNumberZero(fDecNumber);} 30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** get the number of digits in the decimal number */ 310b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t digits() const {return fDecNumber->digits;} 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Round the number to the given number of digits. 31450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @param maximumDigits The maximum number of digits to be shown. 31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Upon return, count will be less than or equal to maximumDigits. 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 31750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void round(int32_t maximumDigits); 31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void roundFixedPoint(int32_t maximumFractionDigits); 32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 32150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** Ensure capacity for digits. Grow the storage if it is currently less than 32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * the requested size. Capacity is not reduced if it is already greater 32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * than requested. 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void ensureCapacity(int32_t requestedSize, UErrorCode &status); 32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 327b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool isPositive(void) const { return decNumberIsNegative(fDecNumber) == 0;} 32850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setPositive(UBool s); 32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setDecimalAt(int32_t d); 33150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t getDecimalAt(); 33250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setCount(int32_t c); 33450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t getCount() const; 33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 33627f654740f2a26ad62a5c155af9199af9e69b889claireho /** 33727f654740f2a26ad62a5c155af9199af9e69b889claireho * Set the digit in platform (invariant) format, from '0'..'9' 33827f654740f2a26ad62a5c155af9199af9e69b889claireho * @param i index of digit 33927f654740f2a26ad62a5c155af9199af9e69b889claireho * @param v digit value, from '0' to '9' in platform invariant format 34027f654740f2a26ad62a5c155af9199af9e69b889claireho */ 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setDigit(int32_t i, char v); 34227f654740f2a26ad62a5c155af9199af9e69b889claireho 34327f654740f2a26ad62a5c155af9199af9e69b889claireho /** 34427f654740f2a26ad62a5c155af9199af9e69b889claireho * Get the digit in platform (invariant) format, from '0'..'9' inclusive 34527f654740f2a26ad62a5c155af9199af9e69b889claireho * @param i index of digit 34627f654740f2a26ad62a5c155af9199af9e69b889claireho * @return invariant format of the digit 34727f654740f2a26ad62a5c155af9199af9e69b889claireho */ 34850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char getDigit(int32_t i); 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 35050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 35127f654740f2a26ad62a5c155af9199af9e69b889claireho /** 35227f654740f2a26ad62a5c155af9199af9e69b889claireho * Get the digit's value, as an integer from 0..9 inclusive. 35327f654740f2a26ad62a5c155af9199af9e69b889claireho * Note that internally this value is a decNumberUnit, but ICU configures it to be a uint8_t. 35427f654740f2a26ad62a5c155af9199af9e69b889claireho * @param i index of digit 35527f654740f2a26ad62a5c155af9199af9e69b889claireho * @return value of that digit 35627f654740f2a26ad62a5c155af9199af9e69b889claireho */ 35727f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t getDigitValue(int32_t i); 35827f654740f2a26ad62a5c155af9199af9e69b889claireho 35927f654740f2a26ad62a5c155af9199af9e69b889claireho 36050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprivate: 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * These data members are intentionally public and can be set directly. 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *<P> 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The value represented is given by placing the decimal point before 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * fDigits[fDecimalAt]. If fDecimalAt is < 0, then leading zeros between 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the decimal point and the first nonzero digit are implied. If fDecimalAt 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is > fCount, then trailing zeros between the fDigits[fCount-1] and the 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * decimal point are implied. 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Equivalently, the represented value is given by f * 10^fDecimalAt. Here 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * f is a value 0.1 <= f < 1 arrived at by placing the digits in fDigits to 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the right of the decimal. 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DigitList is normalized, so if it is non-zero, fDigits[0] is non-zero. We 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * don't allow denormalized numbers because our exponent is effectively of 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * unlimited magnitude. The fCount value contains the number of significant 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * digits present in fDigits[]. 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Zero is represented by any DigitList with fCount == 0 or with each fDigits[i] 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for all i <= fCount == '0'. 38150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 38250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * int32_t fDecimalAt; 38350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * int32_t fCount; 38450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * UBool fIsPositive; 38550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * char *fDigits; 38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * DecimalFormat::ERoundingMode fRoundingMode; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehopublic: 390b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho decContext fContext; // public access to status flags. 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoprivate: 39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decNumber *fDecNumber; 39427f654740f2a26ad62a5c155af9199af9e69b889claireho MaybeStackHeaderAndArray<decNumber, char, DEFAULT_DIGITS> fStorage; 39527f654740f2a26ad62a5c155af9199af9e69b889claireho 39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Cached double value corresponding to this decimal number. 39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * This is an optimization for the formatting implementation, which may 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ask for the double value multiple times. 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 400103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius union DoubleOrInt64 { 401103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double fDouble; 402103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int64_t fInt64; 403103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } fUnion; 404103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius enum EHave { 405103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius kNone=0, 406103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius kDouble, 407103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius kInt64 408103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } fHave; 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool shouldRoundUp(int32_t maximumDigits) const; 413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 414103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius public: 415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if U_OVERRIDE_CXX_ALLOCATION 417103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius using UMemory::operator new; 41854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius using UMemory::operator delete; 419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#else 420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static inline void * U_EXPORT2 operator new(size_t size) U_NO_THROW { return ::operator new(size); }; 421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static inline void U_EXPORT2 operator delete(void *ptr ) U_NO_THROW { ::operator delete(ptr); }; 422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /** 425103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Placement new for stack usage 426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 42854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius static inline void * U_EXPORT2 operator new(size_t /*size*/, void * onStack, EStackMode /*mode*/) U_NO_THROW { return onStack; } 42954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 43054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /** 43154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Placement delete for stack usage 43254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal 43354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 43454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius static inline void U_EXPORT2 operator delete(void * /*ptr*/, void * /*onStack*/, EStackMode /*mode*/) U_NO_THROW {} 435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 436103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius private: 437103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius inline void internalSetDouble(double d) { 438103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fHave = kDouble; 439103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fUnion.fDouble=d; 440103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius inline void internalSetInt64(int64_t d) { 442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fHave = kInt64; 443103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fUnion.fInt64=d; 444103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius inline void internalClear() { 446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fHave = kNone; 447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // #if !UCONFIG_NO_FORMATTING 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // _DIGITLST 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 457