Files
XCEngine/editor/src/Core/EditorConsoleSink.cpp

53 lines
1.1 KiB
C++
Raw Normal View History

#include "Core/EditorConsoleSink.h"
namespace XCEngine {
namespace Debug {
EditorConsoleSink* EditorConsoleSink::s_instance = nullptr;
EditorConsoleSink* EditorConsoleSink::GetInstance() {
static EditorConsoleSink fallbackInstance;
return s_instance ? s_instance : &fallbackInstance;
}
EditorConsoleSink::EditorConsoleSink() {
s_instance = this;
}
EditorConsoleSink::~EditorConsoleSink() {
if (s_instance == this) {
s_instance = nullptr;
}
}
void EditorConsoleSink::Log(const LogEntry& entry) {
std::lock_guard<std::mutex> lock(m_mutex);
if (m_logs.size() >= MAX_LOGS) {
m_logs.erase(m_logs.begin());
}
m_logs.push_back(entry);
if (m_callback) {
m_callback();
}
}
void EditorConsoleSink::Flush() {
}
std::vector<LogEntry> EditorConsoleSink::GetLogs() const {
std::lock_guard<std::mutex> lock(m_mutex);
return m_logs;
}
void EditorConsoleSink::Clear() {
std::lock_guard<std::mutex> lock(m_mutex);
m_logs.clear();
}
void EditorConsoleSink::SetCallback(std::function<void()> callback) {
m_callback = std::move(callback);
}
} // namespace Debug
} // namespace XCEngine