1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#ifndef DataFormats_Common_ELseverityLevel_h
#define DataFormats_Common_ELseverityLevel_h
// ----------------------------------------------------------------------
//
// ELseverityLevel.h - declare objects that encode a message's urgency
//
// Both frameworker and user will often pass one of the
// instantiated severity levels to logger methods.
//
// The only other methods of ELseverityLevel a frameworker
// might use is to check the relative level of two severities
// using operator< or the like.
//
// ----------------------------------------------------------------------
#include <string_view>
#include <cassert>
namespace edm {
// ----------------------------------------------------------------------
// ELseverityLevel:
// ----------------------------------------------------------------------
class ELseverityLevel {
public:
// --- One ELseverityLevel is globally instantiated (see below)
// --- for each of the following levels:
//
enum ELsev_ {
ELsev_noValueAssigned = 0, // default returned by map when not found
ELsev_zeroSeverity, // threshold use only
ELsev_success, // report reaching a milestone
ELsev_info, // information
ELsev_fwkInfo, // framework
ELsev_warning, // warning
ELsev_error, // error detected
ELsev_unspecified, // severity was not specified
ELsev_severe, // future results are suspect
ELsev_highestSeverity, // threshold use only
// -----
nLevels // how many levels?
}; // ELsev_
// ----- Birth/death:
//
constexpr ELseverityLevel(ELsev_ lev = ELsev_unspecified) noexcept : myLevel(lev) {}
constexpr ELseverityLevel(int lev) noexcept : myLevel(lev) {
assert(lev >= ELsev_noValueAssigned);
assert(lev < nLevels);
}
~ELseverityLevel() noexcept = default;
constexpr ELseverityLevel(const ELseverityLevel&) noexcept = default;
constexpr ELseverityLevel(ELseverityLevel&&) noexcept = default;
constexpr ELseverityLevel& operator=(const ELseverityLevel&) noexcept = default;
constexpr ELseverityLevel& operator=(ELseverityLevel&&) noexcept = default;
// ----- Comparator:
//
[[nodiscard]] constexpr int cmp(ELseverityLevel const& e) const noexcept { return myLevel - e.myLevel; }
// ----- Accessors:
//
constexpr int getLevel() const noexcept { return myLevel; }
std::string_view getName() const noexcept;
private:
// Data per ELseverityLevel object:
//
int myLevel;
}; // ELseverityLevel
// ----------------------------------------------------------------------
// Declare the globally available severity objects,
// one generator function and one proxy per non-default ELsev_:
// ----------------------------------------------------------------------
constexpr const ELseverityLevel ELzeroSeverity{ELseverityLevel::ELsev_zeroSeverity};
constexpr const ELseverityLevel ELdebug{ELseverityLevel::ELsev_success};
constexpr const ELseverityLevel ELinfo{ELseverityLevel::ELsev_info};
constexpr const ELseverityLevel ELfwkInfo{ELseverityLevel::ELsev_fwkInfo};
constexpr const ELseverityLevel ELwarning{ELseverityLevel::ELsev_warning};
constexpr const ELseverityLevel ELerror{ELseverityLevel::ELsev_error};
constexpr const ELseverityLevel ELunspecified{ELseverityLevel::ELsev_unspecified};
constexpr const ELseverityLevel ELsevere{ELseverityLevel::ELsev_severe};
constexpr const ELseverityLevel ELhighestSeverity{ELseverityLevel::ELsev_highestSeverity};
// ----------------------------------------------------------------------
// Comparators:
// ----------------------------------------------------------------------
constexpr inline bool operator==(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) == 0;
}
constexpr inline bool operator!=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) != 0;
}
constexpr inline bool operator<(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) < 0;
}
constexpr inline bool operator<=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) <= 0;
}
constexpr inline bool operator>(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) > 0;
}
constexpr inline bool operator>=(ELseverityLevel const& e1, ELseverityLevel const& e2) noexcept {
return e1.cmp(e2) >= 0;
}
// ----------------------------------------------------------------------
} // end of namespace edm
#endif // DataFormats_Common_ELseverityLevel_h
|