blob: af344ed81d3ebb7ec8d254e46c32488f97acfb56 [file] [log] [blame]
Mike Dodd8cfa7022010-11-17 11:12:26 -08001/**
2 * @file op_exception.h
3 * exception base class
4 *
5 * This provide simple base class for exception object. All
6 * exception are derived from directly or indirectly from
7 * std::exception. This class are not itended to be catched
8 * in your code except at top level, derive what you want
9 * and catch derived class rather.
10 *
11 * @remark Copyright 2003 OProfile authors
12 * @remark Read the file COPYING
13 *
14 * @author Philippe Elie
15 * @author John Levon
16 */
17
18#ifndef OP_EXCEPTION_H
19#define OP_EXCEPTION_H
20
21#include <stdexcept>
22#include <string>
23
24
25/**
26 * exception abstract base class
27 */
28class op_exception : public std::exception {
29public:
30 explicit op_exception(std::string const& msg);
31 ~op_exception() throw() = 0;
32
33 char const * what() const throw();
34private:
35 std::string message;
36};
37
38
39/**
40 * fatal exception, never catch it except at top level (likely main or
41 * gui). Intended to replace cerr << "blah"; exit(EXIT_FAILURE); by a
42 * throw op_fatal_error("blah") when returning error code is not an option
43 */
44struct op_fatal_error : op_exception
45{
46 explicit op_fatal_error(std::string const & msg);
47};
48
49/**
50 * Encapsulate a runtime error with or w/o a valid errno
51 */
52struct op_runtime_error : std::runtime_error
53{
54 explicit op_runtime_error(std::string const & err);
55 op_runtime_error(std::string const & err, int cerrno);
56 ~op_runtime_error() throw();
57};
58
59
60#endif /* !OP_EXCEPTION_H */