void ImmutablePatternModifier::applyToMicros(MicroProps µs, DecimalQuantity &quantity) const { if (rules == nullptr) { micros.modMiddle = pm->getModifier(quantity.isNegative()); } else { // TODO: Fix this. Avoid the copy. DecimalQuantity copy(quantity); copy.roundToInfinity(); StandardPlural::Form plural = copy.getStandardPlural(rules); micros.modMiddle = pm->getModifier(quantity.isNegative(), plural); } }
void MutablePatternModifier::processQuantity(DecimalQuantity &fq, MicroProps µs, UErrorCode &status) const { parent->processQuantity(fq, micros, status); // The unsafe code path performs self-mutation, so we need a const_cast. // This method needs to be const because it overrides a const method in the parent class. auto nonConstThis = const_cast<MutablePatternModifier *>(this); if (needsPlurals()) { // TODO: Fix this. Avoid the copy. DecimalQuantity copy(fq); micros.rounding.apply(copy, status); nonConstThis->setNumberProperties(fq.isNegative(), copy.getStandardPlural(rules)); } else { nonConstThis->setNumberProperties(fq.isNegative(), StandardPlural::Form::COUNT); } micros.modMiddle = this; }