Coverage Report

Created: 2025-06-24 06:43

/src/icu/source/i18n/number_multiplier.h
Line
Count
Source (jump to first uncovered line)
1
// © 2018 and later: Unicode, Inc. and others.
2
// License & terms of use: http://www.unicode.org/copyright.html
3
4
#include "unicode/utypes.h"
5
6
#if !UCONFIG_NO_FORMATTING
7
#ifndef __SOURCE_NUMBER_MULTIPLIER_H__
8
#define __SOURCE_NUMBER_MULTIPLIER_H__
9
10
#include "numparse_types.h"
11
#include "number_decimfmtprops.h"
12
13
U_NAMESPACE_BEGIN namespace number {
14
namespace impl {
15
16
17
/**
18
 * Wraps a {@link Multiplier} for use in the number formatting pipeline.
19
 */
20
// Exported as U_I18N_API for tests
21
class U_I18N_API MultiplierFormatHandler : public MicroPropsGenerator, public UMemory {
22
  public:
23
0
    MultiplierFormatHandler() = default; // WARNING: Leaves object in an unusable state; call setAndChain()
24
25
    void setAndChain(const Scale& multiplier, const MicroPropsGenerator* parent);
26
27
    void processQuantity(DecimalQuantity& quantity, MicroProps& micros,
28
                         UErrorCode& status) const U_OVERRIDE;
29
30
  private:
31
    Scale fMultiplier;
32
    const MicroPropsGenerator *fParent;
33
};
34
35
36
/** Gets a Scale from a DecimalFormatProperties. In Java, defined in RoundingUtils.java */
37
0
static inline Scale scaleFromProperties(const DecimalFormatProperties& properties) {
38
0
    int32_t magnitudeMultiplier = properties.magnitudeMultiplier + properties.multiplierScale;
39
0
    int32_t arbitraryMultiplier = properties.multiplier;
40
0
    if (magnitudeMultiplier != 0 && arbitraryMultiplier != 1) {
41
0
        return Scale::byDoubleAndPowerOfTen(arbitraryMultiplier, magnitudeMultiplier);
42
0
    } else if (magnitudeMultiplier != 0) {
43
0
        return Scale::powerOfTen(magnitudeMultiplier);
44
0
    } else if (arbitraryMultiplier != 1) {
45
0
        return Scale::byDouble(arbitraryMultiplier);
46
0
    } else {
47
0
        return Scale::none();
48
0
    }
49
0
}
Unexecuted instantiation: number_decimalquantity.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_utils.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: decimfmt.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: formattedval_sbimpl.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_asformat.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_fluent.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_formatimpl.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_longnames.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_mapper.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_multiplier.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_output.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_patternmodifier.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_patternstring.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_scientific.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_skeletons.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_symbolswrapper.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_usageprefs.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: numfmt.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: numparse_impl.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: plurfmt.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: plurrule.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_compact.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: numparse_affixes.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: pluralranges.cpp:icu_70::number::impl::scaleFromProperties(icu_70::number::impl::DecimalFormatProperties const&)
50
51
52
} // namespace impl
53
} // namespace number
54
U_NAMESPACE_END
55
56
#endif //__SOURCE_NUMBER_MULTIPLIER_H__
57
#endif /* #if !UCONFIG_NO_FORMATTING */