farm-ng-core
vector_space_traits.h
Go to the documentation of this file.
1 // Copyright (c) 2011, Hauke Strasdat
2 // Copyright (c) 2012, Steven Lovegrove
3 // Copyright (c) 2021, farm-ng, inc.
4 //
5 // Use of this source code is governed by an MIT-style
6 // license that can be found in the LICENSE file or at
7 // https://opensource.org/licenses/MIT.
8 
9 #pragma once
10 
11 #include "sophus/concepts/point.h"
12 
13 #include <Eigen/Core>
14 
15 #include <limits>
16 
17 namespace sophus {
18 
19 template <class TPoint>
20 struct PointTraits;
21 
22 template <concepts::ScalarType TPoint>
23 struct PointTraits<TPoint> {
24  using Scalar = TPoint;
25 
26  static bool constexpr kIsFloatingPoint = std::is_floating_point_v<Scalar>;
27  static bool constexpr kIsInteger = std::is_integral_v<Scalar>;
28 
29  static int constexpr kRows = 1;
30  static int constexpr kCols = 1;
31 
32  static bool constexpr kHasInfinity =
33  std::numeric_limits<Scalar>::has_infinity;
34  static bool constexpr kHasQuietNan =
35  std::numeric_limits<Scalar>::has_quiet_NaN;
36  static bool constexpr kHasSignalingNan =
37  std::numeric_limits<Scalar>::has_signaling_NaN;
38 
39  static auto lowest() -> TPoint {
40  return std::numeric_limits<Scalar>::lowest();
41  };
42  static auto min() -> TPoint { return std::numeric_limits<Scalar>::min(); };
43  static auto max() -> TPoint { return std::numeric_limits<Scalar>::max(); };
44 };
45 
46 template <concepts::EigenDenseType TPoint>
47 struct PointTraits<TPoint> {
48  using Scalar = typename TPoint::Scalar;
49  static int constexpr kRows = TPoint::RowsAtCompileTime;
50  static int constexpr kCols = TPoint::ColsAtCompileTime;
51 
52  static bool constexpr kIsFloatingPoint = std::is_floating_point_v<Scalar>;
53  static bool constexpr kIsInteger = std::is_integral_v<Scalar>;
54 
55  static bool constexpr kHasInfinity =
56  std::numeric_limits<Scalar>::has_infinity;
57  static bool constexpr kHasQuietNan =
58  std::numeric_limits<Scalar>::has_quiet_NaN;
59  static bool constexpr kHasSignalingNan =
60  std::numeric_limits<Scalar>::has_signaling_NaN;
61 
62  static auto lowest() -> TPoint {
63  return TPoint::Constant(std::numeric_limits<Scalar>::lowest());
64  };
65  static auto min() -> TPoint {
66  return TPoint::Constant(std::numeric_limits<Scalar>::min());
67  };
68  static auto max() -> TPoint {
69  return TPoint::Constant(std::numeric_limits<Scalar>::max());
70  };
71  static auto epsilon() -> TPoint {
72  return TPoint::Constant(std::numeric_limits<Scalar>::epsilon());
73  };
74  /// ... plus a bunch more if we need them
75 };
76 
77 } // namespace sophus
sophus::PointTraits< TPoint >::Scalar
TPoint Scalar
Definition: point_traits.h:24
point.h
sophus::PointTraits< TPoint >::max
static auto max() -> TPoint
Definition: vector_space_traits.h:43
sophus::PointTraits< TPoint >::lowest
static auto lowest() -> TPoint
Definition: vector_space_traits.h:39
sophus::PointTraits< TPoint >::min
static auto min() -> TPoint
Definition: vector_space_traits.h:42
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::min
auto min(TPoint const &a, TPoint const &b) -> TPoint
Definition: vector_space.h:104
sophus::max
auto max(TPoint const &a, TPoint const &b) -> TPoint
Definition: vector_space.h:114
sophus::PointTraits< TPoint >::epsilon
static auto epsilon() -> TPoint
Definition: vector_space_traits.h:71