summaryrefslogtreecommitdiffstats
path: root/intl/icu/source/i18n/numrange_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'intl/icu/source/i18n/numrange_impl.h')
-rw-r--r--intl/icu/source/i18n/numrange_impl.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/numrange_impl.h b/intl/icu/source/i18n/numrange_impl.h
new file mode 100644
index 0000000000..ac1d8a5897
--- /dev/null
+++ b/intl/icu/source/i18n/numrange_impl.h
@@ -0,0 +1,89 @@
+// © 2018 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 __SOURCE_NUMRANGE_TYPES_H__
+#define __SOURCE_NUMRANGE_TYPES_H__
+
+#include "unicode/numberformatter.h"
+#include "unicode/numberrangeformatter.h"
+#include "unicode/simpleformatter.h"
+#include "number_types.h"
+#include "number_decimalquantity.h"
+#include "number_formatimpl.h"
+#include "formatted_string_builder.h"
+#include "formattedval_impl.h"
+#include "pluralranges.h"
+
+U_NAMESPACE_BEGIN namespace number {
+namespace impl {
+
+
+/**
+ * Class similar to UFormattedNumberData.
+ *
+ * Has incomplete magic number logic that will need to be finished
+ * if this is to be exposed as C API in the future.
+ *
+ * Possible magic number: 0x46445200
+ * Reads in ASCII as "FDR" (FormatteDnumberRange with room at the end)
+ */
+class UFormattedNumberRangeData : public FormattedValueStringBuilderImpl {
+public:
+ UFormattedNumberRangeData() : FormattedValueStringBuilderImpl(kUndefinedField) {}
+ virtual ~UFormattedNumberRangeData();
+
+ DecimalQuantity quantity1;
+ DecimalQuantity quantity2;
+ UNumberRangeIdentityResult identityResult = UNUM_IDENTITY_RESULT_COUNT;
+};
+
+
+class NumberRangeFormatterImpl : public UMemory {
+ public:
+ NumberRangeFormatterImpl(const RangeMacroProps& macros, UErrorCode& status);
+
+ void format(UFormattedNumberRangeData& data, bool equalBeforeRounding, UErrorCode& status) const;
+
+ private:
+ NumberFormatterImpl formatterImpl1;
+ NumberFormatterImpl formatterImpl2;
+ bool fSameFormatters;
+
+ UNumberRangeCollapse fCollapse;
+ UNumberRangeIdentityFallback fIdentityFallback;
+
+ SimpleFormatter fRangeFormatter;
+ NumberFormatterImpl fApproximatelyFormatter;
+
+ StandardPluralRanges fPluralRanges;
+
+ void formatSingleValue(UFormattedNumberRangeData& data,
+ MicroProps& micros1, MicroProps& micros2,
+ UErrorCode& status) const;
+
+ void formatApproximately(UFormattedNumberRangeData& data,
+ MicroProps& micros1, MicroProps& micros2,
+ UErrorCode& status) const;
+
+ void formatRange(UFormattedNumberRangeData& data,
+ MicroProps& micros1, MicroProps& micros2,
+ UErrorCode& status) const;
+
+ const Modifier& resolveModifierPlurals(const Modifier& first, const Modifier& second) const;
+};
+
+
+/** Helper function used in upluralrules.cpp */
+const UFormattedNumberRangeData* validateUFormattedNumberRange(
+ const UFormattedNumberRange* uresult, UErrorCode& status);
+
+
+} // namespace impl
+} // namespace number
+U_NAMESPACE_END
+
+#endif //__SOURCE_NUMRANGE_TYPES_H__
+#endif /* #if !UCONFIG_NO_FORMATTING */