// © 2017 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #ifndef __NUMBER_ASFORMAT_H__ #define __NUMBER_ASFORMAT_H__ #include "unicode/numberformatter.h" #include "number_types.h" #include "number_decimalquantity.h" #include "number_scientific.h" #include "number_patternstring.h" #include "number_modifiers.h" #include "number_multiplier.h" #include "number_roundingutils.h" #include "decNumber.h" #include "charstr.h" U_NAMESPACE_BEGIN namespace number { namespace impl { /** * A wrapper around LocalizedNumberFormatter implementing the Format interface, enabling improved * compatibility with other APIs. * * @draft ICU 62 * @see NumberFormatter */ class U_I18N_API LocalizedNumberFormatterAsFormat : public Format { public: LocalizedNumberFormatterAsFormat(const LocalizedNumberFormatter& formatter, const Locale& locale); /** * Destructor. */ ~LocalizedNumberFormatterAsFormat() U_OVERRIDE; /** * Equals operator. */ UBool operator==(const Format& other) const U_OVERRIDE; /** * Creates a copy of this object. */ Format* clone() const U_OVERRIDE; /** * Formats a Number using the wrapped LocalizedNumberFormatter. The provided formattable must be a * number type. */ UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, FieldPosition& pos, UErrorCode& status) const U_OVERRIDE; /** * Formats a Number using the wrapped LocalizedNumberFormatter. The provided formattable must be a * number type. */ UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, FieldPositionIterator* posIter, UErrorCode& status) const U_OVERRIDE; /** * Not supported: sets an error index and returns. */ void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const U_OVERRIDE; /** * Gets the LocalizedNumberFormatter that this wrapper class uses to format numbers. * * For maximum efficiency, this function returns by const reference. You must copy the return value * into a local variable if you want to use it beyond the lifetime of the current object: * * <pre> * LocalizedNumberFormatter localFormatter = fmt->getNumberFormatter(); * </pre> * * You can however use the return value directly when chaining: * * <pre> * FormattedNumber result = fmt->getNumberFormatter().formatDouble(514.23, status); * </pre> * * @return The unwrapped LocalizedNumberFormatter. */ const LocalizedNumberFormatter& getNumberFormatter() const; UClassID getDynamicClassID() const U_OVERRIDE; static UClassID U_EXPORT2 getStaticClassID(); private: LocalizedNumberFormatter fFormatter; // Even though the locale is inside the LocalizedNumberFormatter, we have to keep it here, too, because // LocalizedNumberFormatter doesn't have a getLocale() method, and ICU-TC didn't want to add one. Locale fLocale; }; } // namespace impl } // namespace number U_NAMESPACE_END #endif // __NUMBER_ASFORMAT_H__ #endif /* #if !UCONFIG_NO_FORMATTING */