mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
117 lines
1.9 KiB
C++
117 lines
1.9 KiB
C++
#ifndef LOGGER_H
|
|
#define LOGGER_H
|
|
|
|
#include "fmt/format.h"
|
|
|
|
class DiskFlux;
|
|
class TrackDataFlux;
|
|
class TrackFlux;
|
|
class Sector;
|
|
|
|
struct ErrorLogMessage
|
|
{
|
|
std::string message;
|
|
};
|
|
|
|
struct EmergencyStopMessage
|
|
{
|
|
};
|
|
|
|
struct BeginSpeedOperationLogMessage
|
|
{
|
|
};
|
|
|
|
struct EndSpeedOperationLogMessage
|
|
{
|
|
nanoseconds_t rotationalPeriod;
|
|
};
|
|
|
|
struct TrackReadLogMessage
|
|
{
|
|
std::shared_ptr<const TrackFlux> track;
|
|
};
|
|
|
|
struct DiskReadLogMessage
|
|
{
|
|
std::shared_ptr<const DiskFlux> disk;
|
|
};
|
|
|
|
struct BeginReadOperationLogMessage
|
|
{
|
|
unsigned track;
|
|
unsigned head;
|
|
};
|
|
|
|
struct EndReadOperationLogMessage
|
|
{
|
|
std::shared_ptr<const TrackDataFlux> trackDataFlux;
|
|
std::set<std::shared_ptr<const Sector>> sectors;
|
|
};
|
|
|
|
struct BeginWriteOperationLogMessage
|
|
{
|
|
unsigned track;
|
|
unsigned head;
|
|
};
|
|
|
|
struct EndWriteOperationLogMessage
|
|
{
|
|
};
|
|
|
|
struct BeginOperationLogMessage
|
|
{
|
|
std::string message;
|
|
};
|
|
|
|
struct EndOperationLogMessage
|
|
{
|
|
std::string message;
|
|
};
|
|
|
|
struct OperationProgressLogMessage
|
|
{
|
|
unsigned progress;
|
|
};
|
|
|
|
class TrackFlux;
|
|
|
|
typedef std::variant<std::string,
|
|
ErrorLogMessage,
|
|
EmergencyStopMessage,
|
|
TrackReadLogMessage,
|
|
DiskReadLogMessage,
|
|
BeginSpeedOperationLogMessage,
|
|
EndSpeedOperationLogMessage,
|
|
BeginReadOperationLogMessage,
|
|
EndReadOperationLogMessage,
|
|
BeginWriteOperationLogMessage,
|
|
EndWriteOperationLogMessage,
|
|
BeginOperationLogMessage,
|
|
EndOperationLogMessage,
|
|
OperationProgressLogMessage>
|
|
AnyLogMessage;
|
|
|
|
template <class T>
|
|
inline void log(const T& message)
|
|
{
|
|
log(std::make_shared<const AnyLogMessage>(message));
|
|
}
|
|
|
|
extern void log(std::shared_ptr<const AnyLogMessage> message);
|
|
|
|
template <typename... Args>
|
|
inline void log(fmt::string_view fstr, const Args&... args)
|
|
{
|
|
log(fmt::format(fstr, args...));
|
|
}
|
|
|
|
namespace Logger
|
|
{
|
|
extern void setLogger(
|
|
std::function<void(std::shared_ptr<const AnyLogMessage>)> cb);
|
|
|
|
extern std::string toString(const AnyLogMessage&);
|
|
}
|
|
|
|
#endif
|