diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2007-06-18 12:11:32 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2007-06-18 12:11:32 +0000 |
| commit | 45b526ce09daee869ec1313808583f7e05bff7bb (patch) | |
| tree | 297d2b1f02b14e1fdffbc1074b3d23670859f602 /cpp/src/qpid/Exception.h | |
| parent | 41c30308ad435c338633b97405fe7350d515f069 (diff) | |
| download | qpid-python-45b526ce09daee869ec1313808583f7e05bff7bb.tar.gz | |
Intermediate checkin with preliminary work on epoll based net IO
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@548337 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/Exception.h')
| -rw-r--r-- | cpp/src/qpid/Exception.h | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/cpp/src/qpid/Exception.h b/cpp/src/qpid/Exception.h index 13583042a8..24f0efd16b 100644 --- a/cpp/src/qpid/Exception.h +++ b/cpp/src/qpid/Exception.h @@ -21,13 +21,15 @@ * under the License. * */ + +#include "framing/amqp_types.h" + #include <exception> #include <string> #include <memory> #include <boost/shared_ptr.hpp> #include <boost/lexical_cast.hpp> - -#include "framing/amqp_types.h" +#include <boost/function.hpp> namespace qpid { @@ -44,6 +46,10 @@ class Exception : public std::exception std::string whatStr; public: + typedef boost::shared_ptr<Exception> shared_ptr; + typedef boost::shared_ptr<const Exception> shared_ptr_const; + typedef std::auto_ptr<Exception> auto_ptr; + Exception() throw(); Exception(const std::string& str) throw(); Exception(const char* str) throw(); @@ -59,10 +65,61 @@ class Exception : public std::exception virtual const char* what() const throw(); virtual std::string toString() const throw(); - virtual Exception* clone() const throw(); + virtual auto_ptr clone() const throw(); virtual void throwSelf() const; - typedef boost::shared_ptr<Exception> shared_ptr; + /** Default message: "Unknown exception" or something like it. */ + static const char* defaultMessage; + + /** + * Log a message of the form "message: what" + *@param what Exception's what() message. + *@param message Prefix message. + */ + static void log(const char* what, const char* message = defaultMessage); + + /** + * Log an exception. + *@param e Exception to log. + + */ + static void log( + const std::exception& e, const char* message = defaultMessage); + + + /** + * Log an unknown exception - use in catch(...) + *@param message Prefix message. + */ + static void logUnknown(const char* message = defaultMessage); + + /** + * Wrapper template function to call another function inside + * try/catch and log any exception. Use boost::bind to wrap + * member function calls or functions with arguments. + * + *@param f Function to call in try block. + *@param retrhow If true the exception is rethrown. + *@param message Prefix message. + */ + template <class T> + static T tryCatchLog(boost::function0<T> f, bool rethrow=true, + const char* message=defaultMessage) + { + try { + return f(); + } + catch (const std::exception& e) { + log(e, message); + if (rethrow) + throw; + } + catch (...) { + logUnknown(message); + if (rethrow) + throw; + } + } }; struct ChannelException : public Exception { |
