8 #ifndef __dynamic_graph_signal_helper_H__
9 #define __dynamic_graph_signal_helper_H__
14 #include <dynamic-graph/entity.h>
15 #include <dynamic-graph/linear-algebra.h>
16 #include <dynamic-graph/signal-ptr.h>
17 #include <dynamic-graph/signal-time-dependent.h>
20 #define SIGNAL_OUT_FUNCTION_NAME(name) name##SOUT_function
22 #define DECLARE_SIGNAL(name, IO, type) \
23 ::dynamicgraph::Signal<type, sigtime_t> m_##name##S##IO
24 #define CONSTRUCT_SIGNAL(name, IO, type) \
25 m_##name##S##IO(getClassName() + "(" + getName() + ")::" + #IO + "put(" + \
26 #type + ")::" + #name)
27 #define BIND_SIGNAL_TO_FUNCTION(name, IO, type) \
28 m_##name##S##IO.setFunction(boost::bind( \
29 &EntityClassName::SIGNAL_OUT_FUNCTION_NAME(name), this, _1, _2));
33 #define DECLARE_SIGNAL_IN(name, type) \
34 ::dynamicgraph::SignalPtr<type, sigtime_t> m_##name##SIN
35 #define CONSTRUCT_SIGNAL_IN(name, type) \
36 m_##name##SIN(NULL, getClassName() + "(" + getName() + ")::input(" + #type + \
41 #define DECLARE_SIGNAL_OUT_FUNCTION(name, type) \
42 type &SIGNAL_OUT_FUNCTION_NAME(name)(type &, sigtime_t)
44 #define DEFINE_SIGNAL_OUT_FUNCTION(name, type) \
45 type &EntityClassName::SIGNAL_OUT_FUNCTION_NAME(name)(type & s, \
48 #define SIGNAL_OUT_FUNCTION(name) name##SOUT_function
50 #define DECLARE_SIGNAL_OUT(name, type) \
52 ::dynamicgraph::SignalTimeDependent<type, sigtime_t> m_##name##SOUT; \
55 type &SIGNAL_OUT_FUNCTION(name)(type &, sigtime_t)
57 #define CONSTRUCT_SIGNAL_OUT(name, type, dep) \
59 boost::bind(&EntityClassName::name##SOUT_function, this, _1, _2), dep, \
60 getClassName() + "(" + getName() + ")::output(" + #type + ")::" + #name)
63 #define SIGNAL_INNER_FUNCTION_NAME(name) name##SINNER_function
65 #define DECLARE_SIGNAL_INNER_FUNCTION(name, type) \
66 type &SIGNAL_INNER_FUNCTION_NAME(name)(type &, sigtime_t)
68 #define DEFINE_SIGNAL_INNER_FUNCTION(name, type) \
69 type &EntityClassName::SIGNAL_INNER_FUNCTION_NAME(name)(type & s, \
72 #define DECLARE_SIGNAL_INNER(name, type) \
74 ::dynamicgraph::SignalTimeDependent<type, sigtime_t> m_##name##SINNER; \
77 DECLARE_SIGNAL_INNER_FUNCTION(name, type)
79 #define CONSTRUCT_SIGNAL_INNER(name, type, dep) \
81 boost::bind(&EntityClassName::name##SINNER_function, this, _1, _2), dep, \
82 getClassName() + "(" + getName() + ")::inner(" + #type + ")::" + #name)