Go to the documentation of this file.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 "../base/ActionInterface.hpp"
00040 #include <vector>
00041 #include "rtt-scripting-config.h"
00042
00043 namespace RTT
00044 { namespace scripting {
00045
00050 class RTT_SCRIPTING_API CommandComposite
00051 : public base::ActionInterface
00052 {
00053 public:
00054 CommandComposite() {}
00055
00056 CommandComposite(std::vector<base::ActionInterface*> cv )
00057 : vect( cv )
00058 {}
00059
00063 CommandComposite( const CommandComposite& orig )
00064 : base::ActionInterface()
00065 {
00066 for (std::vector<base::ActionInterface*>::const_iterator it=orig.vect.begin();it!=orig.vect.end();it++)
00067 this->add( (*it)->clone() );
00068 }
00069
00070 virtual ~CommandComposite() {
00071 for (std::vector<base::ActionInterface*>::iterator it=vect.begin();it!=vect.end();it++) {
00072 base::ActionInterface * cif=*it;
00073 delete cif;
00074 }
00075 }
00076
00081 virtual bool execute() {
00082 for (std::vector<base::ActionInterface*>::iterator it=vect.begin();it!=vect.end();it++) {
00083 if ( !(*it)->execute() )
00084 return false;
00085 }
00086 return true;
00087 };
00088
00089 void readArguments() {
00090 for (std::vector<base::ActionInterface*>::iterator it=vect.begin();it!=vect.end();it++)
00091 (*it)->readArguments();
00092 }
00093
00094 bool valid() const {
00095
00096 bool v = true;
00097 for (std::vector<base::ActionInterface*>::const_iterator it=vect.begin();it!=vect.end();it++)
00098 v = v && (*it)->valid();
00099 return v;
00100 }
00101
00106 virtual void add(base::ActionInterface * com) {
00107 vect.push_back(com);
00108 };
00109
00110 virtual base::ActionInterface* clone() const
00111 {
00112 return new CommandComposite( *this );
00113 }
00114
00115 virtual base::ActionInterface* copy( std::map<const base::DataSourceBase*, base::DataSourceBase*>& alreadyCloned ) const
00116 {
00117 CommandComposite* res = new CommandComposite();
00118 for (std::vector<base::ActionInterface*>::const_iterator it=vect.begin();it!=vect.end();it++)
00119 res->add( (*it)->copy(alreadyCloned) );
00120 return res;
00121 }
00122
00123 private:
00124 std::vector<base::ActionInterface*> vect;
00125 };
00126
00127 }}