2 * src/lemon/error.h - Part of LEMON, a generic C++ optimization library
4 * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Combinatorial Optimization Research Group, EGRES).
7 * Permission to use, modify and distribute this software is granted
8 * provided that this copyright notice appears in all copies. For
9 * precise terms see the accompanying LICENSE file.
11 * This software is provided "AS IS" with no warranty of any kind,
12 * express or implied, and with no claim as to its suitability for any
22 //! \brief Basic error handling (signaling) routines.
32 * \brief Generic exception class.
34 * \todo Do we need this?
36 * \todo Don't we need different kind of exceptions for different kind
38 * Shouldn't we use \<stdexcept\> instead?
40 class Exception : public std::exception {
42 std::ostringstream buf;
45 explicit Exception(const std::string &s) { buf << s; }
46 Exception(const Exception &e) : std::exception() {
49 virtual ~Exception() throw() {}
51 virtual const char* what() const throw() {
52 return buf.str().c_str();
55 Exception& operator<<(std::string const& s) { buf << s; return *this; }
56 Exception& operator<<(char const *s) { buf << s; return *this; }
57 Exception& operator<<(int i) { buf << i; return *this; }
61 * \brief Generic error signaling function.
63 * \todo Do we really need this? Is it helpful?
65 inline void fault(const std::string &msg) {
70 * \brief Macro for mark not yet implemented features.
72 * \todo Is this the right place for this? It should be used only in
73 * modules under development.
77 do { throw ::lemon::Exception() << "FIXME: " msg " (in: " \
78 __FILE__ ", " << __LINE__ << ")"; \
82 #endif // LEMON_ERROR_H