4 #ifndef DGPY_SIGNAL_WRAPPER 5 #define DGPY_SIGNAL_WRAPPER 7 #include <dynamic-graph/entity.h> 9 #include <dynamic-graph/signal.h> 11 #include <boost/bind.hpp> 12 #include <boost/python.hpp> 30 template <
class T,
class Time>
36 static bool checkCallable(pyobject c, std::string& error);
39 : parent_t(name), callable(callable) {
40 typedef boost::function2<T&, T&, Time> function_t;
48 T&
call(T& value, Time t) {
49 PyGILState_STATE gstate;
50 gstate = PyGILState_Ensure();
51 if (PyGILState_GetThisThreadState() == NULL) {
52 dgDEBUG(10) <<
"python thread not initialized" << std::endl;
54 pyobject obj = callable(t);
55 value = boost::python::extract<T>(obj);
56 PyGILState_Release(gstate);
SignalWrapper(std::string name, pyobject callable)
Signal< T, Time > parent_t
void rmSignal(const std::string &name)
DYNAMIC_GRAPH_ENTITY_DECL()
boost::python::object pyobject
Entity(const std::string &name)
void signalRegistration(const SignalArray< int > &signals)
T & call(T &value, Time t)