GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/pinocchio/math/fwd.hpp Lines: 10 10 100.0 %
Date: 2023-08-09 08:43:58 Branches: 0 0 - %

Line Branch Exec Source
1
//
2
// Copyright (c) 2016-2019 CNRS INRIA
3
//
4
5
#ifndef __pinocchio_math_fwd_hpp__
6
#define __pinocchio_math_fwd_hpp__
7
8
#include "pinocchio/fwd.hpp"
9
#include <math.h>
10
#include <boost/math/constants/constants.hpp>
11
12
namespace pinocchio
13
{
14
15
  template <typename T>
16
  struct is_floating_point : boost::is_floating_point<T>
17
  {
18
  };
19
20
  ///
21
  /// \brief Returns the value of PI according to the template parameters Scalar
22
  ///
23
  /// \tparam Scalar The scalar type of the return pi value
24
  ///
25
  template<typename Scalar>
26
22903
  const Scalar PI()
27
22903
  { return boost::math::constants::pi<Scalar>(); }
28
29
  /// \brief Foward declaration of TaylorSeriesExpansion.
30
  template<typename Scalar> struct TaylorSeriesExpansion;
31
32
  namespace math
33
  {
34
35
#define PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(name) \
36
    template<typename Scalar> \
37
    Scalar name(const Scalar & value) \
38
    { using std::name; return name(value); }
39
40
#define PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(name) \
41
    namespace internal \
42
    { \
43
      template<typename T1, typename T2> \
44
      struct return_type_##name \
45
      { \
46
        typedef T1 type; \
47
      }; \
48
      template<typename T1, typename T2> \
49
      struct call_##name \
50
      { \
51
        static inline typename return_type_##name<T1,T2>::type \
52
        run(const T1 & a, const T2 & b) \
53
        { using std::name; return name(a,b); } \
54
      }; \
55
    } \
56
    template<typename T1, typename T2> \
57
    inline typename internal::return_type_##name<T1,T2>::type name(const T1 & a, const T2 & b) \
58
    { return internal::call_##name<T1,T2>::run(a,b); }
59
60
131227
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(fabs)
61
170869
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(sqrt)
62
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(atan)
63
8171
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(acos)
64
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(asin)
65
1
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(cos)
66
6225
    PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(sin)
67
68
53236
    PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(pow)
69
    PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(min)
70
209920
    PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(max)
71
14468
    PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(atan2)
72
  }
73
}
74
75
#endif //#ifndef __pinocchio_math_fwd_hpp__