21#define STDOUT_FILENO 1
53 static constexpr const char *
Reset =
"\033[0m";
54 static constexpr const char *
Bold =
"\033[1m";
55 static constexpr const char *
Dim =
"\033[2m";
58 static constexpr const char *
Red =
"\033[31m";
59 static constexpr const char *
Green =
"\033[32m";
60 static constexpr const char *
Yellow =
"\033[33m";
61 static constexpr const char *
Blue =
"\033[34m";
62 static constexpr const char *
Magenta =
"\033[35m";
63 static constexpr const char *
Cyan =
"\033[36m";
64 static constexpr const char *
White =
"\033[37m";
65 static constexpr const char *
Gray =
"\033[90m";
68 static constexpr const char *
BgRed =
"\033[41m";
69 static constexpr const char *
BgGreen =
"\033[42m";
81 static constexpr const char *
TopLeft =
"\u250C";
82 static constexpr const char *
TopRight =
"\u2510";
86 static constexpr const char *
Vertical =
"\u2502";
87 static constexpr const char *
TeeRight =
"\u251C";
88 static constexpr const char *
TeeLeft =
"\u2524";
89 static constexpr const char *
TeeDown =
"\u252C";
90 static constexpr const char *
TeeUp =
"\u2534";
91 static constexpr const char *
Cross =
"\u253C";
95 static constexpr const char *
TreeLast =
"\u2514";
96 static constexpr const char *
TreePipe =
"\u2502";
113 Console() : is_tty_(isatty(STDOUT_FILENO) != 0), color_enabled_(is_tty_) {}
138 if (level < min_level_) {
143 if (color_enabled_) {
144 output = std::string(GetLevelColor(level)) + std::string(GetLevelPrefix(level)) +
147 output = std::string(GetLevelPrefix(level)) +
" " + std::string(msg);
150 std::cout << output <<
"\n";
155 if (level < min_level_) {
159 std::ostringstream oss;
160 oss <<
"[" << std::fixed << std::setprecision(3) << sim_time <<
"] ";
163 if (color_enabled_) {
164 output = oss.str() + std::string(GetLevelColor(level)) +
168 output = oss.str() + std::string(GetLevelPrefix(level)) +
" " + std::string(msg);
171 std::cout << output <<
"\n";
177 [[nodiscard]] std::string
Colorize(std::string_view text,
const char *color)
const {
178 if (!color_enabled_) {
179 return std::string(text);
186 return std::string(
static_cast<std::size_t
>(width), c);
192 result.reserve(
static_cast<std::size_t
>(width) * 3);
193 for (
int i = 0; i < width; ++i) {
200 [[nodiscard]]
static std::string
PadRight(std::string_view text, std::size_t width) {
201 if (text.size() >= width) {
202 return std::string(text);
204 return std::string(text) + std::string(width - text.size(),
' ');
208 [[nodiscard]]
static std::string
PadLeft(std::string_view text, std::size_t width) {
209 if (text.size() >= width) {
210 return std::string(text);
212 return std::string(width - text.size(),
' ') + std::string(text);
216 [[nodiscard]]
static std::string
PadCenter(std::string_view text, std::size_t width) {
217 if (text.size() >= width) {
218 return std::string(text);
220 std::size_t padding = width - text.size();
221 std::size_t left_pad = padding / 2;
222 std::size_t right_pad = padding - left_pad;
223 return std::string(left_pad,
' ') + std::string(text) + std::string(right_pad,
' ');
227 [[nodiscard]]
static std::string
FormatNumber(
double value,
int precision = 2) {
228 std::ostringstream oss;
229 oss << std::fixed << std::setprecision(precision) << value;
234 void Write(std::string_view text)
const { std::cout << text; }
237 void WriteLine(std::string_view text =
"")
const { std::cout << text <<
"\n"; }
240 void Flush()
const { std::cout.flush(); }
243 bool is_tty_ =
false;
244 bool color_enabled_ =
false;
247 [[nodiscard]]
const char *GetLevelColor(
LogLevel level)
const {
267 [[nodiscard]]
static const char *GetLevelPrefix(
LogLevel level) {
void Event(std::string_view msg)
Definition Console.hpp:131
void Fatal(std::string_view msg)
Definition Console.hpp:134
void WriteLine(std::string_view text="") const
Write raw string with newline.
Definition Console.hpp:237
std::string BoxHorizontalRule(int width=80) const
Create horizontal rule with box-drawing character.
Definition Console.hpp:190
static std::string FormatNumber(double value, int precision=2)
Format number with fixed precision.
Definition Console.hpp:227
void Flush() const
Flush output.
Definition Console.hpp:240
void Write(std::string_view text) const
Write raw string (no formatting).
Definition Console.hpp:234
bool IsColorEnabled() const
Definition Console.hpp:120
static std::string PadCenter(std::string_view text, std::size_t width)
Pad string to width (center-aligned).
Definition Console.hpp:216
static std::string PadLeft(std::string_view text, std::size_t width)
Pad string to width (left-aligned).
Definition Console.hpp:208
bool IsTerminal() const
Check if stdout is a terminal (supports ANSI codes).
Definition Console.hpp:116
void LogTimed(LogLevel level, double sim_time, std::string_view msg)
Log with timestamp prefix.
Definition Console.hpp:154
void Log(LogLevel level, std::string_view msg)
Log with explicit level.
Definition Console.hpp:137
void Info(std::string_view msg)
Definition Console.hpp:130
static std::string PadRight(std::string_view text, std::size_t width)
Pad string to width (right-aligned).
Definition Console.hpp:200
std::string HorizontalRule(int width=80, char c='-') const
Create horizontal rule.
Definition Console.hpp:185
std::string Colorize(std::string_view text, const char *color) const
Apply color if enabled.
Definition Console.hpp:177
void Error(std::string_view msg)
Definition Console.hpp:133
void SetColorEnabled(bool enabled)
Enable/disable color output (auto-detected by default).
Definition Console.hpp:119
void SetLogLevel(LogLevel level)
Set minimum log level for output.
Definition Console.hpp:123
void Warning(std::string_view msg)
Definition Console.hpp:132
LogLevel GetLogLevel() const
Definition Console.hpp:124
Console()
Definition Console.hpp:113
void Debug(std::string_view msg)
Definition Console.hpp:129
void Trace(std::string_view msg)
Definition Console.hpp:128
Base class for all Icarus exceptions.
Definition Error.hpp:52
Definition AggregationTypes.hpp:13
@ Warning
Proceed with caution.
Definition ValidationResult.hpp:20
@ Info
Informational note.
Definition ValidationResult.hpp:21
LogLevel
Log severity levels.
Definition Console.hpp:35
@ Warning
Potential issues.
Definition Console.hpp:40
@ Info
Normal operation.
Definition Console.hpp:38
@ Fatal
Unrecoverable errors.
Definition Console.hpp:42
@ Error
Recoverable errors.
Definition Console.hpp:41
@ Event
Simulation events (phase changes, etc.).
Definition Console.hpp:39
@ Debug
Debugging info.
Definition Console.hpp:37
@ Trace
Most verbose, internal debugging.
Definition Console.hpp:36
ANSI color codes.
Definition Console.hpp:52
static constexpr const char * BgRed
Definition Console.hpp:68
static constexpr const char * Cyan
Definition Console.hpp:63
static constexpr const char * Blue
Definition Console.hpp:61
static constexpr const char * Gray
Definition Console.hpp:65
static constexpr const char * Red
Definition Console.hpp:58
static constexpr const char * Reset
Definition Console.hpp:53
static constexpr const char * Dim
Definition Console.hpp:55
static constexpr const char * BgGreen
Definition Console.hpp:69
static constexpr const char * White
Definition Console.hpp:64
static constexpr const char * Green
Definition Console.hpp:59
static constexpr const char * Yellow
Definition Console.hpp:60
static constexpr const char * Magenta
Definition Console.hpp:62
static constexpr const char * Bold
Definition Console.hpp:54
Box-drawing characters (Unicode).
Definition Console.hpp:79
static constexpr const char * TeeRight
Definition Console.hpp:87
static constexpr const char * TreePipe
Definition Console.hpp:96
static constexpr const char * TeeLeft
Definition Console.hpp:88
static constexpr const char * TeeUp
Definition Console.hpp:90
static constexpr const char * TeeDown
Definition Console.hpp:89
static constexpr const char * TopLeft
Definition Console.hpp:81
static constexpr const char * HeavyHoriz
Definition Console.hpp:99
static constexpr const char * BottomLeft
Definition Console.hpp:83
static constexpr const char * TreeBranch
Definition Console.hpp:94
static constexpr const char * Horizontal
Definition Console.hpp:85
static constexpr const char * TreeLast
Definition Console.hpp:95
static constexpr const char * BottomRight
Definition Console.hpp:84
static constexpr const char * Vertical
Definition Console.hpp:86
static constexpr const char * TopRight
Definition Console.hpp:82
static constexpr const char * Cross
Definition Console.hpp:91