From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../source/i18n/unicode/usimplenumberformatter.h | 305 +++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 intl/icu/source/i18n/unicode/usimplenumberformatter.h (limited to 'intl/icu/source/i18n/unicode/usimplenumberformatter.h') diff --git a/intl/icu/source/i18n/unicode/usimplenumberformatter.h b/intl/icu/source/i18n/unicode/usimplenumberformatter.h new file mode 100644 index 0000000000..ef89b46b9c --- /dev/null +++ b/intl/icu/source/i18n/unicode/usimplenumberformatter.h @@ -0,0 +1,305 @@ +// © 2022 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef __USIMPLENUMBERFORMATTER_H__ +#define __USIMPLENUMBERFORMATTER_H__ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/uformattednumber.h" +#include "unicode/unumberoptions.h" + +/** + * \file + * \brief C API: Simple number formatting focused on low memory and code size. + * + * These functions render locale-aware number strings but without the bells and whistles found in + * other number formatting APIs such as those in unumberformatter.h, like units and currencies. + * + * Example using C++ helpers: + * + *
+ * LocalUSimpleNumberFormatterPointer uformatter(usnumf_openForLocale("de-CH", status));
+ * LocalUFormattedNumberPointer uresult(unumf_openResult(status));
+ * usnumf_formatInt64(uformatter.getAlias(), 55, uresult.getAlias(), status);
+ * assertEquals("",
+ *     u"55",
+ *     ufmtval_getString(unumf_resultAsValue(uresult.getAlias(), status), nullptr, status));
+ * 
+ * + * Example using pure C: + * + *
+ * UErrorCode ec = U_ZERO_ERROR;
+ * USimpleNumberFormatter* uformatter = usnumf_openForLocale("bn", &ec);
+ * USimpleNumber* unumber = usnum_openForInt64(1000007, &ec);
+ * UFormattedNumber* uresult = unumf_openResult(&ec);
+ * usnumf_format(uformatter, unumber, uresult, &ec);
+ * int32_t len;
+ * const UChar* str = ufmtval_getString(unumf_resultAsValue(uresult, &ec), &len, &ec);
+ * if (assertSuccess("Formatting end-to-end", &ec)) {
+ *     assertUEquals("Should produce a result in Bangla digits", u"১০,০০,০০৭", str);
+ * }
+
+ * // Cleanup:
+ * unumf_closeResult(uresult);
+ * usnum_close(unumber);
+ * usnumf_close(uformatter);
+ * 
+ */ + +#ifndef U_HIDE_DRAFT_API + + +/** + * An explicit sign option for a SimpleNumber. + * + * @draft ICU 73 + */ +typedef enum USimpleNumberSign { + /** + * Render a plus sign. + * + * @draft ICU 73 + */ + UNUM_SIMPLE_NUMBER_PLUS_SIGN, + /** + * Render no sign. + * + * @draft ICU 73 + */ + UNUM_SIMPLE_NUMBER_NO_SIGN, + /** + * Render a minus sign. + * + * @draft ICU 73 + */ + UNUM_SIMPLE_NUMBER_MINUS_SIGN, +} USimpleNumberSign; + + +struct USimpleNumber; +/** + * C-compatible version of icu::number::SimpleNumber. + * + * @draft ICU 73 + */ +typedef struct USimpleNumber USimpleNumber; + + +struct USimpleNumberFormatter; +/** + * C-compatible version of icu::number::SimpleNumberFormatter. + * + * @draft ICU 73 + */ +typedef struct USimpleNumberFormatter USimpleNumberFormatter; + + +/** + * Creates a new USimpleNumber to be formatted with a USimpleNumberFormatter. + * + * @draft ICU 73 + */ +U_CAPI USimpleNumber* U_EXPORT2 +usnum_openForInt64(int64_t value, UErrorCode* ec); + + +/** + * Overwrites the value in a USimpleNumber to an int64_t. + * + * This can be used to reset the number value after formatting. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_setToInt64(USimpleNumber* unumber, int64_t value, UErrorCode* ec); + + +/** + * Changes the value of the USimpleNumber by a power of 10. + * + * This function immediately mutates the inner value. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_multiplyByPowerOfTen(USimpleNumber* unumber, int32_t power, UErrorCode* ec); + + +/** + * Rounds the value currently stored in the USimpleNumber to the given power of 10. + * + * This function immediately mutates the inner value. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_roundTo(USimpleNumber* unumber, int32_t power, UNumberFormatRoundingMode roundingMode, UErrorCode* ec); + + +/** + * Pads the beginning of the number with zeros up to the given minimum number of integer digits. + * + * This setting is applied upon formatting the number. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_setMinimumIntegerDigits(USimpleNumber* unumber, int32_t minimumIntegerDigits, UErrorCode* ec); + + +/** + * Pads the end of the number with zeros up to the given minimum number of fraction digits. + * + * This setting is applied upon formatting the number. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_setMinimumFractionDigits(USimpleNumber* unumber, int32_t minimumFractionDigits, UErrorCode* ec); + + +/** + * Truncates digits from the beginning of the number to the given maximum number of integer digits. + * + * This function immediately mutates the inner value. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_truncateStart(USimpleNumber* unumber, int32_t maximumIntegerDigits, UErrorCode* ec); + + +/** + * Sets the sign of the number: an explicit plus sign, explicit minus sign, or no sign. + * + * This setting is applied upon formatting the number. + * + * NOTE: This does not support accounting sign notation. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_setSign(USimpleNumber* unumber, USimpleNumberSign sign, UErrorCode* ec); + + +/** + * Creates a new USimpleNumberFormatter with all locale defaults. + * + * @draft ICU 73 + */ +U_CAPI USimpleNumberFormatter* U_EXPORT2 +usnumf_openForLocale(const char* locale, UErrorCode* ec); + + +/** + * Creates a new USimpleNumberFormatter, overriding the grouping strategy. + * + * @draft ICU 73 + */ +U_CAPI USimpleNumberFormatter* U_EXPORT2 +usnumf_openForLocaleAndGroupingStrategy( + const char* locale, UNumberGroupingStrategy groupingStrategy, UErrorCode* ec); + + +/** + * Formats a number using this SimpleNumberFormatter. + * + * The USimpleNumber is cleared after calling this function. It can be re-used via + * usnum_setToInt64. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnumf_format( + const USimpleNumberFormatter* uformatter, + USimpleNumber* unumber, + UFormattedNumber* uresult, + UErrorCode* ec); + + +/** + * Formats an integer using this SimpleNumberFormatter. + * + * For more control over the formatting, use USimpleNumber. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnumf_formatInt64( + const USimpleNumberFormatter* uformatter, + int64_t value, + UFormattedNumber* uresult, + UErrorCode* ec); + + +/** + * Frees the memory held by a USimpleNumber. + * + * NOTE: Normally, a USimpleNumber should be adopted by usnumf_formatAndAdoptNumber. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnum_close(USimpleNumber* unumber); + + +/** + * Frees the memory held by a USimpleNumberFormatter. + * + * @draft ICU 73 + */ +U_CAPI void U_EXPORT2 +usnumf_close(USimpleNumberFormatter* uformatter); + + +#if U_SHOW_CPLUSPLUS_API +U_NAMESPACE_BEGIN + +/** + * \class LocalUSimpleNumberPointer + * "Smart pointer" class; closes a USimpleNumber via usnum_close(). + * For most methods see the LocalPointerBase base class. + * + * NOTE: Normally, a USimpleNumber should be adopted by usnumf_formatAndAdoptNumber. + * If you use LocalUSimpleNumberPointer, call `.orphan()` when passing to that function. + * + * Usage: + *
+ * LocalUSimpleNumberPointer uformatter(usnumf_openForInteger(...));
+ * // no need to explicitly call usnum_close()
+ * 
+ * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 73 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUSimpleNumberPointer, USimpleNumber, usnum_close); + +/** + * \class LocalUSimpleNumberFormatterPointer + * "Smart pointer" class; closes a USimpleNumberFormatter via usnumf_close(). + * For most methods see the LocalPointerBase base class. + * + * Usage: + *
+ * LocalUSimpleNumberFormatterPointer uformatter(usnumf_openForLocale(...));
+ * // no need to explicitly call usnumf_close()
+ * 
+ * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 73 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUSimpleNumberFormatterPointer, USimpleNumberFormatter, usnumf_close); + +U_NAMESPACE_END +#endif // U_SHOW_CPLUSPLUS_API + +#endif // U_HIDE_DRAFT_API + +#endif /* #if !UCONFIG_NO_FORMATTING */ +#endif //__USIMPLENUMBERFORMATTER_H__ -- cgit v1.2.3