Runtime/LogicError and throwers

This commit is contained in:
Christopher Dunn 2015-03-08 12:31:00 -05:00
parent 75279ccec2
commit 5383794cc9
2 changed files with 46 additions and 12 deletions

View File

@ -35,15 +35,20 @@ namespace Json {
/** Base class for all exceptions we throw.
*/
class Exception : public std::exception {
public:
Exception(std::string const& msg);
virtual ~Exception() throw();
virtual char const* what() const throw();
protected:
std::string const& msg_;
void* future_use_;
};
class JSON_API Exception;
/** Exceptions which the user cannot easily avoid.
*
* E.g. out-of-memory, stack-overflow, malicious input
*/
class JSON_API RuntimeError;
/** Exceptions throw by JSON_ASSERT/JSON_FAIL macros.
*
* These are precondition-violations (user bugs) and internal errors (our bugs).
*/
class JSON_API LogicError;
JSON_API void throwRuntimeError(std::string const& msg);
JSON_API void throwLogicError(std::string const& msg);
/** \brief Type of the value held by a Value object.
*/

View File

@ -152,17 +152,46 @@ static inline void releaseStringValue(char* value) { free(value); }
namespace Json {
class JSON_API Exception : public std::exception {
public:
Exception(std::string const& msg);
virtual ~Exception() throw();
virtual char const* what() const throw();
protected:
std::string const& msg_;
};
class JSON_API RuntimeError : public Exception {
public:
RuntimeError(std::string const& msg);
};
class JSON_API LogicError : public Exception {
public:
LogicError(std::string const& msg);
};
Exception::Exception(std::string const& msg)
: msg_(msg)
, future_use_(NULL)
{
}
{}
Exception::~Exception() throw()
{}
char const* Exception::what() const throw()
{
return msg_.c_str();
}
RuntimeError::RuntimeError(std::string const& msg)
: Exception(msg)
{}
LogicError::LogicError(std::string const& msg)
: Exception(msg)
{}
void throwRuntimeError(std::string const& msg)
{
throw RuntimeError(msg);
}
void throwLogicError(std::string const& msg)
{
throw LogicError(msg);
}
// //////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////