4 #ifndef __SOT_SWITCH_H__
5 #define __SOT_SWITCH_H__
7 #include <dynamic-graph/command-bind.h>
8 #include <dynamic-graph/command-getter.h>
9 #include <dynamic-graph/entity.h>
10 #include <dynamic-graph/pool.h>
11 #include <dynamic-graph/signal-ptr.h>
12 #include <dynamic-graph/signal-time-dependent.h>
13 #include <dynamic-graph/signal.h>
21 template <
typename Value,
typename Time =
int>
23 DYNAMIC_GRAPH_ENTITY_DECL();
29 :
Base(name, CLASS_NAME),
30 selectionSIN(NULL,
"Switch(" + name +
")::input(int)::selection"),
31 boolSelectionSIN(NULL,
32 "Switch(" + name +
")::input(bool)::boolSelection") {
33 this->signalRegistration(selectionSIN << boolSelectionSIN);
34 this->SOUT.setFunction(boost::bind(&Switch::signal,
this, _1, _2));
35 this->SOUT.addDependency(selectionSIN);
36 this->SOUT.addDependency(boolSelectionSIN);
38 using command::makeCommandVoid1;
39 std::string docstring =
41 " Set number of input signals\n";
44 makeCommandVoid1(*(
Base *)
this, &Base::setSignalNumber, docstring));
48 " Get number of input signals\n";
49 this->addCommand(
"getSignalNumber",
50 new command::Getter<Base, int>(
51 *
this, &Base::getSignalNumber, docstring));
58 return "Dynamically select a given signal based on a input information.\n";
65 Value &signal(Value &ret,
const Time &time) {
67 if (selectionSIN.isPlugged()) {
68 sel = selectionSIN(time);
70 const bool &b = boolSelectionSIN(time);
73 if (sel < 0 || sel >=
int(this->signalsIN.size()))
74 throw std::runtime_error(
"Signal selection is out of range.");
76 ret = this->signalsIN[sel]->access(time);
Switch.
Definition: switch.hh:22
VariadicAbstract< Value, Value, Time > Base
Definition: switch.hh:26
Switch(const std::string &name)
Definition: switch.hh:28
SignalPtr< int, Time > selectionSIN
Definition: switch.hh:61
SignalPtr< bool, Time > boolSelectionSIN
Definition: switch.hh:62
~Switch()
Definition: switch.hh:54
virtual std::string getDocString() const
Header documentation of the python class.
Definition: switch.hh:57
Definition: variadic-op.hh:39
#define SOT_CORE_DLLAPI
Definition: config.hh:64
Definition: abstract-sot-external-interface.hh:17