Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
please sonar using C++11 constructs
[simgrid.git] / include / xbt / ex.hpp
index 1afc1bb..de8c43d 100644 (file)
 
 #include <xbt/ex.h>
 
+/** A legacy exception
+ *
+ *  It is defined by a category and a value within that category (as well as
+ *  an optional error message).
+ *
+ *  This used to be a structure for C exceptions but it has been retrofitted
+ *  as a C++ exception and some of its data has been moved in the
+ *  @ref WithContextException base class. We should deprecate it and replace it
+ *  with either C++ different exceptions or `std::system_error` which already
+ *  provides this (category + error code) logic.
+ *
+ *  @ingroup XBT_ex_c
+ */
 struct XBT_PUBLIC() xbt_ex :
   public std::runtime_error,
   public simgrid::xbt::WithContextException {
 public:
-  xbt_ex() : std::runtime_error("") {}
-  xbt_ex(const char* message) : std::runtime_error(message) {}
+
+  xbt_ex() :
+    std::runtime_error("")
+  {}
+
+  /**
+   *
+   * @param throwpoint Throw point (use XBT_THROW_POINT)
+   * @param message    Exception message
+   */
+  xbt_ex(simgrid::xbt::ThrowPoint throwpoint, const char* message) :
+    std::runtime_error(message),
+    simgrid::xbt::WithContextException(throwpoint, simgrid::xbt::backtrace())
+  {}
+
   ~xbt_ex() override;
 
-  xbt_errcat_t category;        /**< category like HTTP (what went wrong) */
-  int value;                    /**< like errno (why did it went wrong) */
-  const char *file;             /**< Thrown point */
-  int line;                     /**< Thrown point */
-  const char *func;             /**< Thrown point */
+  /** Category (what went wrong) */
+  xbt_errcat_t category;
+
+  /** Why did it went wrong */
+  int value;
+
 };
 
 #endif