52class Error :
public std::runtime_error {
64 const std::string &component =
"")
const {
67 .component = component.empty() ?
category_ : component,
101 const std::string &
detail =
"")
106 [[nodiscard]]
const std::string &
signal_name()
const {
return signal_name_; }
114 const std::string &new_owner) {
116 "already owned by '" + existing_owner +
"', conflict from '" + new_owner +
"'"};
120 const std::string &actual) {
148 const std::string &detail) {
152 prefix =
"Signal not found";
155 prefix =
"Duplicate signal";
158 prefix =
"Type mismatch";
161 prefix =
"Unwired input";
164 prefix =
"Null pointer";
167 std::string msg = prefix +
": '" + name +
"'";
168 if (!detail.empty()) {
169 msg +=
" (" + detail +
")";
175 std::string signal_name_;
191 :
Error(
"Config: " + component +
" missing required key '" + key +
"'",
Severity::
ERROR,
195 const std::string &
hint =
"")
199 [[nodiscard]]
const std::string &
file()
const {
return file_; }
200 [[nodiscard]]
int line()
const {
return line_; }
201 [[nodiscard]]
const std::string &
hint()
const {
return hint_; }
204 static std::string FormatMessage(
const std::string &msg,
const std::string &
file,
int line,
205 const std::string &
hint) {
206 std::string result =
"Config: " + msg;
208 result +=
"\n at: " +
file;
210 result +=
":" + std::to_string(
line);
214 result +=
"\n hint: " +
hint;
280 :
Error(
"Wiring: cannot connect '" +
input +
"' -> '" +
output +
"': " + reason,
284 [[nodiscard]]
const std::string &
input()
const {
return input_; }
285 [[nodiscard]]
const std::string &
output()
const {
return output_; }
310 [[nodiscard]] std::optional<double>
t()
const {
return t_; }
311 [[nodiscard]] std::optional<double>
dt()
const {
return dt_; }
315 return IntegrationError(
"Step size below minimum: " + std::to_string(min_dt));
319 std::optional<double> t_;
320 std::optional<double> dt_;
341 [[nodiscard]] std::optional<std::size_t>
expected()
const {
return expected_; }
342 [[nodiscard]] std::optional<std::size_t>
actual()
const {
return actual_; }
345 std::optional<std::size_t> expected_;
346 std::optional<std::size_t> actual_;
360 IOError(
const std::string &operation,
const std::string &
path,
const std::string &reason)
364 [[nodiscard]]
const std::string &
path()
const {
return path_; }
386 [[nodiscard]]
const std::string &
condition()
const {
return condition_; }
389 std::string condition_;
443 const std::string &actual)
445 "expected " + expected +
", got " + actual) {}
451 const std::string &new_owner)
453 "already owned by '" + existing +
"', conflict from '" + new_owner +
"'") {}
497[[noreturn]]
void ThrowError(E &&error, [[maybe_unused]]
double time = 0.0,
498 [[maybe_unused]]
const std::string &component =
"") {
501 throw std::forward<E>(error);
515#define ICARUS_THROW(error) throw(error)
523#define ICARUS_THROW_CTX(error, time, component) ::icarus::ThrowError((error), (time), (component))
const std::string & condition() const
Definition Error.hpp:386
ConditionError(const std::string &condition, const std::string &reason)
Definition Error.hpp:382
ConditionError(const std::string &msg)
Definition Error.hpp:379
Configuration/parsing errors with optional file context.
Definition Error.hpp:185
ConfigError(const std::string &component, const std::string &key)
Definition Error.hpp:190
ConfigError(const std::string &msg)
Definition Error.hpp:187
int line() const
Definition Error.hpp:200
ConfigError(const std::string &message, const std::string &file, int line, const std::string &hint="")
Definition Error.hpp:194
const std::string & hint() const
Definition Error.hpp:201
const std::string & file() const
Definition Error.hpp:199
DuplicateSignalError(const std::string &name, const std::string &existing, const std::string &new_owner)
Definition Error.hpp:450
SimulationError toSimulationError(double time=0.0, const std::string &component="") const
Convert to SimulationError for ErrorHandler integration.
Definition Error.hpp:63
std::string category_
Definition Error.hpp:73
Error(const std::string &msg, Severity severity=Severity::ERROR, std::string category="general")
Definition Error.hpp:54
Severity severity_
Definition Error.hpp:72
const std::string & category() const
Definition Error.hpp:60
Severity severity() const
Definition Error.hpp:59
IOError(const std::string &operation, const std::string &path, const std::string &reason)
Definition Error.hpp:360
const std::string & path() const
Definition Error.hpp:364
IOError(const std::string &msg)
Definition Error.hpp:358
Integration/ODE solver errors with time context.
Definition Error.hpp:299
IntegrationError(const std::string &msg)
Definition Error.hpp:301
static IntegrationError StepTooSmall(double min_dt)
Definition Error.hpp:314
std::optional< double > dt() const
Definition Error.hpp:311
std::optional< double > t() const
Definition Error.hpp:310
IntegrationError(double t, double dt, const std::string &reason)
Definition Error.hpp:304
LifecycleError(const std::string &msg)
Definition Error.hpp:238
LifecycleError(LifecyclePhase phase, const std::string &msg)
Definition Error.hpp:241
LifecyclePhase phase() const
Definition Error.hpp:245
NotImplementedError(const std::string &feature)
Definition Error.hpp:401
ProvisionError(const std::string &msg)
Definition Error.hpp:416
static SignalError NullPointer(const std::string &name, const std::string &context="")
Definition Error.hpp:126
const std::string & signal_name() const
Definition Error.hpp:106
static SignalError Duplicate(const std::string &name, const std::string &existing_owner, const std::string &new_owner)
Definition Error.hpp:113
SignalErrorKind kind() const
Definition Error.hpp:105
SignalError(const std::string &msg)
Definition Error.hpp:97
static SignalError TypeMismatch(const std::string &name, const std::string &expected, const std::string &actual)
Definition Error.hpp:119
SignalError(SignalErrorKind kind, const std::string &signal_name, const std::string &detail="")
Definition Error.hpp:100
static SignalError Unwired(const std::string &name)
Definition Error.hpp:124
static SignalError NotFound(const std::string &name)
Definition Error.hpp:109
SignalNotFoundError(const std::string &name)
Definition Error.hpp:458
StageError(const std::string &msg)
Definition Error.hpp:422
std::optional< std::size_t > actual() const
Definition Error.hpp:342
std::optional< std::size_t > expected() const
Definition Error.hpp:341
StateError(std::size_t expected, std::size_t actual)
Definition Error.hpp:335
StateError(const std::string &msg)
Definition Error.hpp:332
StateSizeMismatchError(std::size_t expected, std::size_t actual)
Definition Error.hpp:471
StepError(const std::string &msg)
Definition Error.hpp:427
StepSizeTooSmallError(double min_dt)
Definition Error.hpp:478
TypeMismatchError(const std::string &name, const std::string &expected, const std::string &actual)
Definition Error.hpp:442
Wiring and signal routing errors.
Definition Error.hpp:274
WiringError(const std::string &msg)
Definition Error.hpp:276
WiringError(const std::string &input, const std::string &output, const std::string &reason)
Definition Error.hpp:279
const std::string & input() const
Definition Error.hpp:284
const std::string & output() const
Definition Error.hpp:285
Definition DataDictionary.hpp:24
Definition AggregationTypes.hpp:13
LifecyclePhase
Simulation lifecycle phases.
Definition Error.hpp:231
@ Step
Definition Error.hpp:231
@ Reset
Definition Error.hpp:231
@ Other
Definition Error.hpp:231
@ Stage
Definition Error.hpp:231
@ Provision
Definition Error.hpp:231
const char * to_string(SignalKind kind)
Convert SignalKind to string.
Definition Signal.hpp:86
void ThrowError(E &&error, double time=0.0, const std::string &component="")
Helper to throw an error and optionally log it.
Definition Error.hpp:497
Severity
Definition Error.hpp:22
@ WARNING
Warning (may trigger graceful degradation).
Definition Error.hpp:24
@ FATAL
Fatal (simulation must stop).
Definition Error.hpp:26
@ INFO
Informational (logged, no action).
Definition Error.hpp:23
@ ERROR
Error (simulation may continue with fallback).
Definition Error.hpp:25
SignalErrorKind
Signal-related error categories.
Definition Error.hpp:83
@ NullPointer
Null data pointer provided.
Definition Error.hpp:88
@ TypeMismatch
Type mismatch during resolution.
Definition Error.hpp:86
@ NotFound
Signal does not exist.
Definition Error.hpp:84
@ Unwired
Input not wired to output.
Definition Error.hpp:87
@ Duplicate
Signal already registered.
Definition Error.hpp:85
IntegrationError IntegratorError
Definition Error.hpp:437
WiringError RoutingError
Definition Error.hpp:431
ConfigError ConfigurationError
Definition Error.hpp:434
Severity severity
Definition Error.hpp:34
std::string message
Definition Error.hpp:35
std::string component
Definition Error.hpp:36
double time
Definition Error.hpp:37