1 /** 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 */ 28 class op_exception : public std::exception { 29 public: 30 explicit op_exception(std::string const& msg); 31 ~op_exception() throw() = 0; 32 33 char const * what() const throw(); 34 private: 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 */ 44 struct 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 */ 52 struct 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 */ 61