Program Listing for File LogInterface.h#
↰ Return to documentation for file (src/logging/LogInterface.h)
#pragma once
/* toolchain */
#include <cstdarg>
namespace Coral
{
template <class T> class LogInterface
{
public:
void log(const char *fmt, ...) __attribute__((format(printf, 2, 3)))
{
va_list args;
va_start(args, fmt);
vlog(fmt, args);
va_end(args);
}
void vlog(const char *fmt, va_list args)
{
static_cast<T *>(this)->vlog_impl(fmt, args);
}
};
template <class T> class HasLogInterface
{
public:
using Logger = LogInterface<T>;
HasLogInterface(Logger *_logger = nullptr) : logger(_logger)
{
}
void log(Logger *_logger, const char *fmt, ...)
__attribute__((format(printf, 3, 4)))
{
auto logger = normalize_log(_logger);
if (logger)
{
va_list args;
va_start(args, fmt);
logger->vlog(fmt, args);
va_end(args);
}
}
protected:
Logger *logger;
Logger *normalize_log(Logger *_logger = nullptr)
{
if (not _logger)
{
_logger = logger;
}
return _logger;
}
};
}; // namespace Coral