69 lines
2.1 KiB
C++
69 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <cstdarg>
|
|
#include <stdexcept>
|
|
|
|
enum printSeverity_t {
|
|
SEV_DEBUG = 0,
|
|
SEV_PRINT = 1,
|
|
SEV_WARNING = 2,
|
|
SEV_ERROR = 3,
|
|
SEV_FATAL = 4
|
|
};
|
|
|
|
class idPrintListener {
|
|
public:
|
|
idPrintListener();
|
|
virtual ~idPrintListener();
|
|
virtual void Print(const char* text) = 0;
|
|
|
|
void RegisterPrintListener();
|
|
void UnRegisterPrintListener();
|
|
|
|
idPrintListener* next;
|
|
bool wantColor;
|
|
bool threadSafe;
|
|
printSeverity_t minSeverity;
|
|
};
|
|
|
|
class idRecoveredPrintException : public std::runtime_error {
|
|
public:
|
|
idRecoveredPrintException(const char* message, bool fatal)
|
|
: std::runtime_error(message == nullptr ? "" : message),
|
|
fatalError(fatal) {}
|
|
bool IsFatal() const { return fatalError; }
|
|
private:
|
|
bool fatalError;
|
|
};
|
|
|
|
// PC-side extension for the listener/context facilities added after the BFG
|
|
// idLib interface. The six common Printf/Warning/Error entry points continue
|
|
// to be supplied by the BFG baseline until the engine-wide Lib.h is replaced.
|
|
class idLibPrint {
|
|
public:
|
|
using fatalErrorHandler_t = void (*)(const char*);
|
|
|
|
static bool PushWarningInfo(const char* type, const char* name);
|
|
static void PopWarningInfo();
|
|
static void RegisterFatalErrorHandler(fatalErrorHandler_t handler);
|
|
|
|
static void Debugf(const char* format, ...);
|
|
static void Printf(const char* format, ...);
|
|
static void PrintfIf(bool condition, const char* format, ...);
|
|
static void VPrintf(const char* format, va_list args);
|
|
static void Warning(const char* format, ...);
|
|
static void WarningIf(bool condition, const char* format, ...);
|
|
[[noreturn]] static void Error(const char* format, ...);
|
|
[[noreturn]] static void FatalError(const char* format, ...);
|
|
|
|
static void Dispatch(printSeverity_t severity, const char* format,
|
|
va_list args);
|
|
static void RegisterPrintListener(idPrintListener* listener);
|
|
static void UnRegisterPrintListener(idPrintListener* listener);
|
|
};
|
|
|
|
#if INTPTR_MAX == INT32_MAX
|
|
static_assert(sizeof(idPrintListener) == 16,
|
|
"Recovered idPrintListener layout changed");
|
|
#endif
|