Skip to content

Commit 558fc5e

Browse files
Make bulk pipeable
1 parent fa6d441 commit 558fc5e

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

include/beman/execution/detail/bulk.hpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#ifndef INCLUDED_BEMAN_EXECUTION_DETAIL_BULK
55
#define INCLUDED_BEMAN_EXECUTION_DETAIL_BULK
66

7+
#include "beman/execution/detail/sender_adaptor.hpp"
8+
#include "beman/execution/detail/sender_adaptor_closure.hpp"
79
#include <beman/execution/detail/get_completion_signatures.hpp>
810
#include <beman/execution/detail/meta_combine.hpp>
911
#include <beman/execution/detail/meta_unique.hpp>
@@ -29,7 +31,13 @@
2931
#include <beman/execution/detail/suppress_push.hpp>
3032
namespace beman::execution::detail {
3133

32-
struct bulk_t {
34+
struct bulk_t : ::beman::execution::sender_adaptor_closure<bulk_t> {
35+
36+
template <class Shape, class f>
37+
requires(std::is_integral_v<Shape> && ::beman::execution::detail::movable_value<f>)
38+
auto operator()(Shape&& shape, f&& fun) const {
39+
return beman::execution::detail::sender_adaptor{*this, std::forward<Shape>(shape), std::forward<f>(fun)};
40+
}
3341

3442
template <class Sender, class Shape, class f>
3543
requires(::beman::execution::sender<Sender> && std::is_integral_v<Shape> &&

tests/beman/execution/exec-bulk.test.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
namespace {
1414
auto test_bulk() {
15-
auto b0 = test_std::bulk(test_std::just(), 1, [](int) {});
15+
auto b0 = test_std::just() | test_std::bulk(1, [](int) {});
1616

1717
static_assert(test_std::sender<decltype(b0)>);
1818
auto b0_env = test_std::get_env(b0);
@@ -25,7 +25,7 @@ auto test_bulk() {
2525

2626
int counter = 0;
2727

28-
auto b1 = test_std::bulk(test_std::just(), 5, [&](int i) { counter += i; });
28+
auto b1 = test_std::just() | test_std::bulk(5, [&](int i) { counter += i; });
2929

3030
static_assert(test_std::sender<decltype(b1)>);
3131
auto b1_env = test_std::get_env(b0);
@@ -43,9 +43,9 @@ auto test_bulk() {
4343

4444
std::vector<int> results(a.size(), 0);
4545

46-
auto b2 = test_std::bulk(test_std::just(a), a.size(), [&](std::size_t index, const std::vector<int>& vec) {
47-
results[index] = vec[index] * b[index];
48-
});
46+
auto b2 = test_std::just(a) | test_std::bulk(a.size(), [&](std::size_t index, const std::vector<int>& vec) {
47+
results[index] = vec[index] * b[index];
48+
});
4949
static_assert(test_std::sender<decltype(b2)>);
5050
auto b2_env = test_std::get_env(b2);
5151
auto b2_completions = test_std::get_completion_signatures(b2, b2_env);
@@ -65,7 +65,7 @@ auto test_bulk() {
6565
}
6666

6767
auto test_bulk_noexept() {
68-
auto b0 = test_std::bulk(test_std::just(), 1, [](int) noexcept {});
68+
auto b0 = test_std::just() | test_std::bulk(1, [](int) noexcept {});
6969
auto b0_env = test_std::get_env(b0);
7070
auto b0_completions = test_std::get_completion_signatures(b0, b0_env);
7171
static_assert(std::is_same_v<decltype(b0_completions),
@@ -75,7 +75,7 @@ auto test_bulk_noexept() {
7575

7676
int counter = 0;
7777

78-
auto b1 = test_std::bulk(test_std::just(), 5, [&](int i) noexcept { counter += i; });
78+
auto b1 = test_std::just() | test_std::bulk(5, [&](int i) noexcept { counter += i; });
7979

8080
static_assert(test_std::sender<decltype(b1)>);
8181
auto b1_env = test_std::get_env(b0);

0 commit comments

Comments
 (0)