GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/dynamic-graph/command-direct-setter.h Lines: 12 12 100.0 %
Date: 2023-03-15 12:04:10 Branches: 9 18 50.0 %

Line Branch Exec Source
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
4
  DirectSetter(E &entity, T *ptr, const std::string &docString)
30
      : Command(entity, boost::assign::list_of(ValueHelper<T>::TypeID),
31
                docString),
32

4
        T_ptr(ptr) {}
33
34
 protected:
35
1
  virtual Value doExecute() {
36
1
    const std::vector<Value> &values = getParameterValues();
37
1
    T val = values[0].value();
38
1
    (*T_ptr) = val;
39
1
    return Value();  // void
40
  }
41
42
 private:
43
  T *T_ptr;
44
};
45
46
template <class E, typename T>
47
3
DirectSetter<E, T> *makeDirectSetter(E &entity, T *ptr,
48
                                     const std::string &docString) {
49
3
  return new DirectSetter<E, T>(entity, ptr, docString);
50
}
51
52
4
inline std::string docDirectSetter(const std::string &name,
53
                                   const std::string &type) {
54


8
  return std::string("\nSet the ") + name + ".\n\nInput:\n - a " + type +
55
8
         ".\nVoid return.\n\n";
56
}
57
58
}  // namespace command
59
}  // namespace dynamicgraph
60
61
#endif  // __dg_command_direct_setter_h__