CommandDS.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 #ifndef ORO_TASK_COMMAND_DS_HPP
00040 #define ORO_TASK_COMMAND_DS_HPP
00041
00042 #include <boost/function.hpp>
00043 #include <string>
00044 #include "CommandProcessor.hpp"
00045 #include "BindStorage.hpp"
00046 #include "UnMember.hpp"
00047
00048 namespace RTT
00049 {
00053 template<class CommandT>
00054 class CommandDS
00055 : private detail::BindStorage<CommandT>
00056 {
00057 protected:
00058 std::string mname;
00059
00060 CommandProcessor* mcp;
00061
00062 bool minvert;
00063 public:
00064 typedef CommandT Signature;
00065
00075 template<class CommandF, class ConditionF>
00076 CommandDS(std::string name, CommandF com, ConditionF con, CommandProcessor* commandp, bool invert = false)
00077 : mname(name),
00078 mcp( commandp ),
00079 minvert(invert)
00080 {
00081 this->setup(boost::function<CommandT>(com), boost::function<CommandT>(con) );
00082 }
00083
00084 boost::function<CommandT> getCommandFunction() const {
00085 return this->command();
00086 }
00087
00088 boost::function<CommandT> getConditionFunction() const {
00089 return this->condition();
00090 }
00091
00097 bool isInverted() const {
00098 return minvert;
00099 }
00100
00107 CommandProcessor* getCommandProcessor() const {
00108 return mcp;
00109 }
00110
00116 const std::string& getName() const {
00117 return mname;
00118 }
00119
00120 };
00121
00122 template<class ComF, class ConF>
00123 CommandDS<typename detail::ArgMember<ComF>::type > command_ds(std::string name, ComF command, ConF condition, CommandProcessor* cp, bool invert = false) {
00124 return CommandDS<typename detail::ArgMember<ComF>::type >(name, command, condition, cp, invert);
00125 }
00126
00127
00128 }
00129 #endif