Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/intl/icu/source/i18n/number_compact.h
Line
Count
Source (jump to first uncovered line)
1
// © 2017 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 __NUMBER_COMPACT_H__
8
#define __NUMBER_COMPACT_H__
9
10
#include "standardplural.h"
11
#include "number_types.h"
12
#include "unicode/unum.h"
13
#include "uvector.h"
14
#include "resource.h"
15
#include "number_patternmodifier.h"
16
17
U_NAMESPACE_BEGIN namespace number {
18
namespace impl {
19
20
static const int32_t COMPACT_MAX_DIGITS = 15;
21
22
class CompactData : public MultiplierProducer {
23
  public:
24
    CompactData();
25
26
    void populate(const Locale &locale, const char *nsName, CompactStyle compactStyle,
27
                  CompactType compactType, UErrorCode &status);
28
29
    int32_t getMultiplier(int32_t magnitude) const U_OVERRIDE;
30
31
    const UChar *getPattern(int32_t magnitude, StandardPlural::Form plural) const;
32
33
    void getUniquePatterns(UVector &output, UErrorCode &status) const;
34
35
  private:
36
    const UChar *patterns[(COMPACT_MAX_DIGITS + 1) * StandardPlural::COUNT];
37
    int8_t multipliers[COMPACT_MAX_DIGITS + 1];
38
    int8_t largestMagnitude;
39
    UBool isEmpty;
40
41
    class CompactDataSink : public ResourceSink {
42
      public:
43
0
        explicit CompactDataSink(CompactData &data) : data(data) {}
44
45
        void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) U_OVERRIDE;
46
47
      private:
48
        CompactData &data;
49
    };
50
};
51
52
struct CompactModInfo {
53
    const ImmutablePatternModifier *mod;
54
    const UChar* patternString;
55
};
56
57
class CompactHandler : public MicroPropsGenerator, public UMemory {
58
  public:
59
    CompactHandler(CompactStyle compactStyle, const Locale &locale, const char *nsName,
60
                   CompactType compactType, const PluralRules *rules,
61
                   MutablePatternModifier *buildReference, const MicroPropsGenerator *parent,
62
                   UErrorCode &status);
63
64
    ~CompactHandler() U_OVERRIDE;
65
66
    void
67
    processQuantity(DecimalQuantity &quantity, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
68
69
  private:
70
    const PluralRules *rules;
71
    const MicroPropsGenerator *parent;
72
    // Initial capacity of 12 for 0K, 00K, 000K, ...M, ...B, and ...T
73
    MaybeStackArray<CompactModInfo, 12> precomputedMods;
74
    int32_t precomputedModsLength = 0;
75
    CompactData data;
76
    ParsedPatternInfo unsafePatternInfo;
77
    UBool safe;
78
79
    /** Used by the safe code path */
80
    void precomputeAllModifiers(MutablePatternModifier &buildReference, UErrorCode &status);
81
};
82
83
84
} // namespace impl
85
} // namespace number
86
U_NAMESPACE_END
87
88
#endif //__NUMBER_COMPACT_H__
89
90
#endif /* #if !UCONFIG_NO_FORMATTING */