]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/error.h
Win32 doesn't have execinfo.h, so don't include it
[libs/core.git] / source / core / error.h
index a8ad2939daa72bb5021719fa1da126a0b151efba..d030c41c12937e1a3846ce819c445cd2b953e308 100644 (file)
@@ -1,16 +1,66 @@
-/*
+/* $Id$
+
 This file is part of libmspcore
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
+Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
-#ifndef MSP_FRAMEWORK_ERRORS_H_
-#define MSP_FRAMEWORK_ERRORS_H_
+#ifndef MSP_CORE_ERROR_H_
+#define MSP_CORE_ERROR_H_
 
-#include <msp/error.h>
+#include <exception>
+#include <string>
+#include "../debug/backtrace.h"
 
 namespace Msp {
 
-class UsageError: public Msp::Exception
+/**
+Base class for all Msp exceptions.
+*/
+class Exception: public std::exception
+{
+public:
+       Exception(const std::string &);
+       ~Exception() throw() { }
+
+       const char *what() const throw() { return w.c_str(); }
+       const Debug::Backtrace &get_backtrace() const throw() { return bt; }
+private:
+       std::string w;
+       Debug::Backtrace bt;
+
+};
+
+/**
+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
+{
+public:
+       KeyError(const std::string &w_): Exception(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
 {
 public:
        UsageError(const std::string &r, bool b=true): Exception(r), brief(b) { }
@@ -19,6 +69,20 @@ private:
        bool brief;
 };
 
+/**
+Thrown when a system call fails.
+*/
+class SystemError: public Exception
+{
+public:
+       SystemError(const std::string &, int);
+       int get_error_code() const { return err; }
+private:
+       int err;
+
+       static std::string build_what(const std::string &, int);
+};
+
 } // namespace Msp
 
 #endif