void MutablePatternModifier::setSymbols(const DecimalFormatSymbols *symbols, const CurrencyUnit ¤cy, const UNumberUnitWidth unitWidth, const PluralRules *rules) { U_ASSERT((rules != nullptr) == needsPlurals()); this->symbols = symbols; uprv_memcpy(static_cast<char16_t *>(this->currencyCode), currency.getISOCurrency(), sizeof(char16_t) * 4); this->unitWidth = unitWidth; this->rules = rules; }
// Private method on base class Precision Precision::withCurrency(const CurrencyUnit ¤cy, UErrorCode &status) const { if (fType == RND_ERROR) { return *this; } // no-op in error state U_ASSERT(fType == RND_CURRENCY); const char16_t *isoCode = currency.getISOCurrency(); double increment = ucurr_getRoundingIncrementForUsage(isoCode, fUnion.currencyUsage, &status); int32_t minMaxFrac = ucurr_getDefaultFractionDigitsForUsage( isoCode, fUnion.currencyUsage, &status); if (increment != 0.0) { return constructIncrement(increment, minMaxFrac); } else { return constructFraction(minMaxFrac, minMaxFrac); } }