Showing the changes to src/vm/debug.cpp (1 of 40 files). Show all
Unified · Split
| @@ -0,0 +1,45 @@ | |||
| 1 | // | ||
| 2 | // Dis VM | ||
| 3 | // File: debug.cpp | ||
| 4 | // Author: arr | ||
| 5 | // | ||
| 6 | |||
| 7 | #include <mutex> | ||
| 8 | #include <array> | ||
| 9 | #include <debug.h> | ||
| 10 | |||
| 11 | namespace | ||
| 12 | { | ||
| 13 | std::mutex log_mutex; | ||
| 14 | disvm::debug::log_callback_t log_callback = nullptr; | ||
| 15 | } | ||
| 16 | |||
| 17 | std::array<bool, static_cast<std::size_t>(disvm::debug::component_trace_t::last) + 1> disvm::debug::trace_enabled = {}; | ||
| 18 | |||
| 19 | disvm::debug::log_callback_t disvm::debug::set_logging_callback(log_callback_t cb) | ||
| 20 | { | ||
| 21 | std::lock_guard<std::mutex> lock{ log_mutex }; | ||
| 22 | auto tmp = log_callback; | ||
| 23 | log_callback = cb; | ||
| 24 | return tmp; | ||
| 25 | } | ||
| 26 | |||
| 27 | void disvm::debug::log_msg(const component_trace_t origin, const log_level_t level, const char *msg_fmt, ...) | ||
| 28 | { | ||
| 29 | if (log_callback == nullptr) | ||
| 30 | return; | ||
| 31 | |||
| 32 | if (!is_component_tracing_enabled(origin)) | ||
| 33 | return; | ||
| 34 | |||
| 35 | std::va_list args; | ||
| 36 | va_start(args, msg_fmt); | ||
| 37 | |||
| 38 | { | ||
| 39 | std::lock_guard<std::mutex> lock{ log_mutex }; | ||
| 40 | if (log_callback != nullptr) | ||
| 41 | log_callback(origin, level, msg_fmt, args); | ||
| 42 | } | ||
| 43 | |||
| 44 | va_end(args); | ||
| 45 | } | ||