X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexcept.h;h=ceb95e30f13a6ebeaf83950f5a2fc711054699a9;hb=e14c01b5775dd2e324b16ff49498db9b9113c523;hp=ff256a4449c0a0eef903857ccfc3312dc4f79569;hpb=7df5e45c7f414f6a07681dc4ec2abb63b091a309;p=libs%2Fdatafile.git diff --git a/source/except.h b/source/except.h index ff256a4..ceb95e3 100644 --- a/source/except.h +++ b/source/except.h @@ -1,21 +1,85 @@ #ifndef MSP_DATAFILE_EXCEPT_H_ #define MSP_DATAFILE_EXCEPT_H_ -#include +#include +#include +#include namespace Msp { namespace DataFile { -class TypeError: public Exception +class data_error: public std::runtime_error +{ +private: + std::string source; + unsigned line = 0; + +public: + data_error(const std::string &, unsigned, const std::string &); + data_error(const std::string &, unsigned, const std::exception &); + data_error(const std::string &, unsigned, const data_error &); + virtual ~data_error() throw() = default; + + const std::string &get_source() const { return source; } + unsigned get_line() const { return line; } + +private: + std::string make_what(const std::string &, unsigned, const std::string &); +}; + + +class parse_error: public std::runtime_error +{ +public: + parse_error(const std::string &); + virtual ~parse_error() throw() = default; +}; + + +class syntax_error: public std::runtime_error +{ +public: + syntax_error(const std::string &t); + virtual ~syntax_error() throw() = default; +}; + + +class bad_definition: public std::runtime_error { public: - TypeError(const std::string &w): Exception(w) { } + bad_definition(const std::string &w); + virtual ~bad_definition() throw() = default; }; -class ParseError: public Exception + +class nesting_error: public std::logic_error +{ +public: + nesting_error(const std::string &); + virtual ~nesting_error() throw() = default; +}; + + +class unknown_keyword: public std::runtime_error +{ +public: + unknown_keyword(const std::string &); + virtual ~unknown_keyword() throw() = default; +}; + + +class invalid_signature: public std::runtime_error +{ +public: + invalid_signature(const std::string &, const std::string &); + virtual ~invalid_signature() throw() = default; +}; + + +class no_collection: public std::runtime_error { public: - ParseError(const std::string &w): Exception(w) { } + no_collection(const std::type_info &); }; } // namespace DataFile