Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-31 03:08:50

0001 #ifndef FWCore_MessageLogger_MessageSender_h
0002 #define FWCore_MessageLogger_MessageSender_h
0003 
0004 #include "FWCore/MessageLogger/interface/ELseverityLevel.h"
0005 #include "FWCore/MessageLogger/interface/ErrorObj.h"
0006 
0007 #include <memory>
0008 
0009 #include <map>
0010 
0011 namespace edm {
0012 
0013   class MessageSender {
0014     struct ErrorObjDeleter {
0015       ErrorObjDeleter() {}
0016       void operator()(ErrorObj* errorObjPtr);
0017     };
0018 
0019   public:
0020     // ---  birth/death:
0021     MessageSender() = default;
0022     MessageSender(messagelogger::ELseverityLevel const& sev,
0023                   std::string_view id,
0024                   bool verbatim = false,
0025                   bool suppressed = false);
0026     MessageSender(MessageSender&&) = default;
0027     MessageSender(MessageSender const&) = default;
0028     MessageSender& operator=(MessageSender&&) = default;
0029     MessageSender& operator=(MessageSender const&) = default;
0030     ~MessageSender();
0031 
0032     // ---  stream out the next part of a message:
0033     template <class T>
0034     MessageSender& operator<<(T const& t) {
0035       if (valid())
0036         (*errorobj_p) << t;
0037       return *this;
0038     }
0039 
0040     template <typename... Args>
0041     MessageSender& format(fmt::format_string<Args...> format, Args&&... args) {
0042       if (valid())
0043         errorobj_p->format(std::move(format), std::forward<Args>(args)...);
0044       return *this;
0045     }
0046 
0047     template <typename... Args>
0048     MessageSender& vformat(std::string_view fmt, fmt::format_args args) {
0049       if (valid())
0050         errorobj_p->vformat(fmt, args);
0051       return *this;
0052     }
0053 
0054     bool valid() const noexcept { return errorobj_p != nullptr; }
0055 
0056   private:
0057     // data:
0058     std::shared_ptr<ErrorObj> errorobj_p;
0059 
0060   };  // MessageSender
0061 
0062 }  // namespace edm
0063 
0064 #endif  // FWCore_MessageLogger_MessageSender_h