summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/Exception.h
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2007-06-18 12:11:32 +0000
committerAndrew Stitcher <astitcher@apache.org>2007-06-18 12:11:32 +0000
commit45b526ce09daee869ec1313808583f7e05bff7bb (patch)
tree297d2b1f02b14e1fdffbc1074b3d23670859f602 /cpp/src/qpid/Exception.h
parent41c30308ad435c338633b97405fe7350d515f069 (diff)
downloadqpid-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.h65
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 {