GCC Code Coverage Report


Directory: ./
File: include/pinocchio/spatial/force-tpl.hpp
Date: 2025-04-30 16:14:33
Exec Total Coverage
Lines: 53 53 100.0%
Branches: 19 36 52.8%

Line Branch Exec Source
1 //
2 // Copyright (c) 2015-2019 CNRS INRIA
3 // Copyright (c) 2015-2016 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5
6 #ifndef __pinocchio_spatial_force_tpl_hpp__
7 #define __pinocchio_spatial_force_tpl_hpp__
8
9 namespace pinocchio
10 {
11 template<typename _Scalar, int _Options>
12 struct traits<ForceTpl<_Scalar, _Options>>
13 {
14 typedef _Scalar Scalar;
15 typedef Eigen::Matrix<Scalar, 3, 1, _Options> Vector3;
16 typedef Eigen::Matrix<Scalar, 6, 1, _Options> Vector6;
17 typedef Eigen::Matrix<Scalar, 6, 6, _Options> Matrix6;
18 typedef typename PINOCCHIO_EIGEN_REF_CONST_TYPE(Vector6) ToVectorConstReturnType;
19 typedef typename PINOCCHIO_EIGEN_REF_TYPE(Vector6) ToVectorReturnType;
20 typedef typename Vector6::template FixedSegmentReturnType<3>::Type LinearType;
21 typedef typename Vector6::template FixedSegmentReturnType<3>::Type AngularType;
22 typedef typename Vector6::template ConstFixedSegmentReturnType<3>::Type ConstLinearType;
23 typedef typename Vector6::template ConstFixedSegmentReturnType<3>::Type ConstAngularType;
24 typedef ForceTpl<Scalar, _Options> ForcePlain;
25 enum
26 {
27 LINEAR = 0,
28 ANGULAR = 3,
29 Options = _Options
30 };
31
32 typedef ForceRef<Vector6> ForceRefType;
33 }; // traits ForceTpl
34
35 template<typename _Scalar, int _Options>
36 class ForceTpl : public ForceDense<ForceTpl<_Scalar, _Options>>
37 {
38 public:
39 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 typedef ForceDense<ForceTpl> Base;
41 FORCE_TYPEDEF_TPL(ForceTpl);
42 enum
43 {
44 Options = _Options
45 };
46
47 using Base::operator=;
48 using Base::operator!=;
49 using Base::angular;
50 using Base::linear;
51
52 // Constructors
53 306451 ForceTpl()
54 306451 {
55 306451 }
56
57 template<typename V1, typename V2>
58 268114 ForceTpl(const Eigen::MatrixBase<V1> & v, const Eigen::MatrixBase<V2> & w)
59 268114 {
60 EIGEN_STATIC_ASSERT_VECTOR_ONLY(V1);
61 EIGEN_STATIC_ASSERT_VECTOR_ONLY(V2);
62
3/5
✓ Branch 1 taken 217 times.
✓ Branch 2 taken 165813 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 217 times.
✗ Branch 5 not taken.
268114 linear() = v;
63
3/5
✓ Branch 1 taken 217 times.
✓ Branch 2 taken 165813 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 217 times.
✗ Branch 5 not taken.
268114 angular() = w;
64 268114 }
65
66 template<typename V6>
67 418287 explicit ForceTpl(const Eigen::MatrixBase<V6> & v)
68 418287 : m_data(v)
69 {
70 EIGEN_STATIC_ASSERT_VECTOR_ONLY(V6);
71 418287 }
72
73 638593 ForceTpl(const ForceTpl & clone) // Copy constructor
74 638593 : m_data(clone.toVector())
75 {
76 638593 }
77
78 template<typename S2, int O2>
79 1 explicit ForceTpl(const ForceTpl<S2, O2> & other)
80 1 {
81
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 *this = other.template cast<Scalar>();
82 1 }
83
84 template<typename F2>
85 explicit ForceTpl(const ForceBase<F2> & clone)
86 {
87 *this = clone;
88 }
89
90 138659 ForceTpl & operator=(const ForceTpl & clone) // Copy assignment operator
91 {
92 138659 m_data = clone.toVector();
93 138659 return *this;
94 }
95
96 template<int O2>
97 explicit ForceTpl(const ForceTpl<Scalar, O2> & clone)
98 : m_data(clone.toVector())
99 {
100 }
101
102 template<typename M2>
103 1 explicit ForceTpl(const ForceDense<M2> & clone)
104 1 {
105
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 linear() = clone.linear();
106
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 angular() = clone.angular();
107 1 }
108
109 // initializers
110 216607 static ForceTpl Zero()
111 {
112
1/2
✓ Branch 2 taken 216607 times.
✗ Branch 3 not taken.
216607 return ForceTpl(Vector6::Zero());
113 }
114 500 static ForceTpl Random()
115 {
116
1/2
✓ Branch 2 taken 500 times.
✗ Branch 3 not taken.
500 return ForceTpl(Vector6::Random());
117 }
118
119 780345 ToVectorConstReturnType toVector_impl() const
120 {
121 780345 return m_data;
122 }
123 154302 ToVectorReturnType toVector_impl()
124 {
125 154460 return m_data;
126 }
127
128 // Getters
129 688349 ConstAngularType angular_impl() const
130 {
131 688349 return m_data.template segment<3>(ANGULAR);
132 }
133 759564 ConstLinearType linear_impl() const
134 {
135 763260 return m_data.template segment<3>(LINEAR);
136 }
137 879693 AngularType angular_impl()
138 {
139 884539 return m_data.template segment<3>(ANGULAR);
140 }
141 882803 LinearType linear_impl()
142 {
143 887651 return m_data.template segment<3>(LINEAR);
144 }
145
146 template<typename V3>
147 1 void angular_impl(const Eigen::MatrixBase<V3> & w)
148 {
149 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3, 3);
150
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 angular_impl() = w;
151 1 }
152 template<typename V3>
153 1 void linear_impl(const Eigen::MatrixBase<V3> & v)
154 {
155 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3, 3);
156
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 linear_impl() = v;
157 1 }
158
159 2 ForceRef<Vector6> ref()
160 {
161 2 return ForceRef<Vector6>(m_data);
162 }
163
164 /// \returns An expression of *this with the Scalar type casted to NewScalar.
165 template<typename NewScalar>
166 3 ForceTpl<NewScalar, Options> cast() const
167 {
168 typedef ForceTpl<NewScalar, Options> ReturnType;
169
4/8
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
3 ReturnType res(linear().template cast<NewScalar>(), angular().template cast<NewScalar>());
170 3 return res;
171 }
172
173 protected:
174 Vector6 m_data;
175
176 }; // class ForceTpl
177
178 } // namespace pinocchio
179
180 #endif // ifndef __pinocchio_spatial_force_tpl_hpp__
181