1 // Stuff related to ROSE diagnostics
2 #ifndef ROSE_Diagnostics_H
3 #define ROSE_Diagnostics_H
5 #include "Sawyer/Assert.h"
6 #include "Sawyer/Message.h"
8 #include <rosedll.h>
10 // How failed assertions behave
11 #define ROSE_ASSERTION_ABORT 1 // call abort()
12 #define ROSE_ASSERTION_EXIT 2 // call exit(1)
13 #define ROSE_ASSERTION_THROW 3 // throw Rose::Diagnostics::FailedAssertion
15 namespace Rose {
292 namespace Diagnostics {
294 // Make Sawyer message importance levels available here. That way, we don't have to "use namespace Sawyer::Message", which
295 // also sucks in a lot of other stuff.
296 using Sawyer::Message::DEBUG; // very low-level debugging mostly for developers
297 using Sawyer::Message::TRACE; // more low-level debugging but maybe more interesting to users
298 using Sawyer::Message::WHERE; // higher-level debugging to help users understand ROSE flow
299 using Sawyer::Message::MARCH; // progress bars and other high-frequency messages
300 using Sawyer::Message::INFO; // useful information about normal behavior such as stats
301 using Sawyer::Message::WARN; // warnings that users should almost certainly see at least once
302 using Sawyer::Message::ERROR; // recoverable errors, possibly followed by throw
303 using Sawyer::Message::FATAL; // errors which are immediately followed by exit, abort, or similar
305 using Sawyer::Message::Stream; // one message stream, e.g., 'mlog[INFO]'
306 using Sawyer::Message::Facility; // collection of related streams, e.g., 'mlog'
311 ROSE_DLL_API extern Sawyer::Message::DestinationPtr destination;
316 ROSE_DLL_API extern Sawyer::Message::PrefixPtr mprefix;
319 ROSE_DLL_API extern Sawyer::Message::Facility mlog;
327 ROSE_DLL_API void initialize();
330 ROSE_DLL_API bool isInitialized();
338 ROSE_DLL_API void initAndRegister(Facility *mlog, const std::string &name);
347 ROSE_DLL_API void deregister(Facility *mlog);
356  std::ostream &stream;
357 public:
358  StreamPrintf(std::ostream &stream): stream(stream) {}
359 #ifdef _MSC_VER
360  int operator()(const char *fmt, ...);
361 #else
362  int operator()(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
363 #endif
364 };
383 StreamPrintf mfprintf(std::ostream &stream);
385 // See mfprintf. "mlog" must be resolved at point where macro is expanded.
386 #define mprintf Rose::Diagnostics::mfprintf(mlog[Rose::Diagnostics::DEBUG])
388 } // namespace
389 } // namespace
391 #endif
Messages intended to be useful primarily to the author of the code.
Definition: Message.h:314
Collection of streams.
Definition: Message.h:1606
ROSE_DLL_API void deregister(Facility *mlog)
Deregister a facility.
ROSE_DLL_API Sawyer::Message::Facility mlog
Diagnostic facility for the ROSE library as a whole.
Error messages that indicate an abnormal situation from which the program was able to at least partia...
Definition: Message.h:330
ROSE_DLL_API Sawyer::Message::PrefixPtr mprefix
Default line prefix for message sinks created in ROSE.
Main namespace for the ROSE library.
ROSE_DLL_API void initAndRegister(Facility *mlog, const std::string &name)
Initialize and register a logging facility.
Messages that indicate an abnormal situation from which the program was unable to recover...
Definition: Message.h:332
Reference-counting intrusive smart pointer.
Definition: SharedPointer.h:68
ROSE_DLL_API void initialize()
Initialize diagnostics-related global variables.
Progress reports and other similar rapidly updating partial messages.
Definition: Message.h:325
Facilities mfacilities
Library-provided facility group.
ROSE_DLL_API bool isInitialized()
Returns true if diagnostics-related global variables have been initialized.
Warning messages that indicate an unusual situation from which the program was able to fully recover...
Definition: Message.h:328
Detailed tracing information useful to end-users that are trying to understand program internals...
Definition: Message.h:317
StreamPrintf mfprintf(std::ostream &stream)
Print to a C++ stream using a printf-like API.
Converts text to messages.
Definition: Message.h:1396
ROSE_DLL_API Sawyer::Message::DestinationPtr destination
Default destination for ROSE diagnostics.
Informative messages.
Definition: Message.h:326
Intermediate class for printing to C++ ostreams with a printf-like API.
Definition: Diagnostics.h:355
Granular tracing information useful to end-users that are trying to understand program internals...
Definition: Message.h:322