Skip to content

Commit 642abc6

Browse files
authored
Merge pull request #88 from stephenswat/fix/clamp_copyable
Make clamping backend copyable with stream
2 parents 3c26926 + 9b2abd8 commit 642abc6

File tree

3 files changed

+49
-36
lines changed

3 files changed

+49
-36
lines changed

lib/core/covfie/core/backend/transformer/clamp.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#pragma once
88

99
#include <algorithm>
10+
#include <concepts>
1011
#include <iostream>
1112
#include <type_traits>
1213
#include <variant>
@@ -71,8 +72,10 @@ struct clamp {
7172
requires(std::same_as<
7273
typename backend_t::configuration_t,
7374
utility::nd_size<
74-
backend_t::contravariant_input_t::
75-
dimensions>>) explicit owning_data_t(Args... args)
75+
backend_t::contravariant_input_t::dimensions>> &&
76+
std::constructible_from<
77+
typename backend_t::owning_data_t,
78+
Args...>) explicit owning_data_t(Args... args)
7679
: m_backend(std::forward<Args>(args)...)
7780
{
7881
for (std::size_t i = 0; i < contravariant_input_t::dimensions; ++i)

lib/cuda/covfie/cuda/utility/copy.hpp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,29 @@ requires(concepts::field_backend<T> &&
2929

3030
if constexpr (can_construct_with_stream) {
3131
return typename T::owning_data_t(std::forward<U>(backend), stream);
32-
} else if constexpr (std::constructible_from<
33-
typename T::owning_data_t,
34-
decltype(backend.get_configuration()),
35-
typename T::backend_t::owning_data_t &&>)
36-
{
37-
return typename T::owning_data_t(
38-
backend.get_configuration(),
39-
copy_backend_with_stream<typename T::backend_t>(
40-
backend.get_backend(), stream
41-
)
42-
);
4332
} else {
44-
return typename T::owning_data_t(make_parameter_pack(
45-
backend.get_configuration(),
46-
copy_backend_with_stream<typename T::backend_t>(
47-
backend.get_backend(), stream
48-
)
49-
));
33+
auto new_backend = copy_backend_with_stream<typename T::backend_t>(
34+
backend.get_backend(), stream
35+
);
36+
37+
if constexpr (std::constructible_from<
38+
typename T::owning_data_t,
39+
typename T::backend_t::owning_data_t &&>)
40+
{
41+
return typename T::owning_data_t(std::move(new_backend));
42+
} else if constexpr (std::constructible_from<
43+
typename T::owning_data_t,
44+
decltype(backend.get_configuration()),
45+
typename T::backend_t::owning_data_t &&>)
46+
{
47+
return typename T::owning_data_t(
48+
backend.get_configuration(), std::move(new_backend)
49+
);
50+
} else {
51+
return typename T::owning_data_t(make_parameter_pack(
52+
backend.get_configuration(), std::move(new_backend)
53+
));
54+
}
5055
}
5156
}
5257

lib/sycl/covfie/sycl/utility/copy.hpp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,29 @@ requires(concepts::field_backend<T> &&
2929

3030
if constexpr (can_construct_with_queue) {
3131
return typename T::owning_data_t(std::forward<U>(backend), queue);
32-
} else if constexpr (std::constructible_from<
33-
typename T::owning_data_t,
34-
decltype(backend.get_configuration()),
35-
typename T::backend_t::owning_data_t &&>)
36-
{
37-
return typename T::owning_data_t(
38-
backend.get_configuration(),
39-
copy_backend_with_queue<typename T::backend_t>(
40-
backend.get_backend(), queue
41-
)
42-
);
4332
} else {
44-
return typename T::owning_data_t(make_parameter_pack(
45-
backend.get_configuration(),
46-
copy_backend_with_queue<typename T::backend_t>(
47-
backend.get_backend(), queue
48-
)
49-
));
33+
auto new_backend = copy_backend_with_queue<typename T::backend_t>(
34+
backend.get_backend(), queue
35+
);
36+
37+
if constexpr (std::constructible_from<
38+
typename T::owning_data_t,
39+
typename T::backend_t::owning_data_t &&>)
40+
{
41+
return typename T::owning_data_t(std::move(new_backend));
42+
} else if constexpr (std::constructible_from<
43+
typename T::owning_data_t,
44+
decltype(backend.get_configuration()),
45+
typename T::backend_t::owning_data_t &&>)
46+
{
47+
return typename T::owning_data_t(
48+
backend.get_configuration(), std::move(new_backend)
49+
);
50+
} else {
51+
return typename T::owning_data_t(make_parameter_pack(
52+
backend.get_configuration(), std::move(new_backend)
53+
));
54+
}
5055
}
5156
}
5257

0 commit comments

Comments
 (0)