@@ -116,7 +116,7 @@ class Errata {
116
116
// / @return The local severity or @a default_severity if none is set.
117
117
Severity severity (Severity default_severity) const ;
118
118
119
- // / Set the severity.
119
+ // / Set the @a severity of @a this .
120
120
self_type &assign (Severity severity);
121
121
122
122
protected:
@@ -382,6 +382,26 @@ class Errata {
382
382
*/
383
383
Severity severity () const ;
384
384
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
+
385
405
// / The code for the top message.
386
406
code_type const &code () const ;
387
407
@@ -896,6 +916,25 @@ Errata::code() const -> code_type const & {
896
916
return this ->empty () ? DEFAULT_CODE : _data->_code ;
897
917
}
898
918
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
+
899
938
inline size_t
900
939
Errata::length () const {
901
940
return _data ? _data->_notes .count () : 0 ;
@@ -936,6 +975,10 @@ Errata::note(Severity severity, std::string_view text) {
936
975
template <typename ... Args>
937
976
Errata &
938
977
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
+
939
982
if (!severity.has_value () || *severity >= FILTER_SEVERITY) {
940
983
Data *data = this ->data ();
941
984
auto span = data->remnant ();
@@ -977,11 +1020,6 @@ Errata::note(Severity severity, std::string_view fmt, Args &&... args) {
977
1020
return this ->note_sv (severity, fmt, std::forward_as_tuple (args...));
978
1021
}
979
1022
980
- inline auto
981
- Errata::severity () const -> Severity {
982
- return _data ? _data->_severity : DEFAULT_SEVERITY;
983
- }
984
-
985
1023
inline Errata::iterator
986
1024
Errata::begin () {
987
1025
return _data ? _data->_notes .begin () : iterator ();
0 commit comments