-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
+/* $Id$
+
+This file is part of libmspcore
+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(bool b=true): Exception(""), brief(b) { }
+ UsageError(const std::string &r, bool b=true): Exception(r), brief(b) { }
bool get_brief() const { return brief; }
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