4 #ifndef __SOT_EVENT_H__
5 #define __SOT_EVENT_H__
7 #include <dynamic-graph/command-bind.h>
8 #include <dynamic-graph/command-getter.h>
9 #include <dynamic-graph/command-setter.h>
10 #include <dynamic-graph/entity.h>
11 #include <dynamic-graph/pool.h>
12 #include <dynamic-graph/signal-ptr.h>
13 #include <dynamic-graph/signal-time-dependent.h>
14 #include <dynamic-graph/signal.h>
45 DYNAMIC_GRAPH_ENTITY_DECL();
47 Event(
const std::string &name)
49 checkSOUT(
"Event(" + name +
")::output(bool)::check"),
50 conditionSIN(NULL,
"Event(" + name +
")::input(bool)::condition"),
53 repeatAfterNIterations_(0) {
54 checkSOUT.setFunction(boost::bind(&Event::check,
this, _1, _2));
55 signalRegistration(conditionSIN);
56 signalRegistration(checkSOUT);
58 using command::makeCommandVoid1;
59 std::string docstring =
62 addCommand(
"addSignal",
63 makeCommandVoid1(*
this, &Event::addSignal, docstring));
67 " Get list of signals\n";
68 addCommand(
"list",
new command::Getter<Event, std::string>(
69 *
this, &Event::getSignalsByName, docstring));
73 " Repease event if input signal remains True for a while\n"
74 " Input: number of iterations before repeating output\n."
75 " 0 for no repetition";
76 addCommand(
"repeat",
new command::Setter<Event, int>(*
this, &Event::repeat,
83 virtual std::string getDocString()
const {
84 return "Send an event when the input changes\n\n"
85 " The signal triggered is called whenever the condition is "
89 void addSignal(
const std::string &signal) {
90 std::istringstream iss(signal);
95 std::string getSignalsByName()
const {
96 std::ostringstream oss;
98 for (Triggers_t::const_iterator _sig = triggers.begin();
99 _sig != triggers.end(); ++_sig)
100 oss <<
'\'' << (*_sig)->getName() <<
"\', ";
105 void repeat(
const int &nbIterations) {
106 repeatAfterNIterations_ = nbIterations;
110 typedef SignalBase<int> *Trigger_t;
111 typedef std::vector<Trigger_t> Triggers_t;
113 bool &check(
bool &ret,
const int &time);
115 Signal<bool, int> checkSOUT;
118 SignalPtr<bool, int> conditionSIN;
121 int timeSinceUp_, repeatAfterNIterations_;
125 #endif // __SOT_EVENT_H__