Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mv link map to the engine
[simgrid.git] / include / xbt / ex.hpp
index 1afc1bb..9b6ff5f 100644 (file)
@@ -1,44 +1,8 @@
-/* Copyright (c) 2005-2015. The SimGrid Team.
+/* Copyright (c) 2005-2018. The SimGrid Team.
  * All rights reserved.                                                     */
 
-/*  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>       */
-/*  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>         */
-/*  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>           */
-/*  All rights reserved.                                                    */
-
-/* This code is inspirated from the OSSP version (as retrieved back in 2004)*/
-/* It was heavily modified to fit the SimGrid framework.                    */
-
-/* The OSSP version has the following copyright notice:
-**  OSSP ex - Exception Handling
-**  Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
-**  Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
-**  Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
-**
-**  This file is part of OSSP ex, an exception handling library
-**  which can be found at http://www.ossp.org/pkg/lib/ex/.
-**
-**  Permission to use, copy, modify, and distribute this software for
-**  any purpose with or without fee is hereby granted, provided that
-**  the above copyright notice and this permission notice appear in all
-**  copies.
-**
-**  THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESSED OR IMPLIED
-**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-**  SUCH DAMAGE.
- */
-
-/* The extensions made for the SimGrid project can either be distributed    */
-/* under the same license, or under the LGPL v2.1                           */
+/* 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_XBT_EX_HPP
 #define SIMGRID_XBT_EX_HPP
 
 #include <xbt/ex.h>
 
-struct XBT_PUBLIC() xbt_ex :
-  public std::runtime_error,
-  public simgrid::xbt::WithContextException {
+/** 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
+ */
+class 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() override;
+  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(); // DO NOT define it here -- see ex.cpp for a rationale
+
+  /** Category (what went wrong) */
+  xbt_errcat_t category = unknown_error;
+
+  /** Why did it went wrong */
+  int value = 0;
 
-  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 */
 };
 
 #endif