| Index: source/i18n/valueformatter.h
|
| diff --git a/source/i18n/valueformatter.h b/source/i18n/valueformatter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e985edd390e77007a8f9f698ff2d8bc33c6a14ca
|
| --- /dev/null
|
| +++ b/source/i18n/valueformatter.h
|
| @@ -0,0 +1,159 @@
|
| +/*
|
| +*******************************************************************************
|
| +* Copyright (C) 2015, International Business Machines Corporation and *
|
| +* others. All Rights Reserved. *
|
| +*******************************************************************************
|
| +*/
|
| +
|
| +#ifndef VALUEFORMATTER_H
|
| +#define VALUEFORMATTER_H
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "unicode/uobject.h"
|
| +#include "unicode/utypes.h"
|
| +
|
| +
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +class UnicodeString;
|
| +class DigitList;
|
| +class FieldPositionHandler;
|
| +class DigitGrouping;
|
| +class PluralRules;
|
| +class FixedPrecision;
|
| +class DigitFormatter;
|
| +class DigitFormatterOptions;
|
| +class ScientificPrecision;
|
| +class SciFormatterOptions;
|
| +class FixedDecimal;
|
| +class VisibleDigitsWithExponent;
|
| +
|
| +
|
| +/**
|
| + * A closure around rounding and formatting a value. As these instances are
|
| + * designed to be short lived (they only exist while formatting a value), they
|
| + * do not own their own attributes. Rather the caller maintains ownership of
|
| + * all attributes. A caller first calls a prepareXXX method on an instance
|
| + * to share its data before using that instance. Using an
|
| + * instance without first calling a prepareXXX method results in an
|
| + * assertion error and a program crash.
|
| + */
|
| +class U_I18N_API ValueFormatter : public UObject {
|
| +public:
|
| + ValueFormatter() : fType(kFormatTypeCount) {
|
| + }
|
| +
|
| + virtual ~ValueFormatter();
|
| +
|
| + /**
|
| + * This function is here only to support the protected round() method
|
| + * in DecimalFormat. It serves no ther purpose than that.
|
| + *
|
| + * @param value this value is rounded in place.
|
| + * @param status any error returned here.
|
| + */
|
| + DigitList &round(DigitList &value, UErrorCode &status) const;
|
| +
|
| + /**
|
| + * Returns TRUE if the absolute value of value can be fast formatted
|
| + * using ValueFormatter::formatInt32.
|
| + */
|
| + UBool isFastFormattable(int32_t value) const;
|
| +
|
| + /**
|
| + * Converts value to a VisibleDigitsWithExponent.
|
| + * Result may be fixed point or scientific.
|
| + */
|
| + VisibleDigitsWithExponent &toVisibleDigitsWithExponent(
|
| + int64_t value,
|
| + VisibleDigitsWithExponent &digits,
|
| + UErrorCode &status) const;
|
| +
|
| + /**
|
| + * Converts value to a VisibleDigitsWithExponent.
|
| + * Result may be fixed point or scientific.
|
| + */
|
| + VisibleDigitsWithExponent &toVisibleDigitsWithExponent(
|
| + DigitList &value,
|
| + VisibleDigitsWithExponent &digits,
|
| + UErrorCode &status) const;
|
| +
|
| + /**
|
| + * formats positiveValue and appends to appendTo. Returns appendTo.
|
| + * @param positiveValue If negative, no negative sign is formatted.
|
| + * @param handler stores the field positions
|
| + * @param appendTo formatted value appended here.
|
| + */
|
| + UnicodeString &format(
|
| + const VisibleDigitsWithExponent &positiveValue,
|
| + FieldPositionHandler &handler,
|
| + UnicodeString &appendTo) const;
|
| +
|
| +
|
| + /**
|
| + * formats positiveValue and appends to appendTo. Returns appendTo.
|
| + * value must be positive. Calling formatInt32 to format a value when
|
| + * isFastFormattable indicates that the value cannot be fast formatted
|
| + * results in undefined behavior.
|
| + */
|
| + UnicodeString &formatInt32(
|
| + int32_t positiveValue,
|
| + FieldPositionHandler &handler,
|
| + UnicodeString &appendTo) const;
|
| +
|
| + /**
|
| + * Returns the number of code points needed to format.
|
| + * @param positiveValue if negative, the negative sign is not included
|
| + * in count.
|
| + */
|
| + int32_t countChar32(
|
| + const VisibleDigitsWithExponent &positiveValue) const;
|
| +
|
| + /**
|
| + * Prepares this instance for fixed decimal formatting.
|
| + */
|
| + void prepareFixedDecimalFormatting(
|
| + const DigitFormatter &formatter,
|
| + const DigitGrouping &grouping,
|
| + const FixedPrecision &precision,
|
| + const DigitFormatterOptions &options);
|
| +
|
| + /**
|
| + * Prepares this instance for scientific formatting.
|
| + */
|
| + void prepareScientificFormatting(
|
| + const DigitFormatter &formatter,
|
| + const ScientificPrecision &precision,
|
| + const SciFormatterOptions &options);
|
| +
|
| +private:
|
| + ValueFormatter(const ValueFormatter &);
|
| + ValueFormatter &operator=(const ValueFormatter &);
|
| + enum FormatType {
|
| + kFixedDecimal,
|
| + kScientificNotation,
|
| + kFormatTypeCount
|
| + };
|
| +
|
| + FormatType fType;
|
| +
|
| + // for fixed decimal and scientific formatting
|
| + const DigitFormatter *fDigitFormatter;
|
| +
|
| + // for fixed decimal formatting
|
| + const FixedPrecision *fFixedPrecision;
|
| + const DigitFormatterOptions *fFixedOptions;
|
| + const DigitGrouping *fGrouping;
|
| +
|
| + // for scientific formatting
|
| + const ScientificPrecision *fScientificPrecision;
|
| + const SciFormatterOptions *fScientificOptions;
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* !UCONFIG_NO_FORMATTING */
|
| +
|
| +#endif /* VALUEFORMATTER_H */
|
|
|