Skip to content

Commit 9e55e18

Browse files
authored
Implement meta::accumulate internal function (#316)
1 parent 97dff19 commit 9e55e18

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
#pragma once
3+
4+
#include <alpaka/alpaka.hpp>
5+
#include <cstddef>
6+
#include <type_traits>
7+
#include <utility>
8+
9+
namespace clue::meta {
10+
11+
template <std::size_t N,
12+
typename F,
13+
typename Return = decltype(std::declval<F>().template operator()<0>())>
14+
requires std::is_arithmetic_v<Return>
15+
ALPAKA_FN_HOST_ACC inline constexpr auto accumulate(F&& f) {
16+
return [&]<std::size_t... Ids>(std::index_sequence<Ids...>) -> Return {
17+
return ((f.template operator()<Ids>()) + ... + Return{});
18+
}(std::make_index_sequence<N>{});
19+
}
20+
21+
} // namespace clue::meta

include/CLUEstering/internal/meta/apply.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
#pragma once
33

4+
#include <cstddef>
45
#include <type_traits>
56
#include <utility>
67
#include <alpaka/alpaka.hpp>

0 commit comments

Comments
 (0)