19
19
#include < covfie/core/vector.hpp>
20
20
21
21
namespace covfie ::backend {
22
+
23
+ template <typename vector_t >
24
+ struct clamp_configuration_t {
25
+ vector_t min, max;
26
+ };
27
+
22
28
template <concepts::field_backend _backend_t >
23
29
struct clamp {
24
30
using this_t = clamp<_backend_t >;
@@ -29,9 +35,8 @@ struct clamp {
29
35
using contravariant_input_t = typename backend_t ::contravariant_input_t ;
30
36
using covariant_output_t = typename backend_t ::covariant_output_t ;
31
37
32
- struct configuration_t {
33
- typename contravariant_input_t ::vector_t min, max;
34
- };
38
+ using configuration_t =
39
+ clamp_configuration_t <typename contravariant_input_t ::vector_t >;
35
40
36
41
static constexpr uint32_t IO_MAGIC_HEADER = 0xAB020002 ;
37
42
@@ -70,15 +75,23 @@ struct clamp {
70
75
dimensions>>) explicit owning_data_t (Args... args)
71
76
: m_backend(std::forward<Args>(args)...)
72
77
{
73
- m_min.fill (static_cast <typename contravariant_input_t ::scalar_t >(0 )
74
- );
75
-
76
78
for (std::size_t i = 0 ; i < contravariant_input_t ::dimensions; ++i)
77
79
{
80
+ m_min[i] = 0 ;
78
81
m_max[i] = m_backend.get_configuration ()[i];
79
82
}
80
83
}
81
84
85
+ template <typename T>
86
+ requires (std::same_as<
87
+ typename T::parent_t ::configuration_t ,
88
+ configuration_t >) explicit owning_data_t (const T & o)
89
+ : m_min(o.get_configuration().min)
90
+ , m_max(o.get_configuration().max)
91
+ , m_backend(o.m_backend)
92
+ {
93
+ }
94
+
82
95
typename backend_t ::owning_data_t & get_backend (void )
83
96
{
84
97
return m_backend;
0 commit comments