-/* Copyright (c) 2015-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2015-2023. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#ifndef SIMGRID_MC_EXIT_HPP
#define SIMGRID_MC_EXIT_HPP
#include "xbt/base.h"
+#include <exception>
-#define SIMGRID_MC_EXIT_SUCCESS 0
-#define SIMGRID_MC_EXIT_SAFETY 1
-#define SIMGRID_MC_EXIT_LIVENESS 2
-#define SIMGRID_MC_EXIT_DEADLOCK 3
-#define SIMGRID_MC_EXIT_NON_TERMINATION 4
-#define SIMGRID_MC_EXIT_NON_DETERMINISM 5
-#define SIMGRID_MC_EXIT_PROGRAM_CRASH 6
+namespace simgrid::mc {
-#define SIMGRID_MC_EXIT_ERROR 63
-
-namespace simgrid {
-namespace mc {
-class XBT_PUBLIC DeadlockError {
-};
-class XBT_PUBLIC TerminationError {
+enum class ExitStatus {
+ SUCCESS = 0,
+ SAFETY = 1,
+ LIVENESS = 2,
+ DEADLOCK = 3,
+ NON_TERMINATION = 4,
+ NON_DETERMINISM = 5,
+ PROGRAM_CRASH = 6,
+ ERROR = 63
};
-class XBT_PUBLIC LivenessError {
+
+struct McError : public std::exception {
+ const ExitStatus value;
+ explicit McError(ExitStatus v = ExitStatus::ERROR) : value(v) {}
};
-}
-}
+} // namespace simgrid::mc
#endif