joint-unary-visitor.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2023 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_multibody_visitor_joint_unary_visitor_hpp__
6 #define __pinocchio_multibody_visitor_joint_unary_visitor_hpp__
7 
8 #include <boost/variant/apply_visitor.hpp>
9 #include <boost/variant/get.hpp>
10 
13 
14 namespace pinocchio
15 {
16  namespace fusion
17  {
18 
24  template<typename JointVisitorDerived, typename ReturnType = void>
26  {
27 
28  template<
29  typename Scalar,
30  int Options,
31  template<typename, int>
32  class JointCollectionTpl,
33  typename ArgsTmp>
34  static ReturnType run(
37  ArgsTmp args)
38  {
39  InternalVisitorModelAndData<JointModelTpl<Scalar, Options, JointCollectionTpl>, ArgsTmp>
40  visitor(jdata, args);
41  return boost::apply_visitor(visitor, jmodel);
42  }
43 
44  template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
45  static ReturnType run(
48  {
49  InternalVisitorModelAndData<JointModelTpl<Scalar, Options, JointCollectionTpl>, NoArg>
50  visitor(jdata);
51  return boost::apply_visitor(visitor, jmodel);
52  }
53 
54  template<typename JointModelDerived, typename ArgsTmp>
55  static ReturnType run(
56  const JointModelBase<JointModelDerived> & jmodel,
58  ArgsTmp args)
59  {
60  InternalVisitorModelAndData<JointModelDerived, ArgsTmp> visitor(jdata, args);
61  return visitor(jmodel.derived());
62  }
63 
64  template<typename JointModelDerived>
65  static ReturnType run(
66  const JointModelBase<JointModelDerived> & jmodel,
68  {
69  InternalVisitorModelAndData<JointModelDerived, NoArg> visitor(jdata);
70  return visitor(jmodel.derived());
71  }
72 
73  template<
74  typename Scalar,
75  int Options,
76  template<typename, int>
77  class JointCollectionTpl,
78  typename ArgsTmp>
79  static ReturnType
81  {
82  InternalVisitorModel<ArgsTmp> visitor(args);
83  return boost::apply_visitor(visitor, jmodel);
84  }
85 
86  template<
87  typename Scalar,
88  int Options,
89  template<typename, int>
90  class JointCollectionTpl,
91  typename ArgsTmp>
92  static ReturnType
94  {
95  InternalVisitorModel<ArgsTmp> visitor(args);
96  return boost::apply_visitor(visitor, jdata);
97  }
98 
99  template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
100  static ReturnType run(const JointModelTpl<Scalar, Options, JointCollectionTpl> & jmodel)
101  {
102  InternalVisitorModel<NoArg> visitor;
103  return boost::apply_visitor(visitor, jmodel);
104  }
105 
106  template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
108  {
109  InternalVisitorModel<NoArg> visitor;
110  return boost::apply_visitor(visitor, jdata);
111  }
112 
113  template<typename JointModelDerived, typename ArgsTmp>
114  static ReturnType run(const JointModelBase<JointModelDerived> & jmodel, ArgsTmp args)
115  {
116  InternalVisitorModel<ArgsTmp> visitor(args);
117  return visitor(jmodel.derived());
118  }
119 
120  template<typename JointDataDerived, typename ArgsTmp>
121  static ReturnType run(const JointDataBase<JointDataDerived> & jdata, ArgsTmp args)
122  {
123  InternalVisitorModel<ArgsTmp> visitor(args);
124  return visitor(jdata.derived());
125  }
126 
127  template<typename JointModelDerived>
128  static ReturnType run(const JointModelBase<JointModelDerived> & jmodel)
129  {
130  InternalVisitorModel<NoArg> visitor;
131  return visitor(jmodel.derived());
132  }
133 
134  template<typename JointDataDerived>
135  static ReturnType run(const JointDataBase<JointDataDerived> & jdata)
136  {
137  InternalVisitorModel<NoArg> visitor;
138  return visitor(jdata.derived());
139  }
140 
141  private:
142  template<typename JointModel, typename ArgType>
143  struct InternalVisitorModelAndData : public boost::static_visitor<ReturnType>
144  {
145  typedef typename JointModel::JointDataDerived JointData;
146 
148  : jdata(jdata)
149  , args(args)
150  {
151  }
152 
153  template<typename JointModelDerived>
154  ReturnType operator()(const JointModelBase<JointModelDerived> & jmodel) const
155  {
156  return bf::invoke(
157  &JointVisitorDerived::template algo<JointModelDerived>,
158  bf::append(
159  boost::ref(jmodel.derived()),
160  boost::ref(
162  args));
163  }
164 
165  ReturnType operator()(const JointModelVoid)
166  {
167  return;
168  }
169 
171  ArgType args;
172  };
173 
174  template<typename JointModel>
176  : public boost::static_visitor<ReturnType>
177  {
178  typedef typename JointModel::JointDataDerived JointData;
179 
181  : jdata(jdata)
182  {
183  }
184 
185  template<typename JointModelDerived>
186  ReturnType operator()(const JointModelBase<JointModelDerived> & jmodel) const
187  {
188  return bf::invoke(
189  &JointVisitorDerived::template algo<JointModelDerived>,
190  bf::make_vector(
191  boost::ref(jmodel.derived()),
192  boost::ref(
194  }
195 
197  };
198 
199  template<typename ArgType, typename Dummy = void>
200  struct InternalVisitorModel : public boost::static_visitor<ReturnType>
201  {
203  : args(args)
204  {
205  }
206 
207  template<typename JointModelDerived>
208  ReturnType operator()(const JointModelBase<JointModelDerived> & jmodel) const
209  {
210  return bf::invoke(
211  &JointVisitorDerived::template algo<JointModelDerived>,
212  bf::append(boost::ref(jmodel.derived()), args));
213  }
214 
215  template<typename JointDataDerived>
216  ReturnType operator()(const JointDataBase<JointDataDerived> & jdata) const
217  {
218  return bf::invoke(
219  &JointVisitorDerived::template algo<JointDataDerived>,
220  bf::append(boost::ref(jdata.derived()), args));
221  }
222 
223  ReturnType operator()(const JointModelVoid)
224  {
225  return;
226  }
227 
228  ArgType args;
229  };
230 
231  template<typename Dummy>
232  struct InternalVisitorModel<NoArg, Dummy> : public boost::static_visitor<ReturnType>
233  {
235  {
236  }
237 
238  template<typename JointModelDerived>
239  ReturnType operator()(const JointModelBase<JointModelDerived> & jmodel) const
240  {
241  return JointVisitorDerived::template algo<JointModelDerived>(jmodel.derived());
242  }
243 
244  template<typename JointDataDerived>
245  ReturnType operator()(const JointDataBase<JointDataDerived> & jdata) const
246  {
247  return JointVisitorDerived::template algo<JointDataDerived>(jdata.derived());
248  }
249  };
250  }; // struct JointUnaryVisitorBase
251 
252  } // namespace fusion
253 } // namespace pinocchio
254 
255 #endif // ifndef __pinocchio_multibody_visitor_joint_unary_visitor_hpp__
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel::operator()
ReturnType operator()(const JointModelBase< JointModelDerived > &jmodel) const
Definition: joint-unary-visitor.hpp:208
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::InternalVisitorModelAndData
InternalVisitorModelAndData(JointData &jdata, ArgType args)
Definition: joint-unary-visitor.hpp:147
pinocchio::JointModelBase
Definition: joint-model-base.hpp:75
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel, ArgsTmp args)
Definition: joint-unary-visitor.hpp:80
pinocchio::Options
Options
Definition: joint-configuration.hpp:1116
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel
Definition: joint-unary-visitor.hpp:200
pinocchio::JointDataBase
Definition: joint-data-base.hpp:161
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel< NoArg, Dummy >::operator()
ReturnType operator()(const JointModelBase< JointModelDerived > &jmodel) const
Definition: joint-unary-visitor.hpp:239
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel, JointDataTpl< Scalar, Options, JointCollectionTpl > &jdata)
Definition: joint-unary-visitor.hpp:45
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::args
ArgType args
Definition: joint-unary-visitor.hpp:171
pinocchio::python::Scalar
context::Scalar Scalar
Definition: admm-solver.cpp:29
pinocchio::JointDataTpl
Definition: multibody/joint/fwd.hpp:162
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointDataBase< JointDataDerived > &jdata, ArgsTmp args)
Definition: joint-unary-visitor.hpp:121
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel::operator()
ReturnType operator()(const JointModelVoid)
Definition: joint-unary-visitor.hpp:223
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel< NoArg, Dummy >::operator()
ReturnType operator()(const JointDataBase< JointDataDerived > &jdata) const
Definition: joint-unary-visitor.hpp:245
pinocchio::JointDataBase::derived
Derived & derived()
Definition: joint-data-base.hpp:168
pinocchio::fusion::JointUnaryVisitorBase
Base structure for Unary visitation of a JointModel. This structure provides runners to call the righ...
Definition: joint-unary-visitor.hpp:25
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::operator()
ReturnType operator()(const JointModelBase< JointModelDerived > &jmodel) const
Definition: joint-unary-visitor.hpp:154
args
args
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel, JointDataTpl< Scalar, Options, JointCollectionTpl > &jdata, ArgsTmp args)
Definition: joint-unary-visitor.hpp:34
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelBase< JointModelDerived > &jmodel, ArgsTmp args)
Definition: joint-unary-visitor.hpp:114
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData< JointModel, NoArg >::operator()
ReturnType operator()(const JointModelBase< JointModelDerived > &jmodel) const
Definition: joint-unary-visitor.hpp:186
pinocchio::JointModelVoid
Definition: multibody/joint/fwd.hpp:25
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel::operator()
ReturnType operator()(const JointDataBase< JointDataDerived > &jdata) const
Definition: joint-unary-visitor.hpp:216
pinocchio::JointModelTpl
Definition: multibody/joint/fwd.hpp:155
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointDataBase< JointDataDerived > &jdata)
Definition: joint-unary-visitor.hpp:135
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Definition: joint-unary-visitor.hpp:100
joint-base.hpp
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelBase< JointModelDerived > &jmodel)
Definition: joint-unary-visitor.hpp:128
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointDataTpl< Scalar, Options, JointCollectionTpl > &jdata, ArgsTmp args)
Definition: joint-unary-visitor.hpp:93
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::jdata
JointData & jdata
Definition: joint-unary-visitor.hpp:170
fusion.hpp
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel::InternalVisitorModel
InternalVisitorModel(ArgType args)
Definition: joint-unary-visitor.hpp:202
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelBase< JointModelDerived > &jmodel, typename JointModelBase< JointModelDerived >::JointDataDerived &jdata)
Definition: joint-unary-visitor.hpp:65
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointDataTpl< Scalar, Options, JointCollectionTpl > &jdata)
Definition: joint-unary-visitor.hpp:107
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::operator()
ReturnType operator()(const JointModelVoid)
Definition: joint-unary-visitor.hpp:165
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData
Definition: joint-unary-visitor.hpp:143
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel::args
ArgType args
Definition: joint-unary-visitor.hpp:228
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData< JointModel, NoArg >::InternalVisitorModelAndData
InternalVisitorModelAndData(JointData &jdata)
Definition: joint-unary-visitor.hpp:180
boost::fusion::append
result_of::push_front< V const, T >::type append(T const &t, V const &v)
Append the element T at the front of boost fusion vector V.
Definition: fusion.hpp:32
pinocchio::fusion::NoArg
boost::blank NoArg
Definition: fusion.hpp:20
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModel< NoArg, Dummy >::InternalVisitorModel
InternalVisitorModel()
Definition: joint-unary-visitor.hpp:234
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData::JointData
JointModel::JointDataDerived JointData
Definition: joint-unary-visitor.hpp:145
pinocchio::fusion::JointUnaryVisitorBase::run
static ReturnType run(const JointModelBase< JointModelDerived > &jmodel, typename JointModelBase< JointModelDerived >::JointDataDerived &jdata, ArgsTmp args)
Definition: joint-unary-visitor.hpp:55
pinocchio::JointModelBase::derived
JointModelDerived & derived()
Definition: joint-model-base.hpp:82
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData< JointModel, NoArg >::jdata
JointData & jdata
Definition: joint-unary-visitor.hpp:196
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27
pinocchio::fusion::JointUnaryVisitorBase::InternalVisitorModelAndData< JointModel, NoArg >::JointData
JointModel::JointDataDerived JointData
Definition: joint-unary-visitor.hpp:178


pinocchio
Author(s):
autogenerated on Sat Jun 22 2024 02:41:48