XArch.h

00001 /*
00002  * synergy -- mouse and keyboard sharing utility
00003  * Copyright (C) 2002 Chris Schoeneman
00004  * 
00005  * This package is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License
00007  * found in the file COPYING that should have accompanied this file.
00008  * 
00009  * This package is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
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 // Macro to declare XArch derived types
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

Generated on Fri Nov 6 00:18:46 2009 for synergy-plus by  doxygen 1.4.7