ICU 76.1: i18n/unicode/simplenumberformatter.h Source File

ICU 76.1 76.1

simplenumberformatter.h
Go to the documentation of this file.
1// © 2022 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3
4#ifndef __SIMPLENUMBERFORMATTERH__
5#define __SIMPLENUMBERFORMATTERH__
6
7#include "unicode/utypes.h"
8
9#if U_SHOW_CPLUSPLUS_API
10
11#if !UCONFIG_NO_FORMATTING
12
13#include "unicode/dcfmtsym.h"
14#include "unicode/usimplenumberformatter.h"
15#include "unicode/formattednumber.h"
16
31U_NAMESPACE_BEGIN
32
33/* forward declaration */
34class SimpleDateFormat;
35
36namespace number { // icu::number
37
38
39namespace impl {
40class UFormattedNumberData;
41struct SimpleMicroProps;
42class AdoptingSignumModifierStore;
43} // icu::number::impl
44
45
53 class U_I18N_API SimpleNumber : public UMemory {
54 public:
60 static SimpleNumber forInt64(int64_t value, UErrorCode& status);
61
69 void multiplyByPowerOfTen(int32_t power, UErrorCode& status);
70
79 void roundTo(int32_t power, UNumberFormatRoundingMode roundingMode, UErrorCode& status);
80
81#ifndef U_HIDE_DRAFT_API
87 void setMaximumIntegerDigits(uint32_t maximumIntegerDigits, UErrorCode& status);
88#endif // U_HIDE_DRAFT_API
89
95 void setMinimumIntegerDigits(uint32_t minimumIntegerDigits, UErrorCode& status);
96
102 void setMinimumFractionDigits(uint32_t minimumFractionDigits, UErrorCode& status);
103
113 void setSign(USimpleNumberSign sign, UErrorCode& status);
114
122 SimpleNumber() = default;
123
129 ~SimpleNumber() {
130 cleanup();
131 }
132
138 SimpleNumber(SimpleNumber&& other) noexcept {
139 fData = other.fData;
140 fSign = other.fSign;
141 other.fData = nullptr;
142 }
143
149 SimpleNumber& operator=(SimpleNumber&& other) noexcept {
150 cleanup();
151 fData = other.fData;
152 fSign = other.fSign;
153 other.fData = nullptr;
154 return *this;
155 }
156
157 private:
158 SimpleNumber(impl::UFormattedNumberData* data, UErrorCode& status);
159 SimpleNumber(const SimpleNumber&) = delete;
160 SimpleNumber& operator=(const SimpleNumber&) = delete;
161
162 void cleanup();
163
164 impl::UFormattedNumberData* fData = nullptr;
165 USimpleNumberSign fSign = UNUM_SIMPLE_NUMBER_NO_SIGN;
166
167 friend class SimpleNumberFormatter;
168
169 // Uses the private constructor to avoid a heap allocation
170 friend class icu::SimpleDateFormat;
171};
172
173
184 class U_I18N_API SimpleNumberFormatter : public UMemory {
185 public:
191 static SimpleNumberFormatter forLocale(
192 const icu::Locale &locale,
193 UErrorCode &status);
194
200 static SimpleNumberFormatter forLocaleAndGroupingStrategy(
201 const icu::Locale &locale,
202 UNumberGroupingStrategy groupingStrategy,
203 UErrorCode &status);
204
213 static SimpleNumberFormatter forLocaleAndSymbolsAndGroupingStrategy(
214 const icu::Locale &locale,
215 const DecimalFormatSymbols &symbols,
216 UNumberGroupingStrategy groupingStrategy,
217 UErrorCode &status);
218
227 FormattedNumber format(SimpleNumber value, UErrorCode &status) const;
228
236 FormattedNumber formatInt64(int64_t value, UErrorCode &status) const {
237 return format(SimpleNumber::forInt64(value, status), status);
238 }
239
240#ifndef U_HIDE_INTERNAL_API
245 void formatImpl(impl::UFormattedNumberData* data, USimpleNumberSign sign, UErrorCode& status) const;
246#endif // U_HIDE_INTERNAL_API
247
253 ~SimpleNumberFormatter() {
254 cleanup();
255 }
256
262 SimpleNumberFormatter() = default;
263
269 SimpleNumberFormatter(SimpleNumberFormatter&& other) noexcept {
270 fGroupingStrategy = other.fGroupingStrategy;
271 fOwnedSymbols = other.fOwnedSymbols;
272 fMicros = other.fMicros;
273 fPatternModifier = other.fPatternModifier;
274 other.fOwnedSymbols = nullptr;
275 other.fMicros = nullptr;
276 other.fPatternModifier = nullptr;
277 }
278
284 SimpleNumberFormatter& operator=(SimpleNumberFormatter&& other) noexcept {
285 cleanup();
286 fGroupingStrategy = other.fGroupingStrategy;
287 fOwnedSymbols = other.fOwnedSymbols;
288 fMicros = other.fMicros;
289 fPatternModifier = other.fPatternModifier;
290 other.fOwnedSymbols = nullptr;
291 other.fMicros = nullptr;
292 other.fPatternModifier = nullptr;
293 return *this;
294 }
295
296 private:
297 void initialize(
298 const icu::Locale &locale,
299 const DecimalFormatSymbols &symbols,
300 UNumberGroupingStrategy groupingStrategy,
301 UErrorCode &status);
302
303 void cleanup();
304
305 SimpleNumberFormatter(const SimpleNumberFormatter&) = delete;
306
307 SimpleNumberFormatter& operator=(const SimpleNumberFormatter&) = delete;
308
309 UNumberGroupingStrategy fGroupingStrategy = UNUM_GROUPING_AUTO;
310
311 // Owned Pointers:
312 DecimalFormatSymbols* fOwnedSymbols = nullptr; // can be empty
313 impl::SimpleMicroProps* fMicros = nullptr;
314 impl::AdoptingSignumModifierStore* fPatternModifier = nullptr;
315};
316
317
318} // namespace number
319U_NAMESPACE_END
320
321#endif /* #if !UCONFIG_NO_FORMATTING */
322
323#endif /* U_SHOW_CPLUSPLUS_API */
324
325#endif // __SIMPLENUMBERFORMATTERH__
326
icu::DecimalFormatSymbols
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition dcfmtsym.h:86
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:195
icu::SimpleDateFormat
SimpleDateFormat is a concrete class for formatting and parsing dates in a language-independent manne...
Definition smpdtfmt.h:385
icu::UMemory
UMemory is the common ICU base class.
Definition uobject.h:115
icu::number::FormattedNumber
The result of a number formatting operation.
Definition formattednumber.h:48
icu::number::SimpleNumberFormatter
A special NumberFormatter focused on smaller binary size and memory use.
Definition simplenumberformatter.h:184
icu::number::SimpleNumberFormatter::formatInt64
FormattedNumber formatInt64(int64_t value, UErrorCode &status) const
Formats an integer using this SimpleNumberFormatter.
Definition simplenumberformatter.h:236
icu::number::SimpleNumberFormatter::SimpleNumberFormatter
SimpleNumberFormatter(SimpleNumberFormatter &&other) noexcept
SimpleNumberFormatter: Move constructor.
Definition simplenumberformatter.h:269
icu::number::SimpleNumberFormatter::operator=
SimpleNumberFormatter & operator=(SimpleNumberFormatter &&other) noexcept
SimpleNumberFormatter: Move assignment.
Definition simplenumberformatter.h:284
icu::number::SimpleNumberFormatter::~SimpleNumberFormatter
~SimpleNumberFormatter()
Destruct this SimpleNumberFormatter, cleaning up any memory it might own.
Definition simplenumberformatter.h:253
icu::number::SimpleNumberFormatter::forLocaleAndGroupingStrategy
static SimpleNumberFormatter forLocaleAndGroupingStrategy(const icu::Locale &locale, UNumberGroupingStrategy groupingStrategy, UErrorCode &status)
Creates a new SimpleNumberFormatter, overriding the grouping strategy.
icu::number::SimpleNumberFormatter::formatImpl
void formatImpl(impl::UFormattedNumberData *data, USimpleNumberSign sign, UErrorCode &status) const
Run the formatter with the internal types.
icu::number::SimpleNumberFormatter::format
FormattedNumber format(SimpleNumber value, UErrorCode &status) const
Formats a value using this SimpleNumberFormatter.
icu::number::SimpleNumberFormatter::SimpleNumberFormatter
SimpleNumberFormatter()=default
Creates a shell, initialized but non-functional SimpleNumberFormatter.
icu::number::SimpleNumberFormatter::forLocale
static SimpleNumberFormatter forLocale(const icu::Locale &locale, UErrorCode &status)
Creates a new SimpleNumberFormatter with all locale defaults.
icu::number::SimpleNumberFormatter::forLocaleAndSymbolsAndGroupingStrategy
static SimpleNumberFormatter forLocaleAndSymbolsAndGroupingStrategy(const icu::Locale &locale, const DecimalFormatSymbols &symbols, UNumberGroupingStrategy groupingStrategy, UErrorCode &status)
Creates a new SimpleNumberFormatter, overriding the grouping strategy and symbols.
icu::number::SimpleNumber
An input type for SimpleNumberFormatter.
Definition simplenumberformatter.h:53
icu::number::SimpleNumber::setSign
void setSign(USimpleNumberSign sign, UErrorCode &status)
Sets the sign of the number: an explicit plus sign, explicit minus sign, or no sign.
icu::number::SimpleNumber::operator=
SimpleNumber & operator=(SimpleNumber &&other) noexcept
SimpleNumber move assignment.
Definition simplenumberformatter.h:149
icu::number::SimpleNumber::SimpleNumber
SimpleNumber(SimpleNumber &&other) noexcept
SimpleNumber move constructor.
Definition simplenumberformatter.h:138
icu::number::SimpleNumber::setMinimumIntegerDigits
void setMinimumIntegerDigits(uint32_t minimumIntegerDigits, UErrorCode &status)
Pads the beginning of the number with zeros up to the given minimum number of integer digits.
icu::number::SimpleNumber::setMaximumIntegerDigits
void setMaximumIntegerDigits(uint32_t maximumIntegerDigits, UErrorCode &status)
Sets the number of integer digits to the given amount, truncating if necessary.
icu::number::SimpleNumber::setMinimumFractionDigits
void setMinimumFractionDigits(uint32_t minimumFractionDigits, UErrorCode &status)
Pads the end of the number with zeros up to the given minimum number of fraction digits.
icu::number::SimpleNumber::~SimpleNumber
~SimpleNumber()
Destruct this SimpleNumber, cleaning up any memory it might own.
Definition simplenumberformatter.h:129
icu::number::SimpleNumber::multiplyByPowerOfTen
void multiplyByPowerOfTen(int32_t power, UErrorCode &status)
Changes the value of the SimpleNumber by a power of 10.
icu::number::SimpleNumber::SimpleNumber
SimpleNumber()=default
Creates a new, empty SimpleNumber that does not contain a value.
icu::number::SimpleNumber::forInt64
static SimpleNumber forInt64(int64_t value, UErrorCode &status)
Creates a SimpleNumber for an integer.
icu::number::SimpleNumber::roundTo
void roundTo(int32_t power, UNumberFormatRoundingMode roundingMode, UErrorCode &status)
Rounds the value currently stored in the SimpleNumber to the given power of 10, which can be before o...
dcfmtsym.h
C++ API: Symbols for formatting numbers.
formattednumber.h
C API: Formatted number result from various number formatting functions.
UNumberFormatRoundingMode
UNumberFormatRoundingMode
The possible number format rounding modes.
Definition unumberoptions.h:28
UNumberGroupingStrategy
UNumberGroupingStrategy
An enum declaring the strategy for when and how to display grouping separators (i....
Definition unumberoptions.h:96
UNUM_GROUPING_AUTO
@ UNUM_GROUPING_AUTO
Display grouping using the default strategy for all locales.
Definition unumberoptions.h:133
usimplenumberformatter.h
C API: Simple number formatting focused on low memory and code size.
USimpleNumberSign
USimpleNumberSign
An explicit sign option for a SimpleNumber.
Definition usimplenumberformatter.h:58
UNUM_SIMPLE_NUMBER_NO_SIGN
@ UNUM_SIMPLE_NUMBER_NO_SIGN
Render no sign.
Definition usimplenumberformatter.h:70
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition utypes.h:430
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:316