00001 #ifndef _qpid_ExceptionHolder_h
00002 #define _qpid_ExceptionHolder_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <Exception.h>
00026 #include <boost/shared_ptr.hpp>
00027
00028 namespace qpid {
00029
00041 class ExceptionHolder : public Exception, public boost::shared_ptr<Exception>
00042 {
00043 public:
00044 typedef boost::shared_ptr<Exception> shared_ptr;
00045
00046 ExceptionHolder() throw() {}
00047 ExceptionHolder(Exception* p) throw() : shared_ptr(p) {}
00048 ExceptionHolder(shared_ptr p) throw() : shared_ptr(p) {}
00049
00050 ExceptionHolder(const Exception& e) throw() : shared_ptr(e.clone()) {}
00051 ExceptionHolder(const std::exception& e);
00052
00053 ~ExceptionHolder() throw() {}
00054
00055 const char* what() const throw() { return (*this)->what(); }
00056 std::string toString() const throw() { return (*this)->toString(); }
00057 virtual Exception* clone() const throw() { return (*this)->clone(); }
00058 virtual void throwSelf() const { (*this)->throwSelf(); }
00059 };
00060
00061 }
00062
00063
00064
00065 #endif