159d709d503bab6e2b61931737e662dd293b40578ccornelius/* 259d709d503bab6e2b61931737e662dd293b40578ccornelius******************************************************************************** 359d709d503bab6e2b61931737e662dd293b40578ccornelius* Copyright (C) 2013, International Business Machines Corporation and others. 459d709d503bab6e2b61931737e662dd293b40578ccornelius* All Rights Reserved. 559d709d503bab6e2b61931737e662dd293b40578ccornelius******************************************************************************** 659d709d503bab6e2b61931737e662dd293b40578ccornelius* 759d709d503bab6e2b61931737e662dd293b40578ccornelius* File UFORMATTABLE.H 859d709d503bab6e2b61931737e662dd293b40578ccornelius* 959d709d503bab6e2b61931737e662dd293b40578ccornelius* Modification History: 1059d709d503bab6e2b61931737e662dd293b40578ccornelius* 1159d709d503bab6e2b61931737e662dd293b40578ccornelius* Date Name Description 1259d709d503bab6e2b61931737e662dd293b40578ccornelius* 2013 Jun 7 srl New 1359d709d503bab6e2b61931737e662dd293b40578ccornelius******************************************************************************** 1459d709d503bab6e2b61931737e662dd293b40578ccornelius*/ 1559d709d503bab6e2b61931737e662dd293b40578ccornelius 1659d709d503bab6e2b61931737e662dd293b40578ccornelius/** 1759d709d503bab6e2b61931737e662dd293b40578ccornelius * \file 1859d709d503bab6e2b61931737e662dd293b40578ccornelius * \brief C API: UFormattable is a thin wrapper for primitive types used for formatting and parsing. 1959d709d503bab6e2b61931737e662dd293b40578ccornelius * 2059d709d503bab6e2b61931737e662dd293b40578ccornelius * This is a C interface to the icu::Formattable class. Static functions on this class convert 2159d709d503bab6e2b61931737e662dd293b40578ccornelius * to and from this interface (via reinterpret_cast). Note that Formattables (and thus UFormattables) 2259d709d503bab6e2b61931737e662dd293b40578ccornelius * are mutable, and many operations (even getters) may actually modify the internal state. For this 2359d709d503bab6e2b61931737e662dd293b40578ccornelius * reason, UFormattables are not thread safe, and should not be shared between threads. 2459d709d503bab6e2b61931737e662dd293b40578ccornelius * 2559d709d503bab6e2b61931737e662dd293b40578ccornelius * See {@link unum_parseToUFormattable} for example code. 2659d709d503bab6e2b61931737e662dd293b40578ccornelius */ 2759d709d503bab6e2b61931737e662dd293b40578ccornelius 2859d709d503bab6e2b61931737e662dd293b40578ccornelius#ifndef UFORMATTABLE_H 2959d709d503bab6e2b61931737e662dd293b40578ccornelius#define UFORMATTABLE_H 3059d709d503bab6e2b61931737e662dd293b40578ccornelius 3159d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/utypes.h" 3259d709d503bab6e2b61931737e662dd293b40578ccornelius 3359d709d503bab6e2b61931737e662dd293b40578ccornelius#if !UCONFIG_NO_FORMATTING 3459d709d503bab6e2b61931737e662dd293b40578ccornelius 3559d709d503bab6e2b61931737e662dd293b40578ccornelius#ifndef U_HIDE_DRAFT_API 3659d709d503bab6e2b61931737e662dd293b40578ccornelius 3759d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/localpointer.h" 3859d709d503bab6e2b61931737e662dd293b40578ccornelius 3959d709d503bab6e2b61931737e662dd293b40578ccornelius/** 4059d709d503bab6e2b61931737e662dd293b40578ccornelius * Enum designating the type of a UFormattable instance. 4159d709d503bab6e2b61931737e662dd293b40578ccornelius * Practically, this indicates which of the getters would return without conversion 4259d709d503bab6e2b61931737e662dd293b40578ccornelius * or error. 4359d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::Type 4459d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 4559d709d503bab6e2b61931737e662dd293b40578ccornelius */ 4659d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef enum UFormattableType { 4759d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_DATE = 0, /**< ufmt_getDate() will return without conversion. @see ufmt_getDate*/ 4859d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_DOUBLE, /**< ufmt_getDouble() will return without conversion. @see ufmt_getDouble*/ 4959d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_LONG, /**< ufmt_getLong() will return without conversion. @see ufmt_getLong */ 5059d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_STRING, /**< ufmt_getUChars() will return without conversion. @see ufmt_getUChars*/ 5159d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_ARRAY, /**< ufmt_countArray() and ufmt_getArray() will return the value. @see ufmt_getArrayItemByIndex */ 5259d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_INT64, /**< ufmt_getInt64() will return without conversion. @see ufmt_getInt64 */ 5359d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_OBJECT, /**< ufmt_getObject() will return without conversion. @see ufmt_getObject*/ 5459d709d503bab6e2b61931737e662dd293b40578ccornelius UFMT_COUNT /**< Count of defined UFormattableType values */ 5559d709d503bab6e2b61931737e662dd293b40578ccornelius} UFormattableType; 5659d709d503bab6e2b61931737e662dd293b40578ccornelius 5759d709d503bab6e2b61931737e662dd293b40578ccornelius 5859d709d503bab6e2b61931737e662dd293b40578ccornelius/** 5959d709d503bab6e2b61931737e662dd293b40578ccornelius * Opaque type representing various types of data which may be used for formatting 6059d709d503bab6e2b61931737e662dd293b40578ccornelius * and parsing operations. 6159d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable 6259d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 6359d709d503bab6e2b61931737e662dd293b40578ccornelius */ 6459d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef void *UFormattable; 6559d709d503bab6e2b61931737e662dd293b40578ccornelius 6659d709d503bab6e2b61931737e662dd293b40578ccornelius/** 6759d709d503bab6e2b61931737e662dd293b40578ccornelius * Initialize a UFormattable, to type UNUM_LONG, value 0 6859d709d503bab6e2b61931737e662dd293b40578ccornelius * may return error if memory allocation failed. 6959d709d503bab6e2b61931737e662dd293b40578ccornelius * parameter status error code. 7059d709d503bab6e2b61931737e662dd293b40578ccornelius * See {@link unum_parseToUFormattable} for example code. 7159d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 7259d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the new UFormattable 7359d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_close 7459d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::Formattable() 7559d709d503bab6e2b61931737e662dd293b40578ccornelius */ 7659d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT UFormattable* U_EXPORT2 7759d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_open(UErrorCode* status); 7859d709d503bab6e2b61931737e662dd293b40578ccornelius 7959d709d503bab6e2b61931737e662dd293b40578ccornelius/** 8059d709d503bab6e2b61931737e662dd293b40578ccornelius * Cleanup any additional memory allocated by this UFormattable. 8159d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the formatter 8259d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 8359d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_open 8459d709d503bab6e2b61931737e662dd293b40578ccornelius */ 8559d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT void U_EXPORT2 8659d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_close(UFormattable* fmt); 8759d709d503bab6e2b61931737e662dd293b40578ccornelius 8859d709d503bab6e2b61931737e662dd293b40578ccornelius#if U_SHOW_CPLUSPLUS_API 8959d709d503bab6e2b61931737e662dd293b40578ccornelius 9059d709d503bab6e2b61931737e662dd293b40578ccorneliusU_NAMESPACE_BEGIN 9159d709d503bab6e2b61931737e662dd293b40578ccornelius 9259d709d503bab6e2b61931737e662dd293b40578ccornelius/** 9359d709d503bab6e2b61931737e662dd293b40578ccornelius * \class LocalUFormattablePointer 9459d709d503bab6e2b61931737e662dd293b40578ccornelius * "Smart pointer" class, closes a UFormattable via ufmt_close(). 9559d709d503bab6e2b61931737e662dd293b40578ccornelius * For most methods see the LocalPointerBase base class. 9659d709d503bab6e2b61931737e662dd293b40578ccornelius * 9759d709d503bab6e2b61931737e662dd293b40578ccornelius * @see LocalPointerBase 9859d709d503bab6e2b61931737e662dd293b40578ccornelius * @see LocalPointer 9959d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 10059d709d503bab6e2b61931737e662dd293b40578ccornelius */ 10159d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattablePointer, UFormattable, ufmt_close); 10259d709d503bab6e2b61931737e662dd293b40578ccornelius 10359d709d503bab6e2b61931737e662dd293b40578ccorneliusU_NAMESPACE_END 10459d709d503bab6e2b61931737e662dd293b40578ccornelius 10559d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 10659d709d503bab6e2b61931737e662dd293b40578ccornelius 10759d709d503bab6e2b61931737e662dd293b40578ccornelius/** 10859d709d503bab6e2b61931737e662dd293b40578ccornelius * Return the type of this object 10959d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 11059d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status status code - U_ILLEGAL_ARGUMENT_ERROR is returned if the UFormattable contains data not supported by 11159d709d503bab6e2b61931737e662dd293b40578ccornelius * the API 11259d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value as a UFormattableType 11359d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_isNumeric 11459d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getType() const 11559d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 11659d709d503bab6e2b61931737e662dd293b40578ccornelius */ 11759d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT UFormattableType U_EXPORT2 11859d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getType(const UFormattable* fmt, UErrorCode *status); 11959d709d503bab6e2b61931737e662dd293b40578ccornelius 12059d709d503bab6e2b61931737e662dd293b40578ccornelius/** 12159d709d503bab6e2b61931737e662dd293b40578ccornelius * Return whether the object is numeric. 12259d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 12359d709d503bab6e2b61931737e662dd293b40578ccornelius * @return true if the object is a double, long, or int64 value, else false. 12459d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_getType 12559d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::isNumeric() const 12659d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 12759d709d503bab6e2b61931737e662dd293b40578ccornelius */ 12859d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT UBool U_EXPORT2 12959d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_isNumeric(const UFormattable* fmt); 13059d709d503bab6e2b61931737e662dd293b40578ccornelius 13159d709d503bab6e2b61931737e662dd293b40578ccornelius/** 13259d709d503bab6e2b61931737e662dd293b40578ccornelius * Gets the UDate value of this object. If the type is not of type UFMT_DATE, 13359d709d503bab6e2b61931737e662dd293b40578ccornelius * status is set to U_INVALID_FORMAT_ERROR and the return value is 13459d709d503bab6e2b61931737e662dd293b40578ccornelius * undefined. 13559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 13659d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 13759d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value 13859d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 13959d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getDate(UErrorCode&) const 14059d709d503bab6e2b61931737e662dd293b40578ccornelius */ 14159d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT UDate U_EXPORT2 14259d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getDate(const UFormattable* fmt, UErrorCode *status); 14359d709d503bab6e2b61931737e662dd293b40578ccornelius 14459d709d503bab6e2b61931737e662dd293b40578ccornelius/** 14559d709d503bab6e2b61931737e662dd293b40578ccornelius * Gets the double value of this object. If the type is not a UFMT_DOUBLE, or 14659d709d503bab6e2b61931737e662dd293b40578ccornelius * if there are additional significant digits than fit in a double type, 14759d709d503bab6e2b61931737e662dd293b40578ccornelius * a conversion is performed with possible loss of precision. 14859d709d503bab6e2b61931737e662dd293b40578ccornelius * If the type is UFMT_OBJECT and the 14959d709d503bab6e2b61931737e662dd293b40578ccornelius * object is a Measure, then the result of 15059d709d503bab6e2b61931737e662dd293b40578ccornelius * getNumber().getDouble(status) is returned. If this object is 15159d709d503bab6e2b61931737e662dd293b40578ccornelius * neither a numeric type nor a Measure, then 0 is returned and 15259d709d503bab6e2b61931737e662dd293b40578ccornelius * the status is set to U_INVALID_FORMAT_ERROR. 15359d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 15459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 15559d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value 15659d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 15759d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getDouble(UErrorCode&) const 15859d709d503bab6e2b61931737e662dd293b40578ccornelius */ 15959d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT double U_EXPORT2 16059d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getDouble(UFormattable* fmt, UErrorCode *status); 16159d709d503bab6e2b61931737e662dd293b40578ccornelius 16259d709d503bab6e2b61931737e662dd293b40578ccornelius/** 16359d709d503bab6e2b61931737e662dd293b40578ccornelius * Gets the long (int32_t) value of this object. If the magnitude is too 16459d709d503bab6e2b61931737e662dd293b40578ccornelius * large to fit in a long, then the maximum or minimum long value, 16559d709d503bab6e2b61931737e662dd293b40578ccornelius * as appropriate, is returned and the status is set to 16659d709d503bab6e2b61931737e662dd293b40578ccornelius * U_INVALID_FORMAT_ERROR. If this object is of type UFMT_INT64 and 16759d709d503bab6e2b61931737e662dd293b40578ccornelius * it fits within a long, then no precision is lost. If it is of 16859d709d503bab6e2b61931737e662dd293b40578ccornelius * type kDouble or kDecimalNumber, then a conversion is peformed, with 16959d709d503bab6e2b61931737e662dd293b40578ccornelius * truncation of any fractional part. If the type is UFMT_OBJECT and 17059d709d503bab6e2b61931737e662dd293b40578ccornelius * the object is a Measure, then the result of 17159d709d503bab6e2b61931737e662dd293b40578ccornelius * getNumber().getLong(status) is returned. If this object is 17259d709d503bab6e2b61931737e662dd293b40578ccornelius * neither a numeric type nor a Measure, then 0 is returned and 17359d709d503bab6e2b61931737e662dd293b40578ccornelius * the status is set to U_INVALID_FORMAT_ERROR. 17459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 17559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 17659d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value 17759d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 17859d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getLong(UErrorCode&) const 17959d709d503bab6e2b61931737e662dd293b40578ccornelius */ 18059d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT int32_t U_EXPORT2 18159d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getLong(UFormattable* fmt, UErrorCode *status); 18259d709d503bab6e2b61931737e662dd293b40578ccornelius 18359d709d503bab6e2b61931737e662dd293b40578ccornelius 18459d709d503bab6e2b61931737e662dd293b40578ccornelius/** 18559d709d503bab6e2b61931737e662dd293b40578ccornelius * Gets the int64_t value of this object. If this object is of a numeric 18659d709d503bab6e2b61931737e662dd293b40578ccornelius * type and the magnitude is too large to fit in an int64, then 18759d709d503bab6e2b61931737e662dd293b40578ccornelius * the maximum or minimum int64 value, as appropriate, is returned 18859d709d503bab6e2b61931737e662dd293b40578ccornelius * and the status is set to U_INVALID_FORMAT_ERROR. If the 18959d709d503bab6e2b61931737e662dd293b40578ccornelius * magnitude fits in an int64, then a casting conversion is 19059d709d503bab6e2b61931737e662dd293b40578ccornelius * peformed, with truncation of any fractional part. If the type 19159d709d503bab6e2b61931737e662dd293b40578ccornelius * is UFMT_OBJECT and the object is a Measure, then the result of 19259d709d503bab6e2b61931737e662dd293b40578ccornelius * getNumber().getDouble(status) is returned. If this object is 19359d709d503bab6e2b61931737e662dd293b40578ccornelius * neither a numeric type nor a Measure, then 0 is returned and 19459d709d503bab6e2b61931737e662dd293b40578ccornelius * the status is set to U_INVALID_FORMAT_ERROR. 19559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 19659d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 19759d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value 19859d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 19959d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getInt64(UErrorCode&) const 20059d709d503bab6e2b61931737e662dd293b40578ccornelius */ 20159d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT int64_t U_EXPORT2 20259d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getInt64(UFormattable* fmt, UErrorCode *status); 20359d709d503bab6e2b61931737e662dd293b40578ccornelius 20459d709d503bab6e2b61931737e662dd293b40578ccornelius/** 20559d709d503bab6e2b61931737e662dd293b40578ccornelius * Returns a pointer to the UObject contained within this 20659d709d503bab6e2b61931737e662dd293b40578ccornelius * formattable (as a const void*), or NULL if this object 20759d709d503bab6e2b61931737e662dd293b40578ccornelius * is not of type UFMT_OBJECT. 20859d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 20959d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 21059d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the value as a const void*. It is a polymorphic C++ object. 21159d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 21259d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getObject() const 21359d709d503bab6e2b61931737e662dd293b40578ccornelius */ 21459d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT const void *U_EXPORT2 21559d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getObject(const UFormattable* fmt, UErrorCode *status); 21659d709d503bab6e2b61931737e662dd293b40578ccornelius 21759d709d503bab6e2b61931737e662dd293b40578ccornelius/** 21859d709d503bab6e2b61931737e662dd293b40578ccornelius * Gets the string value of this object as a UChar string. If the type is not a 21959d709d503bab6e2b61931737e662dd293b40578ccornelius * string, status is set to U_INVALID_FORMAT_ERROR and a NULL pointer is returned. 22059d709d503bab6e2b61931737e662dd293b40578ccornelius * This function is not thread safe and may modify the UFormattable if need be to terminate the string. 22159d709d503bab6e2b61931737e662dd293b40578ccornelius * The returned pointer is not valid if any other functions are called on this UFormattable, or if the UFormattable is closed. 22259d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 22359d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors 22459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param len if non null, contains the string length on return 22559d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the null terminated string value - must not be referenced after any other functions are called on this UFormattable. 22659d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 22759d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getString(UnicodeString&)const 22859d709d503bab6e2b61931737e662dd293b40578ccornelius */ 22959d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT const UChar* U_EXPORT2 23059d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getUChars(UFormattable* fmt, int32_t *len, UErrorCode *status); 23159d709d503bab6e2b61931737e662dd293b40578ccornelius 23259d709d503bab6e2b61931737e662dd293b40578ccornelius/** 23359d709d503bab6e2b61931737e662dd293b40578ccornelius * Get the number of array objects contained, if an array type UFMT_ARRAY 23459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 23559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors. U_ILLEGAL_ARGUMENT_ERROR if not an array type. 23659d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the number of array objects or undefined if not an array type 23759d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 23859d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_getArrayItemByIndex 23959d709d503bab6e2b61931737e662dd293b40578ccornelius */ 24059d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT int32_t U_EXPORT2 24159d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status); 24259d709d503bab6e2b61931737e662dd293b40578ccornelius 24359d709d503bab6e2b61931737e662dd293b40578ccornelius/** 24459d709d503bab6e2b61931737e662dd293b40578ccornelius * Get the specified value from the array of UFormattables. Invalid if the object is not an array type UFMT_ARRAY 24559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 24659d709d503bab6e2b61931737e662dd293b40578ccornelius * @param n the number of the array to return (0 based). 24759d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code - any conversion or format errors. Returns an error if n is out of bounds. 24859d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the nth array value, only valid while the containing UFormattable is valid. NULL if not an array. 24959d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 25059d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getArray(int32_t&, UErrorCode&) const 25159d709d503bab6e2b61931737e662dd293b40578ccornelius */ 25259d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT UFormattable * U_EXPORT2 25359d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status); 25459d709d503bab6e2b61931737e662dd293b40578ccornelius 25559d709d503bab6e2b61931737e662dd293b40578ccornelius/** 25659d709d503bab6e2b61931737e662dd293b40578ccornelius * Returns a numeric string representation of the number contained within this 25759d709d503bab6e2b61931737e662dd293b40578ccornelius * formattable, or NULL if this object does not contain numeric type. 25859d709d503bab6e2b61931737e662dd293b40578ccornelius * For values obtained by parsing, the returned decimal number retains 25959d709d503bab6e2b61931737e662dd293b40578ccornelius * the full precision and range of the original input, unconstrained by 26059d709d503bab6e2b61931737e662dd293b40578ccornelius * the limits of a double floating point or a 64 bit int. 26159d709d503bab6e2b61931737e662dd293b40578ccornelius * 26259d709d503bab6e2b61931737e662dd293b40578ccornelius * This function is not thread safe, and therfore is not declared const, 26359d709d503bab6e2b61931737e662dd293b40578ccornelius * even though it is logically const. 26459d709d503bab6e2b61931737e662dd293b40578ccornelius * The resulting buffer is owned by the UFormattable and is invalid if any other functions are 26559d709d503bab6e2b61931737e662dd293b40578ccornelius * called on the UFormattable. 26659d709d503bab6e2b61931737e662dd293b40578ccornelius * 26759d709d503bab6e2b61931737e662dd293b40578ccornelius * Possible errors include U_MEMORY_ALLOCATION_ERROR, and 26859d709d503bab6e2b61931737e662dd293b40578ccornelius * U_INVALID_STATE if the formattable object has not been set to 26959d709d503bab6e2b61931737e662dd293b40578ccornelius * a numeric type. 27059d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the UFormattable object 27159d709d503bab6e2b61931737e662dd293b40578ccornelius * @param len if non-null, on exit contains the string length (not including the terminating null) 27259d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status the error code 27359d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the character buffer as a NULL terminated string, which is owned by the object and must not be accessed if any other functions are called on this object. 27459d709d503bab6e2b61931737e662dd293b40578ccornelius * @draft ICU 52 27559d709d503bab6e2b61931737e662dd293b40578ccornelius * @see icu::Formattable::getDecimalNumber(UErrorCode&) 27659d709d503bab6e2b61931737e662dd293b40578ccornelius */ 27759d709d503bab6e2b61931737e662dd293b40578ccorneliusU_DRAFT const char * U_EXPORT2 27859d709d503bab6e2b61931737e662dd293b40578ccorneliusufmt_getDecNumChars(UFormattable *fmt, int32_t *len, UErrorCode *status); 27959d709d503bab6e2b61931737e662dd293b40578ccornelius#endif /* U_HIDE_DRAFT_API */ 28059d709d503bab6e2b61931737e662dd293b40578ccornelius 28159d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 28259d709d503bab6e2b61931737e662dd293b40578ccornelius 28359d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 284