00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef RESOURCEPOOL_IGNOREEXCEPTIONCOMMAND_HH
00025 #define RESOURCEPOOL_IGNOREEXCEPTIONCOMMAND_HH
00026
00027 #include <iostream>
00028
00029 #include "mm/gc_ptr.hh"
00030 #include "util/Clone.hh"
00031
00032 namespace fatalmind {
00033
00039
00040
00041
00042 template<class CommandType>
00043 class IgnoreExceptionCommand: public CommandType
00044 {
00045 protected:
00046 private:
00047 gc_ptr<CommandType> m;
00048
00049 IgnoreExceptionCommand(const IgnoreExceptionCommand& rho)
00050 : CommandType(rho)
00051 , m(rho.m)
00052 {
00053 }
00054 public:
00055 IgnoreExceptionCommand(const CommandType& a_m)
00056 : CommandType(a_m)
00057 , m(a_m.template clone<CommandType>())
00058 {
00059 };
00060 virtual ~IgnoreExceptionCommand() {
00061 }
00062
00063 virtual void execute(typename CommandType::pool_type::resource_t& r) {
00064 try {
00065 m->execute(r);
00066 } catch (...) {
00067 }
00068 }
00069
00070 const CommandType& getCommandRef() const {
00071 return *m.get();
00072 }
00073
00074 virtual void outputoperator(std::ostream& s) const {
00075 s << "IgnoreExceptionCommand[" << (*m) << ']';
00076 }
00077
00078 protected:
00079 virtual Clone* DoClone() const {
00080 return new IgnoreExceptionCommand(*this);
00081 }
00082
00083 };
00084
00085 }
00086 #endif