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_BATCHCOMMAND_HH
00025 #define RESOURCEPOOL_BATCHCOMMAND_HH
00026
00027 #include <vector>
00028
00029 #include "mm/gc_ptr.hh"
00030 #include "util/Clone.hh"
00031
00032 namespace fatalmind {
00033
00034
00035
00036
00037
00038
00039
00040
00046 template<class CommandType>
00047 class BatchCommand: public CommandType
00048 {
00049 protected:
00050 typedef gc_ptr<CommandType> member_t;
00051 typedef std::vector<member_t> list_t;
00052 public:
00053 typedef CommandType innercommand_t;
00054 typedef typename list_t::const_iterator const_iterator;
00055 static const int NOT_STARTED;
00056 static const int NO_FURTHER_ERROR;
00057
00084 BatchCommand(bool cont = false);
00085
00086 BatchCommand(const BatchCommand&);
00087 virtual ~BatchCommand() {
00088 }
00089
00100 virtual void add(const CommandType&);
00101 virtual void execute(typename CommandType::pool_type::resource_t&);
00102
00141 int getError();
00147 const_iterator getExecPosition() const;
00148
00154 bool doesContinue() const {
00155 return cont;
00156 }
00157
00162 const_iterator end() const;
00168 const_iterator begin() const;
00173 bool empty() const;
00174
00175 virtual void outputoperator(std::ostream&) const;
00176 protected:
00177 virtual Clone* DoClone() const {
00178 return new BatchCommand(*this);
00179 }
00180
00181 member_t getLast() const {
00182 return list.back();
00183 }
00184
00185 bool wasStarted() const {
00186 return started;
00187 }
00188
00189
00190 private:
00191 list_t list;
00192 const bool cont;
00193 bool started;
00194 protected:
00195 const_iterator exec_pos;
00196 typedef std::vector<int> errors_t;
00197 errors_t errors;
00198 unsigned int error_pos;
00199 };
00200
00201 }
00202 #endif