#pragma once #include #include #include #include #include namespace XCEngine { namespace Debug { struct EditorConsoleRecord { uint64_t serial = 0; LogEntry entry = {}; }; class EditorConsoleSink : public ILogSink { public: static EditorConsoleSink* GetInstance(); EditorConsoleSink(); ~EditorConsoleSink() override; void Log(const LogEntry& entry) override; void Flush() override; std::vector GetLogs() const; std::vector GetRecords() const; uint64_t GetRevision() const; void Clear(); void SetCallback(std::function callback); private: mutable std::mutex m_mutex; std::vector m_logs; std::function m_callback; uint64_t m_nextSerial = 1; uint64_t m_revision = 0; static EditorConsoleSink* s_instance; static constexpr size_t MAX_LOGS = 1000; }; } // namespace Debug } // namespace XCEngine