Bug 1795756 - Part 5: Support roundingMode, roundingIncrement, and stripTrailingZero for PluralRules. r=platform-i18n-reviewers,dminor

Required updates for the next patch in this stack.

Also replaces `PluralRulesOptions::RoundingPriority` with an alias to
`NumberFormatOptions::RoundingPriority`, so we don't have to duplicate the
`RoundingPriority` and `RoundingMode` enums.

Differential Revision: https://phabricator.services.mozilla.com/D179946
This commit is contained in:
André Bargull
2023-06-06 06:42:07 +00:00
parent 0a38651870
commit ce11dcc3a3

View File

@@ -6,7 +6,6 @@
#define intl_components_PluralRules_h_
#include <string_view>
#include <type_traits>
#include <utility>
#include "mozilla/intl/ICUError.h"
@@ -128,6 +127,12 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
options.mSignificantDigits.emplace(mSignificantDigits.ref());
}
options.mStripTrailingZero = mStripTrailingZero;
options.mRoundingIncrement = mRoundingIncrement;
options.mRoundingMode = NumberFormatOptions::RoundingMode(mRoundingMode);
options.mRoundingPriority =
NumberFormatOptions::RoundingPriority(mRoundingPriority);
@@ -155,6 +160,12 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
options.mSignificantDigits.emplace(mSignificantDigits.ref());
}
options.mStripTrailingZero = mStripTrailingZero;
options.mRoundingIncrement = mRoundingIncrement;
options.mRoundingMode = NumberFormatOptions::RoundingMode(mRoundingMode);
options.mRoundingPriority =
NumberFormatOptions::RoundingPriority(mRoundingPriority);
@@ -192,28 +203,29 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
*/
Maybe<std::pair<uint32_t, uint32_t>> mSignificantDigits;
/**
* Set to true to strip trailing zeros after the decimal point for integer
* values.
*/
bool mStripTrailingZero = false;
/**
* Set the rounding increment, which must be a non-zero number.
*/
uint32_t mRoundingIncrement = 1;
/**
* Set the rounding mode.
*/
using RoundingMode = NumberFormatOptions::RoundingMode;
RoundingMode mRoundingMode = RoundingMode::HalfExpand;
/**
* Set the rounding priority. |mFractionDigits| and |mSignificantDigits| must
* both be set if the rounding priority isn't equal to "auto".
*/
enum class RoundingPriority {
Auto,
MorePrecision,
LessPrecision,
} mRoundingPriority = RoundingPriority::Auto;
// Must be compatible with NumberFormatOptions::RoundingPriority.
static_assert(std::is_same_v<
std::underlying_type_t<RoundingPriority>,
std::underlying_type_t<NumberFormatOptions::RoundingPriority>>);
static_assert(RoundingPriority::Auto ==
RoundingPriority(NumberFormatOptions::RoundingPriority::Auto));
static_assert(
RoundingPriority::LessPrecision ==
RoundingPriority(NumberFormatOptions::RoundingPriority::LessPrecision));
static_assert(
RoundingPriority::MorePrecision ==
RoundingPriority(NumberFormatOptions::RoundingPriority::MorePrecision));
using RoundingPriority = NumberFormatOptions::RoundingPriority;
RoundingPriority mRoundingPriority = RoundingPriority::Auto;
};
} // namespace mozilla::intl