00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef LiveSupport_Core_XmlRpcException_h
00030 #define LiveSupport_Core_XmlRpcException_h
00031
00032 #ifndef __cplusplus
00033 #error This is a C++ include file
00034 #endif
00035
00036
00037
00038
00039 #ifdef HAVE_CONFIG_H
00040 #include "configure.h"
00041 #endif
00042
00043 #include <stdexcept>
00044
00045 #include "LiveSupport/Core/Ptr.h"
00046
00047 namespace LiveSupport {
00048 namespace Core {
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00065 class XmlRpcException : public std::exception
00066 {
00067 private:
00071 Ptr<std::string>::Ref message;
00072
00076 const std::exception & parent;
00077
00078 public:
00084 XmlRpcException(const std::string &msg) throw ()
00085 : parent(*this)
00086 {
00087 message.reset(new std::string(msg));
00088 }
00089
00095 XmlRpcException(const std::exception & parent) throw ()
00096 : parent(parent)
00097 {
00098 message.reset(new std::string(parent.what()));
00099 }
00100
00107 XmlRpcException(const std::string & msg,
00108 const std::exception & parent) throw ();
00109
00113 ~XmlRpcException(void) throw ()
00114 {
00115 }
00116
00122 void
00123 setMessage(const std::string & msg) throw ()
00124 {
00125 message.reset(new std::string(msg));
00126 }
00127
00133 virtual const char *
00134 what(void) const throw ()
00135 {
00136 return message->c_str();
00137 }
00138
00144 virtual const std::exception *
00145 getParent(void) const throw ()
00146 {
00147 return &parent == this ? 0 : &parent;
00148 }
00149 };
00150
00151
00152
00153
00154
00155
00156
00157
00158 }
00159 }
00160
00161 #endif // LiveSupport_Core_XmlRpcException_h
00162