diff options
Diffstat (limited to 'src/include/debug.hpp')
-rw-r--r-- | src/include/debug.hpp | 26 |
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 <<"}";}) |