Skip to content
Snippets Groups Projects
Commit ad6e11f6 authored by Sam Yates's avatar Sam Yates
Browse files

Further simplification of debug_emit_trace logic.

parent 4d4368ca
No related branches found
No related tags found
#pragma once #pragma once
#include <iostream> #include <iostream>
#include <memory>
#include <sstream> #include <sstream>
#include <mutex> #include <mutex>
...@@ -31,26 +30,20 @@ extern std::mutex global_debug_cerr_mutex; ...@@ -31,26 +30,20 @@ extern std::mutex global_debug_cerr_mutex;
template <typename... Args> template <typename... Args>
void debug_emit_trace(const char* file, int line, const char* varlist, const Args&... args) { void debug_emit_trace(const char* file, int line, const char* varlist, const Args&... args) {
constexpr bool multithreaded = nest::mc::threading::multithreaded(); if (nest::mc::threading::multithreaded()) {
std::stringstream buffer;
std::unique_ptr<std::ostream> buffer; debug_emit_trace_leader(buffer, file, line, varlist);
std::ostream* out = &std::cerr; debug_emit(buffer, args...);
if (multithreaded) {
buffer.reset(new std::stringstream());
out = buffer.get();
}
debug_emit_trace_leader(*out, file, line, varlist);
debug_emit(*out, args...);
if (multithreaded) {
std::lock_guard<std::mutex> guard(global_debug_cerr_mutex); std::lock_guard<std::mutex> guard(global_debug_cerr_mutex);
std::cerr << out->rdbuf(); std::cerr << buffer.rdbuf();
std::cerr.flush(); std::cerr.flush();
} }
else { else {
out->flush(); debug_emit_trace_leader(std::cerr, file, line, varlist);
debug_emit(std::cerr, args...);
std::cerr.flush();
} }
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment