108 virtual void inform(std::string msg,
bool addType =
true);
112 template<
typename T,
typename... Targs>
113 void informf(
const std::string& format, T value, Targs... Fargs) {
115 std::ostringstream os;
116 os << std::fixed << std::setprecision(
gPrecision);
117 _informf(format.c_str(), os, value, Fargs...);
135 virtual void clear(
bool resetInformed =
true);
163 inline std::string
build(
const std::string& msg,
bool addType) {
169 return "Warning: " + msg;
172 return "Error: " + msg;
175 return "Debug: " + msg;
178 return "GLDebug: " + msg;
191 void _informf(
const char* format, std::ostringstream& os) {
197 template<
typename T,
typename... Targs>
198 void _informf(
const char* format, std::ostringstream& os, T value, Targs... Fargs) {
199 for (; *format !=
'\0'; format++) {
200 if (*format ==
'%') {
276 #define WRITE_WARNING(msg) MsgHandler::getWarningInstance()->inform(msg);
277 #define WRITE_WARNINGF(...) MsgHandler::getWarningInstance()->informf(__VA_ARGS__);
278 #define WRITE_MESSAGE(msg) MsgHandler::getMessageInstance()->inform(msg);
279 #define PROGRESS_BEGIN_MESSAGE(msg) MsgHandler::getMessageInstance()->beginProcessMsg((msg) + std::string(" ..."));
280 #define PROGRESS_DONE_MESSAGE() MsgHandler::getMessageInstance()->endProcessMsg("done.");
281 #define PROGRESS_BEGIN_TIME_MESSAGE(msg) SysUtils::getCurrentMillis(); MsgHandler::getMessageInstance()->beginProcessMsg((msg) + std::string(" ..."));
282 #define PROGRESS_TIME_MESSAGE(before) MsgHandler::getMessageInstance()->endProcessMsg("done (" + toString(SysUtils::getCurrentMillis() - before) + "ms).");
283 #define PROGRESS_FAILED_MESSAGE() MsgHandler::getMessageInstance()->endProcessMsg("failed.");
284 #define WRITE_ERROR(msg) MsgHandler::getErrorInstance()->inform(msg);
285 #define WRITE_ERRORF(...) MsgHandler::getErrorInstance()->informf(__VA_ARGS__);
286 #define WRITE_DEBUG(msg) if(MsgHandler::writeDebugMessages()){MsgHandler::getDebugInstance()->inform(msg);};
287 #define WRITE_GLDEBUG(msg) if(MsgHandler::writeDebugGLMessages()){MsgHandler::getGLDebugInstance()->inform(msg);};
int gPrecision
the precision for floating point outputs
virtual void addRetriever(OutputDevice *retriever)
Adds a further retriever to the instance responsible for a certain msg type.
void _informf(const char *format, std::ostringstream &os)
static MsgHandler * getGLDebugInstance()
Returns the instance to add GLdebug to.
bool wasInformed() const
Returns the information whether any messages were added.
MsgType myType
The type of the instance.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
static void enableDebugGLMessages(bool enable)
enable/disable gl-debug messages
static MsgHandler * myGLDebugInstance
The instance to handle glDebug.
virtual void endProcessMsg(std::string msg)
Ends a process information.
std::string build(const std::string &msg, bool addType)
Builds the string which includes the mml-message type.
virtual bool aggregationThresholdReached(const std::string &format)
static Factory myFactory
The function to call for new MsgHandlers, nullptr means use default constructor.
bool myWasInformed
information whether an output occurred at all
MsgHandler *(* Factory)(MsgType)
static void initOutputOptions()
init output options
static MsgHandler * myErrorInstance
The instance to handle errors.
static MsgHandler * getDebugInstance()
Returns the instance to add debug to.
static MsgHandler * myMessageInstance
The instance to handle normal messages.
static bool writeDebugGLMessages()
check whether to enable/disable gl-debug messages
bool isRetriever(OutputDevice *retriever) const
Returns whether the given output device retrieves messages from the handler.
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
static void setFactory(Factory func)
Sets the factory function to use for new MsgHandlers.
std::map< const std::string, int > myAggregationCount
count for messages of the same type
static void enableDebugMessages(bool enable)
enable/disable debug messages
static bool myAmProcessingProcess
Information whether a process information is printed to cout.
std::vector< OutputDevice * > myRetrievers
The list of retrievers that shall be informed about new messages or errors.
MsgHandler(const MsgHandler &s)=delete
invalid copy constructor
virtual ~MsgHandler()
destructor
virtual void clear(bool resetInformed=true)
Clears information whether an error occurred previously and print aggregated message summary.
static MsgHandler * myDebugInstance
The instance to handle debug.
void setAggregationThreshold(const int thresh)
static bool writeDebugMessages()
check whether to enable/disable debug messages
static MsgHandler * myWarningInstance
The instance to handle warnings.
virtual void beginProcessMsg(std::string msg, bool addType=true)
Begins a process information.
static bool myWriteDebugMessages
Flag to enable or disable debug GL Functions.
static bool myWriteDebugGLMessages
void informf(const std::string &format, T value, Targs... Fargs)
adds a new formatted message
static void cleanupOnEnd()
Removes pending handler.
void _informf(const char *format, std::ostringstream &os, T value, Targs... Fargs)
adds a new formatted message
static void removeRetrieverFromAllInstances(OutputDevice *out)
ensure that that given output device is no longer used as retriever by any instance
virtual void removeRetriever(OutputDevice *retriever)
Removes the retriever from the handler.
int myAggregationThreshold
do not output more messages of the same type if the count exceeds this threshold
MsgHandler & operator<<(const T &t)
Generic output operator.
MsgHandler & operator=(const MsgHandler &s)=delete
invalid assignment operator
@ MT_MESSAGE
The message is only something to show.
@ MT_DEBUG
The message is an debug.
@ MT_WARNING
The message is a warning.
@ MT_GLDEBUG
The message is an debug.
@ MT_ERROR
The message is an error.
MsgHandler(MsgType type)
standard constructor
static MsgHandler * getMessageInstance()
Returns the instance to add normal messages to.
Static storage of an output device and its base (abstract) implementation.