-/* $Id$
-
-This file is part of libmspcore
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
#ifndef MSP_CORE_ERROR_H_
#define MSP_CORE_ERROR_H_
*/
class Exception: public std::exception
{
+private:
+ std::string wot;
+ std::string wer;
+ Debug::Backtrace bt;
+
public:
Exception(const std::string &);
~Exception() throw() { }
- const char *what() const throw() { return w.c_str(); }
+ 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; }
-private:
- std::string w;
- Debug::Backtrace bt;
-
};
/**
*/
class KeyError: public Exception
{
+private:
+ std::string key;
+
public:
KeyError(const std::string &w_): Exception(w_) { }
- KeyError(const std::string &w_, const std::string &k) { }
+ KeyError(const std::string &w_, const std::string &k);
+ ~KeyError() throw() { }
+
const std::string &get_key() const { return key; }
-private:
- std::string key;
};
/**
*/
class UsageError: public Exception
{
-public:
- UsageError(const std::string &r, bool b=true): Exception(r), brief(b) { }
- bool get_brief() const { return brief; }
private:
bool brief;
+
+public:
+ UsageError(const std::string &r, bool b = true): Exception(r), brief(b) { }
+ bool get_brief() const { return brief; }
};
/**
*/
class SystemError: public Exception
{
+private:
+ int err;
+
public:
SystemError(const std::string &, int);
int get_error_code() const { return err; }
-private:
- int err;
+private:
static std::string build_what(const std::string &, int);
};
+/**
+Thrown when "impossible" things happen.
+*/
+class LogicError: public Exception
+{
+public:
+ LogicError(const std::string &w_): Exception(w_) { }
+};
+
+template<typename E>
+void throw_at(E e, const std::string &a)
+{ e.at(a); throw e; }
+
} // namespace Msp
#endif