Ponca  6f9f1b59d7c8c4654a710cfcef7342f4f5c79ba1
Point Cloud Analysis library
Loading...
Searching...
No Matches
concepts.h
1#pragma once
2
3#include "../concepts.h"
4
5namespace Ponca
6{
7 template <typename T>
8 concept HasLocalFrame = T::hasLocalFrame;
9
10 template <typename T>
11 concept IsNeighborhoodFrame = requires(T t, const T ct, typename T::VectorType v) {
12 t.changeNeighborhoodFrame(v);
13
14 { ct.convertToGlobalBasis(v, true) } -> std::convertible_to<typename T::VectorType>;
15 { ct.convertToLocalBasis(v, true) } -> std::convertible_to<typename T::VectorType>;
16
17 { t.center() } -> std::convertible_to<typename T::VectorType>;
18 { ct.center() } -> std::convertible_to<typename T::VectorType>;
19 };
20
21 template <typename T>
22 concept IsNeighborhoodFilter = requires(T t, const T ct, typename T::VectorType v, typename T::DataPoint d) {
23 t.frame();
24 ct.frame();
25
26 ct.operator()(d); // not sure how to test the return type (std::pair) without breaking Cuda compatibility
27 { ct.spacedw(v, d) } -> std::convertible_to<typename T::VectorType>;
28 { ct.spaced2w(v, d) } -> std::convertible_to<typename T::MatrixType>;
29 { ct.scaledw(v, d) } -> std::same_as<typename T::Scalar>;
30 { ct.scaled2w(v, d) } -> std::same_as<typename T::Scalar>;
31 { ct.scaleSpaced2w(v, d) } -> std::convertible_to<typename T::VectorType>;
32 };
33
34 template <typename T>
36 IsNeighborhoodFrame<typename T::NeighborFilter> && requires(T t, const T ct) {
37 t.getNeighborFilter();
38 ct.getNeighborFilter();
39 };
40} // namespace Ponca
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Definition concepts.h:11