Coverage Report

Created: 2025-10-24 06:54

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/icu/icu4c/source/i18n/number_multiplier.h
Line
Count
Source
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
14
namespace number::impl {
15
16
/**
17
 * Wraps a {@link Multiplier} for use in the number formatting pipeline.
18
 */
19
// Exported as U_I18N_API for tests
20
class U_I18N_API MultiplierFormatHandler : public MicroPropsGenerator, public UMemory {
21
  public:
22
1.26M
    MultiplierFormatHandler() = default; // WARNING: Leaves object in an unusable state; call setAndChain()
23
24
    void setAndChain(const Scale& multiplier, const MicroPropsGenerator* parent);
25
26
    void processQuantity(DecimalQuantity& quantity, MicroProps& micros,
27
                         UErrorCode& status) const override;
28
29
  private:
30
    Scale fMultiplier;
31
    const MicroPropsGenerator *fParent;
32
};
33
34
35
/** Gets a Scale from a DecimalFormatProperties. In Java, defined in RoundingUtils.java */
36
623k
static inline Scale scaleFromProperties(const DecimalFormatProperties& properties) {
37
623k
    int32_t magnitudeMultiplier = properties.magnitudeMultiplier + properties.multiplierScale;
38
623k
    int32_t arbitraryMultiplier = properties.multiplier;
39
623k
    if (magnitudeMultiplier != 0 && arbitraryMultiplier != 1) {
40
0
        return Scale::byDoubleAndPowerOfTen(arbitraryMultiplier, magnitudeMultiplier);
41
623k
    } else if (magnitudeMultiplier != 0) {
42
23.0k
        return Scale::powerOfTen(magnitudeMultiplier);
43
600k
    } else if (arbitraryMultiplier != 1) {
44
0
        return Scale::byDouble(arbitraryMultiplier);
45
600k
    } else {
46
600k
        return Scale::none();
47
600k
    }
48
623k
}
Unexecuted instantiation: reldatefmt.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: formattedval_sbimpl.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: numfmt.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: plurrule.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: decimfmt.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_decimalquantity.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_fluent.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_formatimpl.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_longnames.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
number_mapper.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Line
Count
Source
36
489k
static inline Scale scaleFromProperties(const DecimalFormatProperties& properties) {
37
489k
    int32_t magnitudeMultiplier = properties.magnitudeMultiplier + properties.multiplierScale;
38
489k
    int32_t arbitraryMultiplier = properties.multiplier;
39
489k
    if (magnitudeMultiplier != 0 && arbitraryMultiplier != 1) {
40
0
        return Scale::byDoubleAndPowerOfTen(arbitraryMultiplier, magnitudeMultiplier);
41
489k
    } else if (magnitudeMultiplier != 0) {
42
11.8k
        return Scale::powerOfTen(magnitudeMultiplier);
43
477k
    } else if (arbitraryMultiplier != 1) {
44
0
        return Scale::byDouble(arbitraryMultiplier);
45
477k
    } else {
46
477k
        return Scale::none();
47
477k
    }
48
489k
}
Unexecuted instantiation: number_multiplier.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_output.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_patternmodifier.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_patternstring.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_scientific.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_symbolswrapper.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_usageprefs.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_utils.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
numparse_impl.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Line
Count
Source
36
134k
static inline Scale scaleFromProperties(const DecimalFormatProperties& properties) {
37
134k
    int32_t magnitudeMultiplier = properties.magnitudeMultiplier + properties.multiplierScale;
38
134k
    int32_t arbitraryMultiplier = properties.multiplier;
39
134k
    if (magnitudeMultiplier != 0 && arbitraryMultiplier != 1) {
40
0
        return Scale::byDoubleAndPowerOfTen(arbitraryMultiplier, magnitudeMultiplier);
41
134k
    } else if (magnitudeMultiplier != 0) {
42
11.1k
        return Scale::powerOfTen(magnitudeMultiplier);
43
123k
    } else if (arbitraryMultiplier != 1) {
44
0
        return Scale::byDouble(arbitraryMultiplier);
45
123k
    } else {
46
123k
        return Scale::none();
47
123k
    }
48
134k
}
Unexecuted instantiation: pluralranges.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: plurfmt.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_compact.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: numparse_affixes.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: compactdecimalformat.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_skeletons.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_asformat.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
Unexecuted instantiation: number_simple.cpp:icu_78::number::impl::scaleFromProperties(icu_78::number::impl::DecimalFormatProperties const&)
49
50
} // namespace number::impl
51
U_NAMESPACE_END
52
53
#endif //__SOURCE_NUMBER_MULTIPLIER_H__
54
#endif /* #if !UCONFIG_NO_FORMATTING */