COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/lemon/error.h @ 1081:c0ad2673b11f

Last change on this file since 1081:c0ad2673b11f was 993:21d1b4fa1b24, checked in by Mihaly Barasz, 16 years ago

error.h brought back to life

File size: 2.0 KB
Line 
1/* -*- C++ -*-
2 * src/lemon/error.h - Part of LEMON, a generic C++ optimization library
3 *
4 * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Combinatorial Optimization Research Group, EGRES).
6 *
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.
10 *
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
13 * purpose.
14 *
15 */
16
17#ifndef LEMON_ERROR_H
18#define LEMON_ERROR_H
19
20//! \ingroup misc
21//! \file
22//! \brief Basic error handling (signaling) routines.
23
24#include <exception>
25#include <string>
26#include <sstream>
27
28
29namespace lemon {
30
31  /**
32   * \brief Generic exception class.
33   *
34   * \todo Do we need this?
35   *
36   * \todo Don't we need different kind of exceptions for different kind
37   * of errors?
38   * Shouldn't we use \<stdexcept\> instead?
39   */
40  class Exception : public std::exception {
41  protected:
42    std::ostringstream buf;
43  public:
44    Exception() {}
45    explicit Exception(const std::string &s) { buf << s; }
46    Exception(const Exception &e) : std::exception() {
47      buf << e.buf.str();
48    }
49    virtual ~Exception() throw() {}
50   
51    virtual const char* what() const throw() {
52      return buf.str().c_str();
53    }
54
55    template <typename T>
56    Exception& operator<<(T const& t) { buf << t; return *this; }
57  };
58
59  /**
60   * \brief Generic error signaling function.
61   *
62   * \todo Do we really need this? Is it helpful?
63   */
64  inline void fault(const std::string &msg) {
65    throw Exception(msg);
66  }
67
68  /**
69   * \brief Macro for mark not yet implemented features.
70   *
71   * \todo Is this the right place for this? It should be used only in
72   * modules under development.
73   */
74
75# define FIXME(msg) \
76    do { throw ::lemon::Exception() << "FIXME: " msg " (in: "    \
77      __FILE__ ", " << __LINE__ << ")";                          \
78    } while(false)
79
80}
81#endif // LEMON_ERROR_H
Note: See TracBrowser for help on using the repository browser.