You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.3 KiB
107 lines
3.3 KiB
4 months ago
|
// © 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.
|
||
|
*
|
||
|
* @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.
|
||
|
*/
|
||
|
LocalizedNumberFormatterAsFormat* 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 */
|