00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef XARCH_H
00016 #define XARCH_H
00017
00018 #include "common.h"
00019 #include "stdstring.h"
00020
00022
00027 class XThread { };
00028
00030
00034 class XThreadCancel : public XThread { };
00035
00042 #define RETHROW_XTHREAD \
00043 try { throw; } catch (XThread&) { throw; } catch (...) { }
00044
00046
00052 class XArchEval {
00053 public:
00054 XArchEval() { }
00055 virtual ~XArchEval() { }
00056
00057 virtual XArchEval* clone() const throw() = 0;
00058
00059 virtual std::string eval() const throw() = 0;
00060 };
00061
00063 class XArch {
00064 public:
00065 XArch(XArchEval* adoptedEvaluator) : m_eval(adoptedEvaluator) { }
00066 XArch(const std::string& msg) : m_eval(NULL), m_what(msg) { }
00067 XArch(const XArch& e) : m_eval(e.m_eval != NULL ? e.m_eval->clone() : NULL),
00068 m_what(e.m_what) { }
00069 ~XArch() { delete m_eval; }
00070
00071 std::string what() const throw();
00072
00073 private:
00074 XArchEval* m_eval;
00075 mutable std::string m_what;
00076 };
00077
00078
00079 #define XARCH_SUBCLASS(name_, super_) \
00080 class name_ : public super_ { \
00081 public: \
00082 name_(XArchEval* adoptedEvaluator) : super_(adoptedEvaluator) { } \
00083 name_(const std::string& msg) : super_(msg) { } \
00084 }
00085
00087
00091 XARCH_SUBCLASS(XArchNetwork, XArch);
00092
00094 XARCH_SUBCLASS(XArchNetworkInterrupted, XArchNetwork);
00095
00097 XARCH_SUBCLASS(XArchNetworkAccess, XArchNetwork);
00098
00100 XARCH_SUBCLASS(XArchNetworkResource, XArchNetwork);
00101
00103 XARCH_SUBCLASS(XArchNetworkSupport, XArchNetwork);
00104
00106 XARCH_SUBCLASS(XArchNetworkIO, XArchNetwork);
00107
00109 XARCH_SUBCLASS(XArchNetworkNoAddress, XArchNetwork);
00110
00112 XARCH_SUBCLASS(XArchNetworkAddressInUse, XArchNetwork);
00113
00115 XARCH_SUBCLASS(XArchNetworkNoRoute, XArchNetwork);
00116
00118 XARCH_SUBCLASS(XArchNetworkNotConnected, XArchNetwork);
00119
00121 XARCH_SUBCLASS(XArchNetworkShutdown, XArchNetwork);
00122
00124 XARCH_SUBCLASS(XArchNetworkDisconnected, XArchNetwork);
00125
00127 XARCH_SUBCLASS(XArchNetworkConnectionRefused, XArchNetwork);
00128
00130 XARCH_SUBCLASS(XArchNetworkTimedOut, XArchNetwork);
00131
00133 XARCH_SUBCLASS(XArchNetworkName, XArchNetwork);
00134
00136 XARCH_SUBCLASS(XArchNetworkNameUnknown, XArchNetworkName);
00137
00139 XARCH_SUBCLASS(XArchNetworkNameNoAddress, XArchNetworkName);
00140
00142 XARCH_SUBCLASS(XArchNetworkNameFailure, XArchNetworkName);
00143
00145 XARCH_SUBCLASS(XArchNetworkNameUnavailable, XArchNetworkName);
00146
00148 XARCH_SUBCLASS(XArchNetworkNameUnsupported, XArchNetworkName);
00149
00151
00155 XARCH_SUBCLASS(XArchDaemon, XArch);
00156
00158 XARCH_SUBCLASS(XArchDaemonFailed, XArchDaemon);
00159
00161 XARCH_SUBCLASS(XArchDaemonInstallFailed, XArchDaemon);
00162
00164 XARCH_SUBCLASS(XArchDaemonUninstallFailed, XArchDaemon);
00165
00167 XARCH_SUBCLASS(XArchDaemonUninstallNotInstalled, XArchDaemonUninstallFailed);
00168
00169
00170 #endif