diff options
Diffstat (limited to 'error.h')
-rw-r--r-- | error.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/error.h b/error.h new file mode 100644 index 00000000..52af358a --- /dev/null +++ b/error.h @@ -0,0 +1,65 @@ +#ifndef _ERROR_H +#define _ERROR_H + +#include "journal.h" + +#include <exception> +#include <string> +#include <sstream> + +namespace ledger { + +class error : public std::exception { + std::string reason; + public: + error(const std::string& _reason) throw() : reason(_reason) {} + virtual ~error() throw() {} + + virtual const char* what() const throw() { + return reason.c_str(); + } +}; + +class compute_error : public error { + public: + compute_error(const std::string& reason) throw() : error(reason) {} + virtual ~compute_error() throw() {} +}; + +class value_expr_error : public error { + public: + value_expr_error(const std::string& reason) throw() : error(reason) {} + virtual ~value_expr_error() throw() {} +}; + +class interval_expr_error : public error { + public: + interval_expr_error(const std::string& reason) throw() : error(reason) {} + virtual ~interval_expr_error() throw() {} +}; + +class format_error : public error { + public: + format_error(const std::string& reason) throw() : error(reason) {} + virtual ~format_error() throw() {} +}; + +class parse_error : public error { + unsigned int line; + std::string file; + public: + parse_error(const std::string& _file, const unsigned int _line, + const std::string& reason) throw() + : error(reason), line(_line), file(_file) {} + virtual ~parse_error() throw() {} + + virtual const char* what() const throw() { + std::ostringstream msg; + msg << file << ", line " << line << ": " << error::what(); + return msg.str().c_str(); + } +}; + +} // namespace ledger + +#endif // _ERROR_H |