dynamic-graph  4.4.3
Dynamic graph library
command-direct-setter.h
1 //
2 // Copyright 2010 CNRS
3 //
4 // Author: Nicolas Mansard
5 //
6 
7 #ifndef __dg_command_direct_setter_h__
8 #define __dg_command_direct_setter_h__
9 
10 /* Define a setter command directly on the attribute (no need to pass by
11  * an explicit function). A typical use is given here:
12  * addCommand("setSize",
13  * makeDirectSetter(*this,&_dimension,
14  * docDirectSetter("dimension","int")));
15  *
16  */
17 
18 #include <boost/assign/list_of.hpp>
19 
20 #include "dynamic-graph/command.h"
21 
22 /* --- SETTER --------------------------------------------------------- */
23 namespace dynamicgraph {
24 namespace command {
25 
26 template <class E, typename T>
27 class DirectSetter : public Command {
28  public:
29  DirectSetter(E &entity, T *ptr, const std::string &docString)
30  : Command(entity, boost::assign::list_of(ValueHelper<T>::TypeID),
31  docString),
32  T_ptr(ptr) {}
33 
34  protected:
35  virtual Value doExecute() {
36  const std::vector<Value> &values = getParameterValues();
37  T val = values[0].value();
38  (*T_ptr) = val;
39  return Value(); // void
40  }
41 
42  private:
43  T *T_ptr;
44 };
45 
46 template <class E, typename T>
47 DirectSetter<E, T> *makeDirectSetter(E &entity, T *ptr,
48  const std::string &docString) {
49  return new DirectSetter<E, T>(entity, ptr, docString);
50 }
51 
52 inline std::string docDirectSetter(const std::string &name,
53  const std::string &type) {
54  return std::string("\nSet the ") + name + ".\n\nInput:\n - a " + type +
55  ".\nVoid return.\n\n";
56 }
57 
58 } // namespace command
59 } // namespace dynamicgraph
60 
61 #endif // __dg_command_direct_setter_h__
const std::vector< Value > & getParameterValues() const
Get parameter values.
Command(Entity &entity, const std::vector< Value::Type > &valueTypes, const std::string &docstring)
virtual Value doExecute()
Specific action performed by the command.
This class implements a variant design pattern to handle basic types in Command.
Definition: value.h:51