X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1555ef43eee251e5892a2f7fd49bc96e99d68fef..4634214e18b847f6346048fa12179d3d99ae82c9:/include/xbt/ex.hpp diff --git a/include/xbt/ex.hpp b/include/xbt/ex.hpp index 1afc1bba74..9b6ff5ff32 100644 --- a/include/xbt/ex.hpp +++ b/include/xbt/ex.hpp @@ -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 */ -/* Copyright (c) 2002-2004 The OSSP Project */ -/* Copyright (c) 2002-2004 Cable & Wireless */ -/* 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 -** Copyright (c) 2002-2004 The OSSP Project -** Copyright (c) 2002-2004 Cable & Wireless -** -** 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 @@ -48,19 +12,43 @@ #include -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