]> git.tdb.fi Git - libs/core.git/commitdiff
Add a "where" property to Exception class
authorMikko Rasa <tdb@tdb.fi>
Wed, 6 Aug 2008 16:29:57 +0000 (16:29 +0000)
committerMikko Rasa <tdb@tdb.fi>
Wed, 6 Aug 2008 16:29:57 +0000 (16:29 +0000)
source/core/except.cpp
source/core/except.h

index ddd2cb5167d57f0e3f5df614a8caf3ad3b68dc50..0ae2e59bd9ba339a78d7560ed13326ac6af83e45 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspcore
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2006-200 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -16,24 +16,27 @@ using namespace std;
 
 namespace Msp {
 
-Exception::Exception(const string &w_):
-       w(w_)
+Exception::Exception(const string &w):
+       wot(w)
 {
 #ifdef WITH_EXCEPTION_BACKTRACE
        bt=Debug::Backtrace::create();
 #endif
 }
 
+Exception &Exception::at(const std::string &w) throw()
+{
+       wer=w;
+       wot=wer+": "+wot;
+       return *this;
+}
+
+
 SystemError::SystemError(const string &w_, int e):
        Exception(build_what(w_, e)),
        err(e)
 { }
 
-KeyError::KeyError(const string &w_, const string &k):
-       Exception(w_+" ("+k+")"),
-       key(k)
-{ }
-
 string SystemError::build_what(const string &w, int e)
 {
        ostringstream buf;
@@ -50,4 +53,10 @@ string SystemError::build_what(const string &w, int e)
        return buf.str();
 }
 
+
+KeyError::KeyError(const string &w_, const string &k):
+       Exception(w_+" ("+k+")"),
+       key(k)
+{ }
+
 } // namespace Msp
index 5dfbe8d03d56d56ac8a879eddc696dbb866670e5..fc6fcc6c69921f48205fea5434a9b8da5cb05671 100644 (file)
@@ -1,9 +1,10 @@
 /* $Id$
 
 This file is part of libmspcore
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2006-200 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
+
 #ifndef MSP_CORE_ERROR_H_
 #define MSP_CORE_ERROR_H_
 
@@ -22,10 +23,13 @@ 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;
+       std::string wot;
+       std::string wer;
        Debug::Backtrace bt;
 
 };
@@ -88,6 +92,10 @@ private:
        static std::string build_what(const std::string &, int);
 };
 
+template<typename E>
+void throw_at(E e, const std::string &a)
+{ e.at(a); throw e; }
+
 } // namespace Msp
 
 #endif