NoopCommandWrapper.hh

00001 //********************************************************************
00002 //*** ResourcePool/NoopCommandWrapper.hh
00003 //*** Copyright (c) 2003-2009 by Markus Winand <mws@fatalmind.com>
00004 //*** $Id: NoopCommandWrapper.hh,v 1.6 2009-05-06 17:30:35 mws Exp $
00005 //********************************************************************
00006 /*
00007 This file is part of ResourcePool.
00008 
00009 ResourcePool is free software; you can redistribute it
00010 and/or modify it under the terms of the GNU General Public License
00011 as published by the Free Software Foundation; either version 2 of
00012 the License, or (at your option) any later version.
00013 
00014 ResourcePool is distributed in the hope that it will be
00015 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
00016 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 GNU General Public License for more details.
00018 
00019 You should have received a copy of the GNU General Public License
00020 along with ResourcePool; if not, write to the Free Software
00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00022 02111-1307  USA */
00023 
00024 #ifndef RESOURCEPOOL_NOOPCOMMANDWRAPPER_HH
00025 #define RESOURCEPOOL_NOOPCOMMANDWRAPPER_HH
00026 
00027 #include "mm/gc_ptr.hh"
00028 #include "util/Clone.hh"
00029 
00030 namespace fatalmind {
00031 
00037 template<class CommandType>
00038 class NoopCommandWrapper: public CommandType
00039 {
00040     protected:
00041     private:
00042         gc_ptr<CommandType> m;
00043 
00044         NoopCommandWrapper(const NoopCommandWrapper& rho) 
00045         : CommandType(rho)
00046         , m(rho.m)
00047         {
00048 
00049         }
00050     public:
00051         NoopCommandWrapper(const CommandType& a_m) 
00052         : CommandType(a_m)
00053         , m(a_m.template clone<CommandType>())
00054         {
00055         };
00056         virtual ~NoopCommandWrapper() {
00057         }
00058 
00059         virtual void execute(typename CommandType::pool_type::resource_t& r) {
00060             // a real noop does not execute m :)
00061         }
00062 
00063         const CommandType& getCommandRef() const {
00064             return *m.get();
00065         }
00066 
00067         virtual void outputoperator(std::ostream& s) const {
00068             s << "NoopCommandWrapper[" << (*m) << ']';
00069         }
00070     protected:
00071         virtual Clone* DoClone() const {
00072             return new NoopCommandWrapper(*this);
00073         }
00074 
00075 }; // class NoopCommandWrapper
00076 
00077 } // namespace fatalmind
00078 #endif

Generated on Mon Nov 9 16:21:24 2009 for ResourcePool by  doxygen 1.5.3