diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:47:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:47:37 +0000 |
commit | 00e2eb4fd0266c5be01e3a527a66aaad5ab4b634 (patch) | |
tree | a6a58bd544eb0b76b9d3acc678ea88791acca045 /include/ixion/exceptions.hpp | |
parent | Initial commit. (diff) | |
download | libixion-00e2eb4fd0266c5be01e3a527a66aaad5ab4b634.tar.xz libixion-00e2eb4fd0266c5be01e3a527a66aaad5ab4b634.zip |
Adding upstream version 0.19.0.upstream/0.19.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'include/ixion/exceptions.hpp')
-rw-r--r-- | include/ixion/exceptions.hpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/include/ixion/exceptions.hpp b/include/ixion/exceptions.hpp new file mode 100644 index 0000000..bccceb1 --- /dev/null +++ b/include/ixion/exceptions.hpp @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_IXION_EXCEPTIONS_HPP +#define INCLUDED_IXION_EXCEPTIONS_HPP + +#include "env.hpp" +#include "types.hpp" + +#include <exception> +#include <string> +#include <memory> + +namespace ixion { + +class IXION_DLLPUBLIC general_error : public std::exception +{ +public: + general_error(); + explicit general_error(const std::string& msg); + virtual ~general_error(); + virtual const char* what() const noexcept override; + +protected: + void set_message(const std::string& msg); + +private: + std::string m_msg; +}; + +class IXION_DLLPUBLIC formula_error : public std::exception +{ + struct impl; + std::unique_ptr<impl> mp_impl; +public: + explicit formula_error(formula_error_t fe); + explicit formula_error(formula_error_t fe, std::string msg); + formula_error(formula_error&& other); + + virtual ~formula_error(); + virtual const char* what() const noexcept override; + + formula_error_t get_error() const; +}; + +class IXION_DLLPUBLIC file_not_found : public general_error +{ +public: + explicit file_not_found(const std::string& fpath); + virtual ~file_not_found() override; +}; + +class IXION_DLLPUBLIC formula_registration_error : public general_error +{ +public: + explicit formula_registration_error(const std::string& msg); + virtual ~formula_registration_error() override; +}; + +/** + * This exception is thrown typically from the ixion::model_context class. + */ +class IXION_DLLPUBLIC model_context_error: public general_error +{ +public: + enum error_type + { + circular_dependency, + invalid_named_expression, + sheet_name_conflict, + sheet_size_locked, + not_implemented + }; + + explicit model_context_error(const std::string& msg, error_type type); + virtual ~model_context_error() override; + + error_type get_error_type() const; + +private: + error_type m_type; +}; + +class IXION_DLLPUBLIC not_implemented_error : public general_error +{ +public: + explicit not_implemented_error(const std::string& msg); + virtual ~not_implemented_error() override; +}; + +} + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |