pinocchio  3.7.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
 
Loading...
Searching...
No Matches
static-if.hpp
1//
2// Copyright (c) 2019-2020 INRIA
3//
4
5#ifndef __pinocchio_autodiff_casadi_utils_static_if_hpp__
6#define __pinocchio_autodiff_casadi_utils_static_if_hpp__
7
8#include "pinocchio/utils/static-if.hpp"
9
10namespace pinocchio
11{
12 namespace internal
13 {
14
15 template<typename Scalar, typename ThenType, typename ElseType>
16 struct if_then_else_impl<::casadi::Matrix<Scalar>, ::casadi::Matrix<Scalar>, ThenType, ElseType>
17 {
18 typedef typename internal::traits<if_then_else_impl>::ReturnType ReturnType;
19
20 typedef ::casadi::Matrix<Scalar> CasadiType;
21
22 static inline ReturnType run(
23 const ComparisonOperators op,
24 const CasadiType & lhs_value,
25 const CasadiType & rhs_value,
26 const ThenType & then_value,
27 const ElseType & else_value)
28 {
29 switch (op)
30 {
31 case LT:
32 return ::casadi::Matrix<Scalar>::if_else(lhs_value < rhs_value, then_value, else_value);
33 break;
34 case LE:
35 return ::casadi::Matrix<Scalar>::if_else(lhs_value <= rhs_value, then_value, else_value);
36 break;
37 case EQ:
38 return ::casadi::Matrix<Scalar>::if_else(lhs_value == rhs_value, then_value, else_value);
39 break;
40 case GE:
41 return ::casadi::Matrix<Scalar>::if_else(lhs_value >= rhs_value, then_value, else_value);
42 break;
43 case GT:
44 return ::casadi::Matrix<Scalar>::if_else(lhs_value > rhs_value, then_value, else_value);
45 break;
46 }
47 }
48 };
49
50 template<typename Scalar>
51 struct comparison_eq_impl<::casadi::Matrix<Scalar>, ::casadi::Matrix<Scalar>>
52 {
53 typedef ::casadi::Matrix<Scalar> CasadiType;
54
55 static inline bool run(const CasadiType & lhs_value, const CasadiType & rhs_value)
56 {
57 return (lhs_value == rhs_value).is_zero();
58 }
59 };
60
61 } // namespace internal
62} // namespace pinocchio
63
64namespace std
65{
66
67 template<typename Scalar>
68 struct equal_to<::casadi::Matrix<Scalar>>
69 {
70 bool operator()(
71 const ::casadi::Matrix<Scalar> & lhs_value, const ::casadi::Matrix<Scalar> & rhs_value) const
72 {
73 return (lhs_value == rhs_value).is_zero();
74 }
75 };
76} // namespace std
77
78#endif // ifndef __pinocchio_autodiff_casadi_utils_static_if_hpp__
Main pinocchio namespace.
Definition treeview.dox:11