GCC Code Coverage Report


Directory: ./
File: include/pinocchio/multibody/joint/joint-data-base.hpp
Date: 2024-08-27 18:20:05
Exec Total Coverage
Lines: 36 71 50.7%
Branches: 0 131 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2015-2020 CNRS INRIA
3 // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5
6 #ifndef __pinocchio_multibody_joint_data_base_hpp__
7 #define __pinocchio_multibody_joint_data_base_hpp__
8
9 #include "pinocchio/multibody/joint/joint-base.hpp"
10 #include "pinocchio/multibody/joint/joint-model-base.hpp"
11
12 #define PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, TYPENAME) \
13 PINOCCHIO_JOINT_MODEL_TYPEDEF_GENERIC(Joint, TYPENAME); \
14 typedef TYPENAME traits<Joint>::ConfigVectorTypeConstRef ConfigVectorTypeConstRef; \
15 typedef TYPENAME traits<Joint>::ConfigVectorTypeRef ConfigVectorTypeRef; \
16 typedef TYPENAME traits<Joint>::TangentVectorTypeConstRef TangentVectorTypeConstRef; \
17 typedef TYPENAME traits<Joint>::TangentVectorTypeRef TangentVectorTypeRef; \
18 typedef TYPENAME traits<Joint>::ConstraintTypeConstRef ConstraintTypeConstRef; \
19 typedef TYPENAME traits<Joint>::ConstraintTypeRef ConstraintTypeRef; \
20 typedef TYPENAME traits<Joint>::TansformTypeConstRef TansformTypeConstRef; \
21 typedef TYPENAME traits<Joint>::TansformTypeRef TansformTypeRef; \
22 typedef TYPENAME traits<Joint>::MotionTypeConstRef MotionTypeConstRef; \
23 typedef TYPENAME traits<Joint>::MotionTypeRef MotionTypeRef; \
24 typedef TYPENAME traits<Joint>::BiasTypeConstRef BiasTypeConstRef; \
25 typedef TYPENAME traits<Joint>::BiasTypeRef BiasTypeRef; \
26 typedef TYPENAME traits<Joint>::UTypeConstRef UTypeConstRef; \
27 typedef TYPENAME traits<Joint>::UTypeRef UTypeRef; \
28 typedef TYPENAME traits<Joint>::DTypeConstRef DTypeConstRef; \
29 typedef TYPENAME traits<Joint>::DTypeRef DTypeRef; \
30 typedef TYPENAME traits<Joint>::UDTypeConstRef UDTypeConstRef; \
31 typedef TYPENAME traits<Joint>::UDTypeRef UDTypeRef
32
33 #ifdef __clang__
34
35 #define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) \
36 PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, PINOCCHIO_EMPTY_ARG)
37 #define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \
38 PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename)
39
40 #elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4) && (__GNUC_PATCHLEVEL__ == 2)
41
42 #define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) \
43 PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, PINOCCHIO_EMPTY_ARG)
44 #define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \
45 PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename)
46
47 #else
48
49 #define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename)
50 #define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \
51 PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename)
52
53 #endif
54
55 #define PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR \
56 ConfigVectorTypeConstRef joint_q_accessor() const \
57 { \
58 return joint_q; \
59 } \
60 ConfigVectorTypeRef joint_q_accessor() \
61 { \
62 return joint_q; \
63 } \
64 TangentVectorTypeConstRef joint_v_accessor() const \
65 { \
66 return joint_v; \
67 } \
68 TangentVectorTypeRef joint_v_accessor() \
69 { \
70 return joint_v; \
71 } \
72 ConstraintTypeConstRef S_accessor() const \
73 { \
74 return S; \
75 } \
76 ConstraintTypeRef S_accessor() \
77 { \
78 return S; \
79 } \
80 TansformTypeConstRef M_accessor() const \
81 { \
82 return M; \
83 } \
84 TansformTypeRef M_accessor() \
85 { \
86 return M; \
87 } \
88 MotionTypeConstRef v_accessor() const \
89 { \
90 return v; \
91 } \
92 MotionTypeRef v_accessor() \
93 { \
94 return v; \
95 } \
96 BiasTypeConstRef c_accessor() const \
97 { \
98 return c; \
99 } \
100 BiasTypeRef c_accessor() \
101 { \
102 return c; \
103 } \
104 UTypeConstRef U_accessor() const \
105 { \
106 return U; \
107 } \
108 UTypeRef U_accessor() \
109 { \
110 return U; \
111 } \
112 DTypeConstRef Dinv_accessor() const \
113 { \
114 return Dinv; \
115 } \
116 DTypeRef Dinv_accessor() \
117 { \
118 return Dinv; \
119 } \
120 UDTypeConstRef UDinv_accessor() const \
121 { \
122 return UDinv; \
123 } \
124 UDTypeRef UDinv_accessor() \
125 { \
126 return UDinv; \
127 } \
128 DTypeConstRef StU_accessor() const \
129 { \
130 return StU; \
131 } \
132 DTypeRef StU_accessor() \
133 { \
134 return StU; \
135 }
136
137 #define PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE \
138 typedef const ConfigVector_t & ConfigVectorTypeConstRef; \
139 typedef ConfigVector_t & ConfigVectorTypeRef; \
140 typedef const TangentVector_t & TangentVectorTypeConstRef; \
141 typedef TangentVector_t & TangentVectorTypeRef; \
142 typedef const Constraint_t & ConstraintTypeConstRef; \
143 typedef Constraint_t & ConstraintTypeRef; \
144 typedef const Transformation_t & TansformTypeConstRef; \
145 typedef Transformation_t & TansformTypeRef; \
146 typedef const Motion_t & MotionTypeConstRef; \
147 typedef Motion_t & MotionTypeRef; \
148 typedef const Bias_t & BiasTypeConstRef; \
149 typedef Bias_t & BiasTypeRef; \
150 typedef const U_t & UTypeConstRef; \
151 typedef U_t & UTypeRef; \
152 typedef const D_t & DTypeConstRef; \
153 typedef D_t & DTypeRef; \
154 typedef const UD_t & UDTypeConstRef; \
155 typedef UD_t & UDTypeRef;
156
157 namespace pinocchio
158 {
159
160 template<typename Derived>
161 struct JointDataBase : NumericalBase<Derived>
162 {
163 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
164
165 typedef typename traits<Derived>::JointDerived JointDerived;
166 PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(JointDerived);
167
168 2919350 Derived & derived()
169 {
170 2919350 return *static_cast<Derived *>(this);
171 }
172 17000 const Derived & derived() const
173 {
174 34000 return *static_cast<const Derived *>(this);
175 }
176
177 ConfigVectorTypeConstRef joint_q() const
178 {
179 return derived().joint_q_accessor();
180 }
181 ConfigVectorTypeRef joint_q()
182 {
183 return derived().joint_q_accessor();
184 }
185
186 TangentVectorTypeConstRef joint_v() const
187 {
188 return derived().joint_v_accessor();
189 }
190 7222 TangentVectorTypeRef joint_v()
191 {
192 7235 return derived().joint_v_accessor();
193 }
194
195 54 ConstraintTypeConstRef S() const
196 {
197 54 return derived().S_accessor();
198 }
199 181127 ConstraintTypeRef S()
200 {
201 183426 return derived().S_accessor();
202 }
203 27 TansformTypeConstRef M() const
204 {
205 54 return derived().M_accessor();
206 }
207 1126376 TansformTypeRef M()
208 {
209 1126376 return derived().M_accessor();
210 }
211 MotionTypeConstRef v() const
212 {
213 return derived().v_accessor();
214 }
215 275584 MotionTypeRef v()
216 {
217 275584 return derived().v_accessor();
218 }
219 BiasTypeConstRef c() const
220 {
221 return derived().c_accessor();
222 }
223 166766 BiasTypeRef c()
224 {
225 166766 return derived().c_accessor();
226 }
227
228 166 UTypeConstRef U() const
229 {
230 166 return derived().U_accessor();
231 }
232 2083 UTypeRef U()
233 {
234 3046 return derived().U_accessor();
235 }
236 2 DTypeConstRef Dinv() const
237 {
238 4 return derived().Dinv_accessor();
239 }
240 2024 DTypeRef Dinv()
241 {
242 2942 return derived().Dinv_accessor();
243 }
244 2 UDTypeConstRef UDinv() const
245 {
246 4 return derived().UDinv_accessor();
247 }
248 2435 UDTypeRef UDinv()
249 {
250 3760 return derived().UDinv_accessor();
251 }
252 29 DTypeConstRef StU() const
253 {
254 58 return derived().StU_accessor();
255 }
256 342 DTypeRef StU()
257 {
258 1071 return derived().StU_accessor();
259 }
260
261 std::string shortname() const
262 {
263 return derived().shortname();
264 }
265 static std::string classname()
266 {
267 return Derived::classname();
268 }
269
270 void disp(std::ostream & os) const
271 {
272 using namespace std;
273 os << shortname() << endl;
274 }
275
276 friend std::ostream & operator<<(std::ostream & os, const JointDataBase<Derived> & joint)
277 {
278 joint.disp(os);
279 return os;
280 }
281
282 template<typename OtherDerived>
283 bool operator==(const JointDataBase<OtherDerived> & other) const
284 {
285 return derived().isEqual(other.derived());
286 }
287
288 ///  \brief Default operator== implementation
289 bool isEqual(const JointDataBase<Derived> & other) const
290 {
291 return internal::comparison_eq(joint_q(), other.joint_q())
292 && internal::comparison_eq(joint_v(), other.joint_v())
293 && internal::comparison_eq(S(), other.S()) && internal::comparison_eq(M(), other.M())
294 && internal::comparison_eq(v(), other.v()) && internal::comparison_eq(c(), other.c())
295 && internal::comparison_eq(U(), other.U())
296 && internal::comparison_eq(Dinv(), other.Dinv())
297 && internal::comparison_eq(UDinv(), other.UDinv());
298 }
299
300 ///  \brief Default operator== implementation
301 template<typename OtherDerived>
302 bool isEqual(const JointDataBase<OtherDerived> & /*other*/) const
303 {
304 return false;
305 ;
306 }
307
308 bool operator!=(const JointDataBase<Derived> & other) const
309 {
310 return derived().isNotEqual(other.derived());
311 }
312
313 ///  \brief Default operator!= implementation
314 bool isNotEqual(const JointDataBase<Derived> & other) const
315 {
316 return !(internal::comparison_eq(derived(), other.derived()));
317 }
318
319 protected:
320 /// \brief Default constructor: protected.
321 69246 inline JointDataBase()
322 {
323 69246 }
324
325 }; // struct JointDataBase
326
327 } // namespace pinocchio
328
329 #endif // ifndef __pinocchio_multibody_joint_data_base_hpp__
330