summaryrefslogtreecommitdiff
path: root/src/include/debug.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/debug.hpp')
-rw-r--r--src/include/debug.hpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/include/debug.hpp b/src/include/debug.hpp
index 9dafdb42..2b3b1bee 100644
--- a/src/include/debug.hpp
+++ b/src/include/debug.hpp
@@ -3,6 +3,7 @@
#pragma once
#include <sstream>
#include <cassert>
+#include <functional>
extern int g_debug_indent_level;
@@ -41,21 +42,42 @@ public:
class TraceLog
{
const char* m_tag;
+ ::std::function<void(::std::ostream&)> m_ret;
public:
- TraceLog(const char* tag, ::std::string info): m_tag(tag) {
+ TraceLog(const char* tag, ::std::string info, ::std::function<void(::std::ostream&)> ret):
+ m_tag(tag),
+ m_ret(ret)
+ {
DEBUG(" >> " << m_tag << "(" << info << ")");
INDENT();
}
- TraceLog(const char* tag): m_tag(tag) {
+ TraceLog(const char* tag, ::std::string info):
+ m_tag(tag),
+ m_ret([](const auto&){})
+ {
+ DEBUG(" >> " << m_tag << "(" << info << ")");
+ INDENT();
+ }
+ TraceLog(const char* tag):
+ m_tag(tag),
+ m_ret([](const auto&){})
+ {
DEBUG(" >> " << m_tag);
INDENT();
}
~TraceLog() {
UNINDENT();
DEBUG("<< " << m_tag);
+ if(debug_enabled()) {
+ auto& os = debug_output(g_debug_indent_level, __FUNCTION__);
+ os << "<<" << m_tag;
+ m_ret(os);
+ os << ::std::endl;
+ }
}
};
#define TRACE_FUNCTION TraceLog _tf_(__func__)
#define TRACE_FUNCTION_F(ss) TraceLog _tf_(__func__, FMT(ss))
+#define TRACE_FUNCTION_FR(ss,ss2) TraceLog _tf_(__func__, FMT(ss), [&](::std::ostream&__os){ __os<<"(" << ss2 <<"}";})