16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File FMTABLE.H 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 02/29/97 aliu Creation. 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef FMTABLE_H 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define FMTABLE_H 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Formattable is a thin wrapper for primitive types used for formatting and parsing 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/stringpiece.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uformattable.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CharString; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DigitList; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def UNUM_INTERNAL_STACKARRAY_SIZE 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_OS400 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UNUM_INTERNAL_STACKARRAY_SIZE 144 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UNUM_INTERNAL_STACKARRAY_SIZE 128 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Formattable objects can be passed to the Format class or 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * its subclasses for formatting. Formattable is a thin wrapper 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * class which interconverts between the primitive numeric types 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (double, long, etc.) as well as UDate and UnicodeString. 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Internally, a Formattable object is a union of primitive types. 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * As such, it can only store one flavor of data at a time. To 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * determine what flavor of data it contains, use the getType method. 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>As of ICU 3.0, Formattable may also wrap a UObject pointer, 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which it owns. This allows an instance of any ICU class to be 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * encapsulated in a Formattable. For legacy reasons and for 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * efficiency, primitive numeric types are still stored directly 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * within a Formattable. 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The Formattable class is not suitable for subclassing. 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>See UFormattable for a C wrapper. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API Formattable : public UObject { 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This enum is only used to let callers distinguish between 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the Formattable(UDate) constructor and the Formattable(double) 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * constructor; the compiler cannot distinguish the signatures, 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * since UDate is currently typedefed to be either double or long. 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If UDate is changed later to be a bonafide class 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * or struct, then we no longer need this enum. 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum ISDATE { kIsDate }; 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Default constructor 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(); // Type kLong, value 0 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a UDate instance. 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param d the UDate instance. 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param flag the flag to indicate this is a date. Always set it to kIsDate 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(UDate d, ISDATE flag); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a double number. 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param d the double number. 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(double d); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a long number. 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param l the long number. 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(int32_t l); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with an int64_t number 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ll the int64_t number. 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(int64_t ll); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_CONVERSION 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a char string pointer. 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Assumes that the char string is null terminated. 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param strToCopy the char string. 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(const char* strToCopy); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object of an appropriate numeric type from a 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a decimal number in string form. The Formattable will retain the 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * full precision of the input in decimal format, even when it exceeds 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * what can be represented by a double or int64_t. 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number the unformatted (not localized) string representation 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of the Decimal number. 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. Possible errors include U_INVALID_FORMAT_ERROR 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if the format of the string does not conform to that of a 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * decimal number. 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(const StringPiece &number, UErrorCode &status); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a UnicodeString object to copy from. 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param strToCopy the UnicodeString string. 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(const UnicodeString& strToCopy); 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with a UnicodeString object to adopt from. 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param strToAdopt the UnicodeString string. 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(UnicodeString* strToAdopt); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object with an array of Formattable objects. 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param arrayToCopy the Formattable object array. 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count the array count. 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(const Formattable* arrayToCopy, int32_t count); 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Creates a Formattable object that adopts the given UObject. 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param objectToAdopt the UObject to set this object to 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(UObject* objectToAdopt); 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copy constructor. 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(const Formattable&); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Assignment operator. 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param rhs The Formattable object to copy into this object. 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable& operator=(const Formattable &rhs); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Equality comparison. 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param other the object to be compared with. 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if other are equal to this, FALSE otherwise. 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator==(const Formattable &other) const; 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Equality operator. 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param other the object to be compared with. 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if other are unequal to this, FALSE otherwise. 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator!=(const Formattable& other) const 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { return !operator==(other); } 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Destructor. 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~Formattable(); 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clone this object. 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clones can be used concurrently in multiple threads. 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If an error occurs, then NULL is returned. 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The caller must delete the clone. 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a clone of this object 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getDynamicClassID 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *clone() const; 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector for flavor of data type contained within a 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Formattable object. Formattable is a union of several 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * different types, and at any time contains exactly one type. 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum Type { 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a UDate value. Use getDate to retrieve 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the value. 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kDate, 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a double value. Use getDouble to 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * retrieve the value. 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kDouble, 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a 32-bit integer value. Use getLong to 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * retrieve the value. 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kLong, 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a UnicodeString value. Use getString 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to retrieve the value. 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kString, 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating an array of Formattables. Use getArray 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to retrieve the value. 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kArray, 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a 64-bit integer value. Use getInt64 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to retrieve the value. 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kInt64, 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Selector indicating a UObject value. Use getObject to 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * retrieve the value. 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org kObject 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the data type of this Formattable object. 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the data type of this Formattable object. 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Type getType(void) const; 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns TRUE if the data type of this Formattable object 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is kDouble, kLong, or kInt64 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if this is a pure numeric object 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isNumeric() const; 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the double value of this object. If this object is not of type 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kDouble then the result is undefined. 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the double value of this object. 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double getDouble(void) const { return fValue.fDouble; } 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the double value of this object. If this object is of type 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * long, int64 or Decimal Number then a conversion is peformed, with 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * possible loss of precision. If the type is kObject and the 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object is a Measure, then the result of 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getNumber().getDouble(status) is returned. If this object is 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * neither a numeric type nor a Measure, then 0 is returned and 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the status is set to U_INVALID_FORMAT_ERROR. 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the double value of this object. 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double getDouble(UErrorCode& status) const; 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the long value of this object. If this object is not of type 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kLong then the result is undefined. 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the long value of this object. 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getLong(void) const { return (int32_t)fValue.fInt64; } 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the long value of this object. If the magnitude is too 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * large to fit in a long, then the maximum or minimum long value, 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as appropriate, is returned and the status is set to 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_INVALID_FORMAT_ERROR. If this object is of type kInt64 and 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it fits within a long, then no precision is lost. If it is of 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * type kDouble, then a conversion is peformed, with 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * truncation of any fractional part. If the type is kObject and 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the object is a Measure, then the result of 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getNumber().getLong(status) is returned. If this object is 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * neither a numeric type nor a Measure, then 0 is returned and 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the status is set to U_INVALID_FORMAT_ERROR. 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the long value of this object. 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t getLong(UErrorCode& status) const; 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the int64 value of this object. If this object is not of type 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kInt64 then the result is undefined. 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the int64 value of this object. 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int64_t getInt64(void) const { return fValue.fInt64; } 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the int64 value of this object. If this object is of a numeric 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * type and the magnitude is too large to fit in an int64, then 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the maximum or minimum int64 value, as appropriate, is returned 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the status is set to U_INVALID_FORMAT_ERROR. If the 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * magnitude fits in an int64, then a casting conversion is 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * peformed, with truncation of any fractional part. If the type 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is kObject and the object is a Measure, then the result of 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getNumber().getDouble(status) is returned. If this object is 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * neither a numeric type nor a Measure, then 0 is returned and 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the status is set to U_INVALID_FORMAT_ERROR. 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the int64 value of this object. 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int64_t getInt64(UErrorCode& status) const; 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the Date value of this object. If this object is not of type 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kDate then the result is undefined. 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the Date value of this object. 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate getDate() const { return fValue.fDate; } 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the Date value of this object. If the type is not a date, 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * status is set to U_INVALID_FORMAT_ERROR and the return value is 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * undefined. 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the Date value of this object. 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate getDate(UErrorCode& status) const; 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the string value of this object. If this object is not of type 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kString then the result is undefined. 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result Output param to receive the Date value of this object. 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to 'result'. 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& getString(UnicodeString& result) const 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { result=*fValue.fString; return result; } 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the string value of this object. If the type is not a 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string, status is set to U_INVALID_FORMAT_ERROR and a bogus 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string is returned. 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result Output param to receive the Date value of this object. 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A reference to 'result'. 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& getString(UnicodeString& result, UErrorCode& status) const; 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets a const reference to the string value of this object. If 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this object is not of type kString then the result is 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * undefined. 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a const reference to the string value of this object. 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline const UnicodeString& getString(void) const; 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets a const reference to the string value of this object. If 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the type is not a string, status is set to 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_INVALID_FORMAT_ERROR and the result is a bogus string. 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a const reference to the string value of this object. 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString& getString(UErrorCode& status) const; 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets a reference to the string value of this object. If this 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * object is not of type kString then the result is undefined. 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to the string value of this object. 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UnicodeString& getString(void); 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets a reference to the string value of this object. If the 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * type is not a string, status is set to U_INVALID_FORMAT_ERROR 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the result is a bogus string. 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a reference to the string value of this object. 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& getString(UErrorCode& status); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the array value and count of this object. If this object 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is not of type kArray then the result is undefined. 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count fill-in with the count of this object. 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the array value of this object. 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const Formattable* getArray(int32_t& count) const 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; } 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the array value and count of this object. If the type is 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * not an array, status is set to U_INVALID_FORMAT_ERROR, count is 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * set to 0, and the result is NULL. 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count fill-in with the count of this object. 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the array value of this object. 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const Formattable* getArray(int32_t& count, UErrorCode& status) const; 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Accesses the specified element in the array value of this 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Formattable object. If this object is not of type kArray then 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the result is undefined. 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param index the specified index. 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the accessed element in the array. 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable& operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; } 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns a pointer to the UObject contained within this 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formattable, or NULL if this object does not contain a UObject. 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return a UObject pointer, or NULL 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UObject* getObject() const; 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns a numeric string representation of the number contained within this 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formattable, or NULL if this object does not contain numeric type. 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For values obtained by parsing, the returned decimal number retains 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the full precision and range of the original input, unconstrained by 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the limits of a double floating point or a 64 bit int. 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not thread safe, and therfore is not declared const, 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * even though it is logically const. 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Possible errors include U_MEMORY_ALLOCATION_ERROR, and 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_INVALID_STATE if the formattable object has not been set to 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a numeric type. 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the unformatted string representation of a number. 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece getDecimalNumber(UErrorCode &status); 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the double value of this object and changes the type to 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kDouble. 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param d the new double value to be set. 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setDouble(double d); 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the long value of this object and changes the type to 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kLong. 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param l the new long value to be set. 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setLong(int32_t l); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the int64 value of this object and changes the type to 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kInt64. 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ll the new int64 value to be set. 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setInt64(int64_t ll); 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the Date value of this object and changes the type to 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kDate. 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param d the new Date value to be set. 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setDate(UDate d); 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the string value of this object and changes the type to 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * kString. 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param stringToCopy the new string value to be set. 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setString(const UnicodeString& stringToCopy); 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the array value and count of this object and changes the 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * type to kArray. 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param array the array value. 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count the number of array elements to be copied. 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setArray(const Formattable* array, int32_t count); 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets and adopts the string value and count of this object and 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * changes the type to kArray. 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param stringToAdopt the new string value to be adopted. 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void adoptString(UnicodeString* stringToAdopt); 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets and adopts the array value and count of this object and 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * changes the type to kArray. 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void adoptArray(Formattable* array, int32_t count); 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets and adopts the UObject value of this object and changes 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the type to kObject. After this call, the caller must not 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * delete the given object. 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param objectToAdopt the UObject value to be adopted 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void adoptObject(UObject* objectToAdopt); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the the numeric value from a decimal number string, and changes 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the type to to a numeric type appropriate for the number. 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The syntax of the number is a "numeric string" 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as defined in the Decimal Arithmetic Specification, available at 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * http://speleotrove.com/decimal 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The full precision and range of the input number will be retained, 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * even when it exceeds what can be represented by a double or an int64. 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param numberString a string representation of the unformatted decimal number. 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code. Set to U_INVALID_FORMAT_ERROR if the 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * incoming string is not a valid decimal number. 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setDecimalNumber(const StringPiece &numberString, 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode &status); 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU "poor man's RTTI", returns a UClassID for the actual class. 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID() const; 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU "poor man's RTTI", returns a UClassID for this class. 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.2 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UClassID U_EXPORT2 getStaticClassID(); 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the UFormattable to a Formattable. Internally, this is a reinterpret_cast. 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt a valid UFormattable 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the UFormattable as a Formattable object pointer. This is an alias to the original 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UFormattable, and so is only valid while the original argument remains in scope. 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static inline Formattable *fromUFormattable(UFormattable *fmt); 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert the const UFormattable to a const Formattable. Internally, this is a reinterpret_cast. 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt a valid UFormattable 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the UFormattable as a Formattable object pointer. This is an alias to the original 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UFormattable, and so is only valid while the original argument remains in scope. 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static inline const Formattable *fromUFormattable(const UFormattable *fmt); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert this object pointer to a UFormattable. 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return this object as a UFormattable pointer. This is an alias to this object, 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and so is only valid while this object remains in scope. 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline UFormattable *toUFormattable(); 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert this object pointer to a UFormattable. 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return this object as a UFormattable pointer. This is an alias to this object, 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and so is only valid while this object remains in scope. 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline const UFormattable *toUFormattable() const; 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DRAFT_API */ 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Deprecated variant of getLong(UErrorCode&). 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status the error code 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the long value of this object. 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @deprecated ICU 3.0 use getLong(UErrorCode&) instead 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inline int32_t getLong(UErrorCode* status) const; 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */ 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Internal function, do not use. 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TODO: figure out how to make this be non-public. 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * NumberFormat::format(Formattable, ... 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * needs to get at the DigitList, if it exists, for 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * big decimal formatting. 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DigitList *getDigitList() const { return fDecimalNum;} 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DigitList *getInternalDigitList(); 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Adopt, and set value from, a DigitList 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Internal Function, do not use. 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dl the Digit List to be adopted 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void adoptDigitList(DigitList *dl); 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Internal function to return the CharString pointer. 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status error code 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return pointer to the CharString - may become invalid if the object is modified 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharString *internalGetCharString(UErrorCode &status); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_INTERNAL_API */ 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Cleans up the memory for unwanted values. For example, the adopted 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string or array objects. 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void dispose(void); 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Common initialization, for use by constructors. 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void init(); 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString* getBogus() const; 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org union { 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UObject* fObject; 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString* fString; 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double fDouble; 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int64_t fInt64; 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate fDate; 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org struct { 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable* fArray; 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fCount; 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } fArrayAndCount; 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } fValue; 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharString *fDecimalStr; 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DigitList *fDecimalNum; 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char fStackData[UNUM_INTERNAL_STACKARRAY_SIZE]; // must be big enough for DigitList 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Type fType; 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString fBogus; // Bogus string when it's needed. 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UDate Formattable::getDate(UErrorCode& status) const { 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fType != kDate) { 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_INVALID_FORMAT_ERROR; 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fValue.fDate; 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline const UnicodeString& Formattable::getString(void) const { 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *fValue.fString; 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString& Formattable::getString(void) { 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *fValue.fString; 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline int32_t Formattable::getLong(UErrorCode* status) const { 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return getLong(*status); 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */ 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UFormattable* Formattable::toUFormattable() { 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return reinterpret_cast<UFormattable*>(this); 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline const UFormattable* Formattable::toUFormattable() const { 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return reinterpret_cast<const UFormattable*>(this); 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline Formattable* Formattable::fromUFormattable(UFormattable *fmt) { 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return reinterpret_cast<Formattable *>(fmt); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline const Formattable* Formattable::fromUFormattable(const UFormattable *fmt) { 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return reinterpret_cast<const Formattable *>(fmt); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DRAFT_API */ 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif //_FMTABLE 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof 765