signal.hh
Go to the documentation of this file.
1 // Copyright 2020, Joseph Mirabel, LAAS-CNRS.
2 
3 #include <sstream>
4 
5 #include <boost/python.hpp>
6 
7 #include <dynamic-graph/signal-base.h>
8 #include <dynamic-graph/signal-ptr.h>
9 #include <dynamic-graph/signal-time-dependent.h>
10 #include <dynamic-graph/signal.h>
11 
13 
14 namespace dynamicgraph {
15 namespace python {
16 
17 template <typename T, typename Time>
18 auto exposeSignal(const std::string& name) {
19  namespace bp = boost::python;
20 
21  typedef Signal<T, Time> S_t;
22  bp::class_<S_t, bp::bases<SignalBase<Time> >, boost::noncopyable> obj(
23  name.c_str(), bp::init<std::string>());
24  obj.add_property(
25  "value",
26  bp::make_function(&S_t::accessCopy,
27  bp::return_value_policy<bp::copy_const_reference>()),
28  &S_t::setConstant, // TODO check the setter
29  "the signal value.\n"
30  "warning: for Eigen objects, sig.value[0] = 1. may not work).");
31  return obj;
32 }
33 
34 template <typename T, typename Time>
35 auto exposeSignalWrapper(const std::string& name) {
36  namespace bp = boost::python;
37 
38  typedef SignalWrapper<T, Time> S_t;
39  bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
40  name.c_str(), bp::no_init);
41  return obj;
42 }
43 
44 template <typename T, typename Time>
45 auto exposeSignalPtr(const std::string& name) {
46  namespace bp = boost::python;
47 
48  typedef SignalPtr<T, Time> S_t;
49  bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
50  name.c_str(), bp::no_init);
51  return obj;
52 }
53 
54 template <typename T, typename Time>
55 auto exposeSignalTimeDependent(const std::string& name) {
56  namespace bp = boost::python;
57 
58  typedef SignalTimeDependent<T, Time> S_t;
59  bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
60  name.c_str(), bp::no_init);
61  return obj;
62 }
63 
64 template <typename T, typename Time>
65 void exposeSignalsOfType(const std::string& name) {
66  exposeSignal<T, Time>("Signal" + name);
67  exposeSignalPtr<T, Time>("SignalPtr" + name);
68  exposeSignalWrapper<T, Time>("SignalWrapper" + name);
69  exposeSignalTimeDependent<T, Time>("SignalTimeDependent" + name);
70 }
71 
72 } // namespace python
73 } // namespace dynamicgraph
dynamicgraph::python::exposeSignalWrapper
auto exposeSignalWrapper(const std::string &name)
Definition: signal.hh:35
dynamicgraph::python::SignalWrapper
Definition: signal-wrapper.hh:29
dynamicgraph
Definition: convert-dg-to-py.hh:8
dynamicgraph::python::exposeSignalTimeDependent
auto exposeSignalTimeDependent(const std::string &name)
Definition: signal.hh:55
signal-wrapper.hh
dynamicgraph::python::exposeSignalPtr
auto exposeSignalPtr(const std::string &name)
Definition: signal.hh:45
dynamicgraph::python::exposeSignal
auto exposeSignal(const std::string &name)
Definition: signal.hh:18
dynamicgraph::python::exposeSignalsOfType
void exposeSignalsOfType(const std::string &name)
Definition: signal.hh:65