#ifndef grino_LOGGER_HPP #define grino_LOGGER_HPP #include "commons.hpp" #include "src/mutils.hpp" #include "Loc.hpp" #define LOG_TYPE(G) \ G(LOG_ERROR), \ G(LOG_ASSERT), namespace grino { GRINO_ENUM(Log, LOG_TYPE); class Logger { public: explicit Logger(); virtual ~Logger(); template void log(LogType type, Loc const& loc, std::string const& what); private: }; template void Logger::log(LogType type, Loc const& loc, std::string const& what) { std::stringstream ss; ss << loc.path().string() << ":" << loc.line() << " "; ss << "[" << GRINO_TRIM(LogTypeStr[type], "LOG_") << "] "; ss << what; throw T { ss.str() }; } } #endif