]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/except.h
Add move semantics to Variant
[libs/core.git] / source / core / except.h
index ed295f11cef6c50d7fb1c407a7c89852e2d8b2b6..1673ff46a4c528764988bb7520cf0a5a9f0ef6d8 100644 (file)
-#ifndef MSP_CORE_ERROR_H_
-#define MSP_CORE_ERROR_H_
+#ifndef MSP_CORE_EXCEPT_H_
+#define MSP_CORE_EXCEPT_H_
 
-#include <exception>
-#include <string>
-#include <msp/debug/backtrace.h>
+#include <stdexcept>
+#include "mspcore_api.h"
 
 namespace Msp {
 
-/**
-Base class for all Msp exceptions.
-*/
-class Exception: public std::exception
+class MSPCORE_API invalid_state: public std::logic_error
 {
-private:
-       std::string wot;
-       std::string wer;
-       Debug::Backtrace bt;
-
 public:
-       Exception(const std::string &);
-       ~Exception() throw() { }
-
-       const char *what() const throw() { return wot.c_str(); }
-       Exception &at(const std::string &) throw();
-       const char *where() const throw() { return wer.c_str(); }
-       const Debug::Backtrace &get_backtrace() const throw() { return bt; }
+       invalid_state(const std::string &w): logic_error(w) { }
 };
 
-/**
-Thrown when a function parameter has an invalid value.
-*/
-class InvalidParameterValue: public Exception
-{
-public:
-       InvalidParameterValue(const std::string &w_): Exception(w_) { }
-};
 
-/**
-Thrown when a lookup from a map fails.
-*/
-class KeyError: public Exception
+class MSPCORE_API already_called: public invalid_state
 {
-private:
-       std::string key;
-
 public:
-       KeyError(const std::string &w_): Exception(w_) { }
-       KeyError(const std::string &w_, const std::string &k);
-       ~KeyError() throw() { }
-
-       const std::string &get_key() const { return key; }
+       already_called(const std::string &w): invalid_state(w) { }
 };
 
-/**
-Thrown when the current object state doesn't allow the requested action.
-*/
-class InvalidState: public Exception
-{
-public:
-       InvalidState(const std::string &w_): Exception(w_) { }
-};
 
-/**
-Thrown when the application is invoked with wrong parameters.
-*/
-class UsageError: public Exception
+class MSPCORE_API unsupported: public std::logic_error
 {
-private:
-       bool brief;
-
 public:
-       UsageError(const std::string &r, bool b = true): Exception(r), brief(b) { }
-       bool get_brief() const { return brief; }
+       unsupported(const std::string &w): logic_error(w) { }
 };
 
-/**
-Thrown when a system call fails.
-*/
-class SystemError: public Exception
-{
-private:
-       int err;
-
-public:
-       SystemError(const std::string &, int);
-       int get_error_code() const { return err; }
-
-private:
-       static std::string build_what(const std::string &, int);
-};
 
-/**
-Thrown when "impossible" things happen.
-*/
-class LogicError: public Exception
+class MSPCORE_API internal_error: public std::logic_error
 {
 public:
-       LogicError(const std::string &w_): Exception(w_) { }
+       internal_error(const std::string &w): logic_error(w) { }
 };
 
-template<typename E>
-void throw_at(E e, const std::string &a)
-{ e.at(a); throw e; }
-
-} // namespace Msp
+} // namespace Msp;
 
 #endif