1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-07 23:29:06 +00:00
CLK/Outputs/Log.hpp

74 lines
1.2 KiB
C++
Raw Normal View History

//
// Log.hpp
// Clock Signal
//
// Created by Thomas Harte on 18/06/2018.
// Copyright © 2018 Thomas Harte. All rights reserved.
//
#pragma once
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,
};
#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();
}
};
#else
2024-01-18 21:37:07 +00:00
#include <cstdio>
#include <cstdarg>
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);
}
}
2024-01-18 21:37:07 +00:00
~LogLine() {
fprintf(stream_, "\n");
}
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);
}
2024-01-18 21:37:07 +00:00
private:
FILE *stream_;
};
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_;
};
#endif