farm-ng-core
manifold.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 #include "sophus/concepts/params.h"
11 
12 namespace sophus {
13 namespace concepts {
14 
15 template <class TT>
16 concept ManifoldImpl = Tangent<TT> &&
17  requires(typename TT::Tangent tangent, typename TT::Params params) {
18  { TT::oplus(params, tangent) } -> ConvertibleTo<typename TT::Params>;
19 
20  { TT::ominus(params, params) } -> ConvertibleTo<typename TT::Tangent>;
21 };
22 
23 template <class TT>
24 concept BaseManifold = Tangent<TT> &&
25  requires(TT m, typename TT::Tangent tangent) {
26  // Manifold concepts
27  { m.oplus(tangent) } -> ConvertibleTo<TT>;
28 
29  { m.ominus(m) } -> ConvertibleTo<typename TT::Tangent>;
30 };
31 
32 template <class TT>
33 concept Manifold = Params<TT> && Tangent<TT> && BaseManifold<TT> &&
34  requires(std::vector<TT> points) {
35  { TT::average(points) } -> ConvertibleTo<std::optional<TT>>;
36 };
37 
38 } // namespace concepts
39 } // namespace sophus
sophus::average
auto average(TSequenceContainer const &foo_from_bar_transforms) -> std::enable_if_t< std::is_same< typename TSequenceContainer::value_type, Translation< TScalar, kPointDim > >::value, std::optional< typename TSequenceContainer::value_type > >
Definition: average.h:81
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::concepts::ManifoldImpl
concept ManifoldImpl
Definition: manifold.h:16
sophus::concepts::Tangent
concept Tangent
Definition: params.h:34
params.h
sophus::concepts::Manifold
concept Manifold
Definition: manifold.h:33
sophus::concepts::Params
concept Params
Definition: params.h:41
sophus::concepts::BaseManifold
concept BaseManifold
Definition: manifold.h:24