2018-06-19 02:37:19 +00:00
|
|
|
//
|
|
|
|
// Log.hpp
|
|
|
|
// Clock Signal
|
|
|
|
//
|
|
|
|
// Created by Thomas Harte on 18/06/2018.
|
|
|
|
// Copyright © 2018 Thomas Harte. All rights reserved.
|
|
|
|
//
|
|
|
|
|
2024-01-17 04:34:46 +00:00
|
|
|
#pragma once
|
2018-06-19 02:37:19 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
// TODO: if adopting C++20, std::format would be a better model to apply below.
|
|
|
|
// But I prefer C files to C++ streams, so here it is for now.
|
|
|
|
|
|
|
|
enum Category {
|
|
|
|
Info,
|
|
|
|
Error,
|
|
|
|
};
|
|
|
|
|
2018-06-19 02:37:19 +00:00
|
|
|
#ifdef NDEBUG
|
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
class Logger {
|
|
|
|
public:
|
|
|
|
Logger(const char *) {}
|
2018-06-21 23:27:54 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
struct LogLine {
|
|
|
|
void append(const char *, ...) {}
|
|
|
|
};
|
|
|
|
template <Category category> LogLine line() {
|
|
|
|
return LogLine();
|
|
|
|
}
|
|
|
|
};
|
2018-06-19 02:37:19 +00:00
|
|
|
|
|
|
|
#else
|
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
#include <cstdio>
|
|
|
|
#include <cstdarg>
|
2018-06-19 02:37:19 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
class Logger {
|
|
|
|
public:
|
|
|
|
Logger(const char *prefix) : prefix_(prefix) {}
|
2018-06-21 23:27:54 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
struct LogLine {
|
|
|
|
public:
|
|
|
|
LogLine(const char *prefix, FILE *stream) : stream_(stream) {
|
|
|
|
if(prefix) {
|
|
|
|
fprintf(stream_, "%s ", prefix);
|
|
|
|
}
|
|
|
|
}
|
2019-10-11 02:45:03 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
~LogLine() {
|
|
|
|
fprintf(stream_, "\n");
|
|
|
|
}
|
2019-10-11 02:45:03 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
void append(const char *format, ...) {
|
|
|
|
va_list args;
|
|
|
|
va_start(args, format);
|
|
|
|
vfprintf(stream_, format, args);
|
|
|
|
va_end(args);
|
|
|
|
}
|
2019-10-11 02:45:03 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
private:
|
|
|
|
FILE *stream_;
|
|
|
|
};
|
2019-10-11 02:45:03 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
template <Category category> LogLine line() {
|
|
|
|
return LogLine(prefix_, category == Info ? stdout : stderr);
|
|
|
|
}
|
2018-06-21 23:27:54 +00:00
|
|
|
|
2024-01-18 21:37:07 +00:00
|
|
|
private:
|
|
|
|
const char *prefix_;
|
|
|
|
};
|
2018-06-19 02:37:19 +00:00
|
|
|
|
2019-10-11 02:45:03 +00:00
|
|
|
#endif
|