Skip to content

Commit 9bee8ce

Browse files
Errata: change note methods to update the Errata severity.
1 parent 1ff4377 commit 9bee8ce

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

Diff for: code/include/swoc/Errata.h

+44-6
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class Errata {
116116
/// @return The local severity or @a default_severity if none is set.
117117
Severity severity(Severity default_severity) const;
118118

119-
/// Set the severity.
119+
/// Set the @a severity of @a this.
120120
self_type &assign(Severity severity);
121121

122122
protected:
@@ -382,6 +382,26 @@ class Errata {
382382
*/
383383
Severity severity() const;
384384

385+
/** Set the @a severity.
386+
*
387+
* @param severity Severity value.
388+
* @return @a this
389+
*
390+
* @see update
391+
*/
392+
self_type & assign(Severity severity);
393+
394+
/** Set the severity.
395+
*
396+
* @param severity Minimum severity
397+
* @return @a this
398+
*
399+
* This sets the internal severity to the maximum of @a severity and the current severity.
400+
*
401+
* @see assign
402+
*/
403+
self_type &update(Severity severity);
404+
385405
/// The code for the top message.
386406
code_type const &code() const;
387407

@@ -896,6 +916,25 @@ Errata::code() const -> code_type const & {
896916
return this->empty() ? DEFAULT_CODE : _data->_code;
897917
}
898918

919+
inline auto
920+
Errata::severity() const -> Severity {
921+
return _data ? _data->_severity : DEFAULT_SEVERITY;
922+
}
923+
924+
inline auto Errata::assign(Severity severity) -> self_type & {
925+
this->data()->_severity = severity;
926+
return *this;
927+
}
928+
929+
inline auto Errata::update(Severity severity) -> self_type & {
930+
if (_data) {
931+
_data->_severity = std::max(_data->_severity, severity);
932+
} else {
933+
this->assign(severity);
934+
}
935+
return *this;
936+
}
937+
899938
inline size_t
900939
Errata::length() const {
901940
return _data ? _data->_notes.count() : 0;
@@ -936,6 +975,10 @@ Errata::note(Severity severity, std::string_view text) {
936975
template <typename... Args>
937976
Errata &
938977
Errata::note_sv(std::optional<Severity> severity, std::string_view fmt, std::tuple<Args...> const &args) {
978+
if (severity.has_value()) {
979+
this->update(*severity);
980+
}
981+
939982
if (!severity.has_value() || *severity >= FILTER_SEVERITY) {
940983
Data *data = this->data();
941984
auto span = data->remnant();
@@ -977,11 +1020,6 @@ Errata::note(Severity severity, std::string_view fmt, Args &&... args) {
9771020
return this->note_sv(severity, fmt, std::forward_as_tuple(args...));
9781021
}
9791022

980-
inline auto
981-
Errata::severity() const -> Severity {
982-
return _data ? _data->_severity : DEFAULT_SEVERITY;
983-
}
984-
9851023
inline Errata::iterator
9861024
Errata::begin() {
9871025
return _data ? _data->_notes.begin() : iterator();

Diff for: code/src/Errata.cc

+3
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ Errata::data() {
8686

8787
Errata &
8888
Errata::note_s(std::optional<Severity> severity, std::string_view text) {
89+
if (severity.has_value()) {
90+
this->update(*severity);
91+
}
8992
if (!severity.has_value() || *severity >= FILTER_SEVERITY) {
9093
auto span = this->alloc(text.size());
9194
memcpy(span, text);

0 commit comments

Comments
 (0)