mirror of
https://github.com/ToruNiina/toml11.git
synced 2024-11-22 04:20:06 +00:00
cc2e453b5b
parse(FILE*) is a minor overload, but dispatching strerror takes too much cost. Standard library version is not thread-safe, so some compiler reports a warning. There are thread-safe versions defined in XSI, GNU, and Windows. XSI/GNU versions can be detected by macros, but in some cases, detection-by-macro written in the doc does not work. Since errno can be obtained from the exception, users can call strerror that is available in their env if needed. We can just report errno.
84 lines
2.1 KiB
C++
84 lines
2.1 KiB
C++
// Copyright Toru Niina 2017.
|
|
// Distributed under the MIT License.
|
|
#ifndef TOML11_EXCEPTION_HPP
|
|
#define TOML11_EXCEPTION_HPP
|
|
|
|
#include <array>
|
|
#include <string>
|
|
#include <stdexcept>
|
|
|
|
#include <cstring>
|
|
|
|
#include "source_location.hpp"
|
|
|
|
namespace toml
|
|
{
|
|
|
|
struct file_io_error : public std::runtime_error
|
|
{
|
|
public:
|
|
file_io_error(int errnum, const std::string& msg, const std::string& fname)
|
|
: std::runtime_error(msg + " \"" + fname + "\": errno = " + std::to_string(errnum)),
|
|
errno_(errnum)
|
|
{}
|
|
|
|
int get_errno() const noexcept {return errno_;}
|
|
|
|
private:
|
|
int errno_;
|
|
};
|
|
|
|
struct exception : public std::exception
|
|
{
|
|
public:
|
|
explicit exception(const source_location& loc): loc_(loc) {}
|
|
virtual ~exception() noexcept override = default;
|
|
virtual const char* what() const noexcept override {return "";}
|
|
virtual source_location const& location() const noexcept {return loc_;}
|
|
|
|
protected:
|
|
source_location loc_;
|
|
};
|
|
|
|
struct syntax_error : public toml::exception
|
|
{
|
|
public:
|
|
explicit syntax_error(const std::string& what_arg, const source_location& loc)
|
|
: exception(loc), what_(what_arg)
|
|
{}
|
|
virtual ~syntax_error() noexcept override = default;
|
|
virtual const char* what() const noexcept override {return what_.c_str();}
|
|
|
|
protected:
|
|
std::string what_;
|
|
};
|
|
|
|
struct type_error : public toml::exception
|
|
{
|
|
public:
|
|
explicit type_error(const std::string& what_arg, const source_location& loc)
|
|
: exception(loc), what_(what_arg)
|
|
{}
|
|
virtual ~type_error() noexcept override = default;
|
|
virtual const char* what() const noexcept override {return what_.c_str();}
|
|
|
|
protected:
|
|
std::string what_;
|
|
};
|
|
|
|
struct internal_error : public toml::exception
|
|
{
|
|
public:
|
|
explicit internal_error(const std::string& what_arg, const source_location& loc)
|
|
: exception(loc), what_(what_arg)
|
|
{}
|
|
virtual ~internal_error() noexcept override = default;
|
|
virtual const char* what() const noexcept override {return what_.c_str();}
|
|
|
|
protected:
|
|
std::string what_;
|
|
};
|
|
|
|
} // toml
|
|
#endif // TOML_EXCEPTION
|