CommandComposite.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "CommandInterface.hpp"
00040 #include <vector>
00041
00042 namespace RTT
00043 {
00048 class RTT_API CommandComposite
00049 : public CommandInterface
00050 {
00051 public:
00052 CommandComposite() {}
00053
00054 CommandComposite(std::vector<CommandInterface*> cv )
00055 : vect( cv )
00056 {}
00057
00061 CommandComposite( const CommandComposite& orig )
00062 : CommandInterface()
00063 {
00064 for (std::vector<CommandInterface*>::const_iterator it=orig.vect.begin();it!=orig.vect.end();it++)
00065 this->add( (*it)->clone() );
00066 }
00067
00068 virtual ~CommandComposite() {
00069 for (std::vector<CommandInterface*>::iterator it=vect.begin();it!=vect.end();it++) {
00070 CommandInterface * cif=*it;
00071 delete cif;
00072 }
00073 }
00074
00079 virtual bool execute() {
00080 for (std::vector<CommandInterface*>::iterator it=vect.begin();it!=vect.end();it++) {
00081 if ( !(*it)->execute() )
00082 return false;
00083 }
00084 return true;
00085 };
00086
00087 void readArguments() {
00088 for (std::vector<CommandInterface*>::iterator it=vect.begin();it!=vect.end();it++)
00089 (*it)->readArguments();
00090 }
00091
00092 bool valid() const {
00093
00094 bool v = true;
00095 for (std::vector<CommandInterface*>::const_iterator it=vect.begin();it!=vect.end();it++)
00096 v = v && (*it)->valid();
00097 return v;
00098 }
00099
00104 virtual void add(CommandInterface * com) {
00105 vect.push_back(com);
00106 };
00107
00108 virtual CommandInterface* clone() const
00109 {
00110 return new CommandComposite( *this );
00111 }
00112
00113 virtual CommandInterface* copy( std::map<const DataSourceBase*, DataSourceBase*>& alreadyCloned ) const
00114 {
00115 CommandComposite* res = new CommandComposite();
00116 for (std::vector<CommandInterface*>::const_iterator it=vect.begin();it!=vect.end();it++)
00117 res->add( (*it)->copy(alreadyCloned) );
00118 return res;
00119 }
00120
00121 private:
00122 std::vector<CommandInterface*> vect;
00123 };
00124
00125 }