Tag Parser  7.0.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
diagnostics.h
Go to the documentation of this file.
1 #ifndef TAGPARSER_DIAGNOSTICS_H
2 #define TAGPARSER_DIAGNOSTICS_H
3 
4 #include "./global.h"
5 
6 #include <c++utilities/chrono/datetime.h>
7 
8 #include <string>
9 #include <vector>
10 
11 namespace TagParser {
12 
16 enum class DiagLevel {
17  None = 0,
18  Debug = 1,
19  Information = 2,
20  Warning = 3,
21  Critical = 4,
22  Fatal = 5,
23 };
24 
26 
27 TAG_PARSER_EXPORT const char *diagLevelName(DiagLevel diagLevel);
28 
32 inline DiagLevel &operator|=(DiagLevel &lhs, const DiagLevel &rhs)
33 {
34  if (lhs < rhs) {
35  lhs = rhs;
36  }
37  return lhs;
38 }
39 
40 class DiagMessage {
41 public:
42  DiagMessage(DiagLevel level, const std::string &message, const std::string &context);
43  DiagMessage(DiagLevel level, std::string &&message, const std::string &context);
44  DiagMessage(DiagLevel level, const std::string &message, std::string &&context);
45  DiagMessage(DiagLevel level, std::string &&message, std::string &&context);
46 
47  DiagLevel level() const;
48  const char *levelName() const;
49  const std::string &message() const;
50  const std::string &context() const;
52  bool operator==(const DiagMessage &other) const;
53 
54 private:
55  DiagLevel m_level;
56  std::string m_message;
57  std::string m_context;
58  ChronoUtilities::DateTime m_creationTime;
59 };
60 
61 inline DiagMessage::DiagMessage(DiagLevel level, const std::string &message, const std::string &context)
62  : m_level(level)
63  , m_message(message)
64  , m_context(context)
65  , m_creationTime(ChronoUtilities::DateTime::gmtNow())
66 {
67 }
68 
69 inline DiagMessage::DiagMessage(DiagLevel level, std::string &&message, const std::string &context)
70  : m_level(level)
71  , m_message(message)
72  , m_context(context)
73  , m_creationTime(ChronoUtilities::DateTime::gmtNow())
74 {
75 }
76 
77 inline DiagMessage::DiagMessage(DiagLevel level, const std::string &message, std::string &&context)
78  : m_level(level)
79  , m_message(message)
80  , m_context(context)
81  , m_creationTime(ChronoUtilities::DateTime::gmtNow())
82 {
83 }
84 
85 inline DiagMessage::DiagMessage(DiagLevel level, std::string &&message, std::string &&context)
86  : m_level(level)
87  , m_message(message)
88  , m_context(context)
89  , m_creationTime(ChronoUtilities::DateTime::gmtNow())
90 {
91 }
92 
94 {
95  return m_level;
96 }
97 
98 inline const char *DiagMessage::levelName() const
99 {
100  return diagLevelName(m_level);
101 }
102 
103 inline const std::string &DiagMessage::message() const
104 {
105  return m_message;
106 }
107 
108 inline const std::string &DiagMessage::context() const
109 {
110  return m_context;
111 }
112 
114 {
115  return m_creationTime;
116 }
117 
118 inline bool DiagMessage::operator==(const DiagMessage &other) const
119 {
120  return m_level == other.m_level && m_message == other.m_message && m_context == other.m_context;
121 }
122 
123 class TAG_PARSER_EXPORT Diagnostics : public std::vector<DiagMessage> {
124 public:
125  Diagnostics() = default;
126  Diagnostics(std::initializer_list<DiagMessage> list);
127 
128  bool has(DiagLevel level) const;
129  DiagLevel level() const;
130 };
131 
132 inline Diagnostics::Diagnostics(std::initializer_list<DiagMessage> list)
133  : std::vector<DiagMessage>(list)
134 {
135 }
136 
137 class DiagPtr {
138 public:
139  DiagPtr();
140  DiagPtr(Diagnostics &diag);
142  const Diagnostics *operator->() const;
143 
144 private:
145  Diagnostics *m_ptr;
146 };
147 
149  : m_ptr(nullptr)
150 {
151 }
152 
154  : m_ptr(&diag)
155 {
156 }
157 
159 {
160  return m_ptr;
161 }
162 
163 inline const Diagnostics *DiagPtr::operator->() const
164 {
165  return m_ptr;
166 }
167 
168 } // namespace TagParser
169 
170 #endif // TAGPARSER_DIAGNOSTICS_H
const char * levelName() const
Definition: diagnostics.h:98
DiagMessage(DiagLevel level, const std::string &message, const std::string &context)
Definition: diagnostics.h:61
constexpr auto worstDiagLevel
Definition: diagnostics.h:25
STL namespace.
const ChronoUtilities::DateTime & creationTime() const
Definition: diagnostics.h:113
DiagLevel level() const
Definition: diagnostics.h:93
Diagnostics * operator->()
Definition: diagnostics.h:158
const std::string & context() const
Definition: diagnostics.h:108
const std::string & message() const
Definition: diagnostics.h:103
TAG_PARSER_EXPORT const char * diagLevelName(DiagLevel diagLevel)
Definition: diagnostics.cpp:7
bool operator==(const DiagMessage &other) const
Definition: diagnostics.h:118
DiagLevel & operator|=(DiagLevel &lhs, const DiagLevel &rhs)
Sets lhs to rhs if rhs is more critical than lhs and returns lhs.
Definition: diagnostics.h:32
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
DiagLevel
Specifies the level of the diagnostic message.
Definition: diagnostics.h:16