Directory: | ./ |
---|---|
File: | include/pinocchio/multibody/joint/joint-data-base.hpp |
Date: | 2025-02-12 21:03:38 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 66 | 72 | 91.7% |
Branches: | 70 | 131 | 53.4% |
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 | 3581974 | Derived & derived() | |
169 | { | ||
170 | 3581974 | return *static_cast<Derived *>(this); | |
171 | } | ||
172 | 52142 | const Derived & derived() const | |
173 | { | ||
174 | 94732 | return *static_cast<const Derived *>(this); | |
175 | } | ||
176 | |||
177 | 5808 | ConfigVectorTypeConstRef joint_q() const | |
178 | { | ||
179 | 5808 | return derived().joint_q_accessor(); | |
180 | } | ||
181 | 882 | ConfigVectorTypeRef joint_q() | |
182 | { | ||
183 | 1764 | return derived().joint_q_accessor(); | |
184 | } | ||
185 | |||
186 | 5008 | TangentVectorTypeConstRef joint_v() const | |
187 | { | ||
188 | 5008 | return derived().joint_v_accessor(); | |
189 | } | ||
190 | 8405 | TangentVectorTypeRef joint_v() | |
191 | { | ||
192 | 9287 | return derived().joint_v_accessor(); | |
193 | } | ||
194 | |||
195 | 5114 | ConstraintTypeConstRef S() const | |
196 | { | ||
197 | 5114 | return derived().S_accessor(); | |
198 | } | ||
199 | 297410 | ConstraintTypeRef S() | |
200 | { | ||
201 | 298738 | return derived().S_accessor(); | |
202 | } | ||
203 | 3066 | TansformTypeConstRef M() const | |
204 | { | ||
205 | 5120 | return derived().M_accessor(); | |
206 | } | ||
207 | 1299452 | TansformTypeRef M() | |
208 | { | ||
209 | 1300388 | return derived().M_accessor(); | |
210 | } | ||
211 | 3085 | MotionTypeConstRef v() const | |
212 | { | ||
213 | 5162 | return derived().v_accessor(); | |
214 | } | ||
215 | 328244 | MotionTypeRef v() | |
216 | { | ||
217 | 329176 | return derived().v_accessor(); | |
218 | } | ||
219 | 3033 | BiasTypeConstRef c() const | |
220 | { | ||
221 | 5058 | return derived().c_accessor(); | |
222 | } | ||
223 | 193374 | BiasTypeRef c() | |
224 | { | ||
225 | 194254 | return derived().c_accessor(); | |
226 | } | ||
227 | |||
228 | 5332 | UTypeConstRef U() const | |
229 | { | ||
230 | 5332 | return derived().U_accessor(); | |
231 | } | ||
232 | 23765 | UTypeRef U() | |
233 | { | ||
234 | 25926 | return derived().U_accessor(); | |
235 | } | ||
236 | 3089 | DTypeConstRef Dinv() const | |
237 | { | ||
238 | 5170 | return derived().Dinv_accessor(); | |
239 | } | ||
240 | 30048 | DTypeRef Dinv() | |
241 | { | ||
242 | 37456 | return derived().Dinv_accessor(); | |
243 | } | ||
244 | 3089 | UDTypeConstRef UDinv() const | |
245 | { | ||
246 | 5170 | return derived().UDinv_accessor(); | |
247 | } | ||
248 | 33804 | UDTypeRef UDinv() | |
249 | { | ||
250 | 46818 | return derived().UDinv_accessor(); | |
251 | } | ||
252 | 83 | DTypeConstRef StU() const | |
253 | { | ||
254 | 166 | return derived().StU_accessor(); | |
255 | } | ||
256 | 10954 | DTypeRef StU() | |
257 | { | ||
258 | 11926 | return derived().StU_accessor(); | |
259 | } | ||
260 | |||
261 | 106 | std::string shortname() const | |
262 | { | ||
263 | 106 | return derived().shortname(); | |
264 | } | ||
265 | 52 | static std::string classname() | |
266 | { | ||
267 | 52 | return Derived::classname(); | |
268 | } | ||
269 | |||
270 | 52 | void disp(std::ostream & os) const | |
271 | { | ||
272 | using namespace std; | ||
273 |
2/4✓ Branch 2 taken 26 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 26 times.
✗ Branch 6 not taken.
|
52 | os << shortname() << endl; |
274 | 52 | } | |
275 | |||
276 | 52 | friend std::ostream & operator<<(std::ostream & os, const JointDataBase<Derived> & joint) | |
277 | { | ||
278 | 52 | joint.disp(os); | |
279 | 52 | return os; | |
280 | } | ||
281 | |||
282 | template<typename OtherDerived> | ||
283 | 1280 | bool operator==(const JointDataBase<OtherDerived> & other) const | |
284 | { | ||
285 | 1280 | return derived().isEqual(other.derived()); | |
286 | } | ||
287 | |||
288 | /// \brief Default operator== implementation | ||
289 | 2042 | bool isEqual(const JointDataBase<Derived> & other) const | |
290 | { | ||
291 |
1/6✓ Branch 1 taken 431 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
|
2042 | return internal::comparison_eq(joint_q(), other.joint_q()) |
292 |
8/17✓ Branch 1 taken 331 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 590 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 331 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 331 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 331 times.
✓ Branch 13 taken 100 times.
✓ Branch 15 taken 431 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2704 | && internal::comparison_eq(joint_v(), other.joint_v()) |
293 |
14/25✓ Branch 1 taken 331 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 590 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 331 times.
✓ Branch 8 taken 590 times.
✓ Branch 9 taken 331 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 331 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 331 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 331 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 331 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 331 times.
✓ Branch 24 taken 100 times.
✓ Branch 26 taken 331 times.
✓ Branch 27 taken 100 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
2704 | && internal::comparison_eq(S(), other.S()) && internal::comparison_eq(M(), other.M()) |
294 |
10/17✓ Branch 1 taken 331 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 590 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 331 times.
✓ Branch 8 taken 590 times.
✓ Branch 9 taken 331 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 331 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 331 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 331 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 331 times.
✗ Branch 21 not taken.
|
1842 | && internal::comparison_eq(v(), other.v()) && internal::comparison_eq(c(), other.c()) |
295 |
9/17✓ Branch 1 taken 331 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 590 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 331 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 331 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 331 times.
✓ Branch 13 taken 100 times.
✓ Branch 15 taken 331 times.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2704 | && internal::comparison_eq(U(), other.U()) |
296 |
9/17✓ Branch 1 taken 331 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 590 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 331 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 331 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 331 times.
✓ Branch 13 taken 100 times.
✓ Branch 15 taken 331 times.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2704 | && internal::comparison_eq(Dinv(), other.Dinv()) |
297 |
17/28✓ Branch 0 taken 590 times.
✓ Branch 1 taken 431 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 431 times.
✓ Branch 5 taken 590 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 431 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 331 times.
✓ Branch 10 taken 100 times.
✓ Branch 12 taken 331 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 331 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 331 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 331 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 331 times.
✓ Branch 23 taken 100 times.
✓ Branch 25 taken 331 times.
✓ Branch 26 taken 100 times.
✓ Branch 28 taken 331 times.
✓ Branch 29 taken 100 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
|
4746 | && 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 | 195015 | inline JointDataBase() | |
322 | { | ||
323 | 195015 | } | |
324 | |||
325 | }; // struct JointDataBase | ||
326 | |||
327 | } // namespace pinocchio | ||
328 | |||
329 | #endif // ifndef __pinocchio_multibody_joint_data_base_hpp__ | ||
330 |