#pragma once #include #include #define Assert(...) namespace orange::log { namespace LogLevels { enum LogLevel { Fatal, Error, Warning, Info, Debug, Count }; } using LogLevel = LogLevels::LogLevel; void log(LogLevel level, const char* fmt, ...); template void debug(Args&&... args) { log(LogLevels::Debug, args...); } template void info (Args&&... args) { log(LogLevels::Info, args...); } template void warn (Args&&... args) { log(LogLevels::Warning, args...); } template void err (Args&&... args) { log(LogLevels::Error, args...); } template void fatal(Args&&... args) { log(LogLevels::Fatal, args...); } }