Program Listing for File log.hpp
↰ Return to documentation for file (eshet/log.hpp)
#pragma once
#include <cstdio>
#include <memory>
#include <mutex>
namespace eshet {
struct LogCallbacks {
virtual void debug(const std::string &s) {
fprintf(stderr, "eshet: %s\n", s.c_str());
}
virtual void error(const std::string &s) {
fprintf(stderr, "eshet: %s\n", s.c_str());
}
virtual ~LogCallbacks() {}
};
class Logger {
public:
void set_log_callbacks(std::shared_ptr<LogCallbacks> new_log_callbacks) {
std::lock_guard<std::mutex> guard(callbacks_mut);
log_callbacks = new_log_callbacks;
}
void debug(const std::string &s) {
std::lock_guard<std::mutex> guard(callbacks_mut);
log_callbacks->debug(s);
}
void error(const std::string &s) {
std::lock_guard<std::mutex> guard(callbacks_mut);
log_callbacks->error(s);
}
private:
std::mutex callbacks_mut;
std::shared_ptr<LogCallbacks> log_callbacks =
std::make_shared<LogCallbacks>();
};
} // namespace eshet