Commit e01bde19 authored by Dominik Charousset's avatar Dominik Charousset

Rename fan_in{ => _responses}

parent d2909f6a
......@@ -36,7 +36,7 @@ namespace caf {
namespace detail {
template <class F, class T>
struct fan_in_helper {
struct fan_in_responses_helper {
std::vector<T> results;
std::shared_ptr<size_t> pending;
F f;
......@@ -50,7 +50,7 @@ struct fan_in_helper {
}
template <class Fun>
fan_in_helper(size_t pending, Fun&& f)
fan_in_responses_helper(size_t pending, Fun&& f)
: pending(std::make_shared<size_t>(pending)), f(std::forward<Fun>(f)) {
results.reserve(pending);
}
......@@ -62,7 +62,7 @@ struct fan_in_helper {
};
template <class F, class... Ts>
struct fan_in_tuple_helper {
struct fan_in_responses_tuple_helper {
using value_type = std::tuple<Ts...>;
std::vector<value_type> results;
std::shared_ptr<size_t> pending;
......@@ -77,7 +77,7 @@ struct fan_in_tuple_helper {
}
template <class Fun>
fan_in_tuple_helper(size_t pending, Fun&& f)
fan_in_responses_tuple_helper(size_t pending, Fun&& f)
: pending(std::make_shared<size_t>(pending)), f(std::forward<Fun>(f)) {
results.reserve(pending);
}
......@@ -89,28 +89,29 @@ struct fan_in_tuple_helper {
};
template <class F, class = typename detail::get_callable_trait<F>::arg_types>
struct select_fan_in_helper;
struct select_fan_in_responses_helper;
template <class F, class... Ts>
struct select_fan_in_helper<F,
detail::type_list<std::vector<std::tuple<Ts...>>>> {
using type = fan_in_tuple_helper<F, Ts...>;
struct select_fan_in_responses_helper<
F, detail::type_list<std::vector<std::tuple<Ts...>>>> {
using type = fan_in_responses_tuple_helper<F, Ts...>;
};
template <class F, class T>
struct select_fan_in_helper<F, detail::type_list<std::vector<T>>> {
using type = fan_in_helper<F, T>;
struct select_fan_in_responses_helper<F, detail::type_list<std::vector<T>>> {
using type = fan_in_responses_helper<F, T>;
};
template <class F>
using fan_in_helper_t = typename select_fan_in_helper<F>::type;
using fan_in_responses_helper_t =
typename select_fan_in_responses_helper<F>::type;
// TODO: Replace with a lambda when switching to C++17 (move g into lambda).
template <class G>
class fan_in_error_handler {
class fan_in_responses_error_handler {
public:
template <class Fun>
fan_in_error_handler(Fun&& fun, std::shared_ptr<size_t> pending)
fan_in_responses_error_handler(Fun&& fun, std::shared_ptr<size_t> pending)
: handler(std::forward<Fun>(fun)), pending(std::move(pending)) {
// nop
}
......@@ -138,9 +139,9 @@ namespace policy {
/// @relates mixin::requester
/// @relates response_handle
template <class ResponseType>
class fan_in {
class fan_in_responses {
public:
fan_in(std::vector<message_id> ids) : ids_(std::move(ids)) {
fan_in_responses(std::vector<message_id> ids) : ids_(std::move(ids)) {
CAF_ASSERT(ids_.size()
<= static_cast<size_t>(std::numeric_limits<int>::max()));
}
......@@ -161,7 +162,7 @@ public:
template <class Self, class F, class OnError>
void receive(Self* self, F&& f, OnError&& g) {
using helper_type = detail::fan_in_helper_t<detail::decay_t<F>>;
using helper_type = detail::fan_in_responses_helper_t<detail::decay_t<F>>;
helper_type helper{ids_.size(), std::forward<F>(f)};
detail::type_checker<ResponseType, helper_type>::check();
auto error_handler = [&](error& err) {
......@@ -182,8 +183,8 @@ private:
template <class F, class OnError>
behavior make_behavior(F&& f, OnError&& g) {
using namespace detail;
using helper_type = fan_in_helper_t<decay_t<F>>;
using error_handler_type = fan_in_error_handler<decay_t<OnError>>;
using helper_type = fan_in_responses_helper_t<decay_t<F>>;
using error_handler_type = fan_in_responses_error_handler<decay_t<OnError>>;
helper_type helper{ids_.size(), std::move(f)};
type_checker<ResponseType, helper_type>::check();
error_handler_type err_helper{std::forward<OnError>(g), helper.pending};
......
......@@ -16,9 +16,9 @@
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#define CAF_SUITE policy.fan_in
#define CAF_SUITE policy.fan_in_responses
#include "caf/policy/fan_in.hpp"
#include "caf/policy/fan_in_responses.hpp"
#include "caf/test/dsl.hpp"
......@@ -28,7 +28,7 @@
#include "caf/event_based_actor.hpp"
#include "caf/sec.hpp"
using caf::policy::fan_in;
using caf::policy::fan_in_responses;
using namespace caf;
......@@ -63,9 +63,9 @@ struct fixture : test_coordinator_fixture<> {
CAF_MESSAGE("subtest: " message); \
for (int subtest_dummy = 0; subtest_dummy < 1; ++subtest_dummy)
CAF_TEST_FIXTURE_SCOPE(fan_in_tests, fixture)
CAF_TEST_FIXTURE_SCOPE(fan_in_responses_tests, fixture)
CAF_TEST(fan_in combines two integer results into one vector) {
CAF_TEST(fan_in_responses combines two integer results into one vector) {
using int_list = std::vector<int>;
auto f = [](int x, int y) { return x + y; };
auto server1 = make_server(f);
......@@ -74,7 +74,7 @@ CAF_TEST(fan_in combines two integer results into one vector) {
SUBTEST("vector of int") {
auto r1 = self->request(server1, infinite, 1, 2);
auto r2 = self->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
run();
merge.receive(
self.ptr(),
......@@ -88,7 +88,7 @@ CAF_TEST(fan_in combines two integer results into one vector) {
using std::make_tuple;
auto r1 = self->request(server1, infinite, 1, 2);
auto r2 = self->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
run();
using results_vector = std::vector<std::tuple<int>>;
merge.receive(
......@@ -106,7 +106,7 @@ CAF_TEST(fan_in combines two integer results into one vector) {
auto client = sys.spawn([=, &results](event_based_actor* client_ptr) {
auto r1 = client_ptr->request(server1, infinite, 1, 2);
auto r2 = client_ptr->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
merge.then(
client_ptr, [&results](int_list xs) { results = std::move(xs); },
make_error_handler());
......@@ -124,7 +124,7 @@ CAF_TEST(fan_in combines two integer results into one vector) {
auto client = sys.spawn([=, &results](event_based_actor* client_ptr) {
auto r1 = client_ptr->request(server1, infinite, 1, 2);
auto r2 = client_ptr->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
merge.await(
client_ptr, [&results](int_list xs) { results = std::move(xs); },
make_error_handler());
......@@ -141,7 +141,7 @@ CAF_TEST(fan_in combines two integer results into one vector) {
}
}
CAF_TEST(fan_in calls the error handler at most once) {
CAF_TEST(fan_in_responses calls the error handler at most once) {
using int_list = std::vector<int>;
auto f = [](int, int) -> result<int> { return sec::invalid_argument; };
auto server1 = make_server(f);
......@@ -149,7 +149,7 @@ CAF_TEST(fan_in calls the error handler at most once) {
SUBTEST("request.receive") {
auto r1 = self->request(server1, infinite, 1, 2);
auto r2 = self->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
run();
size_t errors = 0;
merge.receive(
......@@ -163,7 +163,7 @@ CAF_TEST(fan_in calls the error handler at most once) {
auto client = sys.spawn([=, &errors](event_based_actor* client_ptr) {
auto r1 = client_ptr->request(server1, infinite, 1, 2);
auto r2 = client_ptr->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
merge.then(
client_ptr,
[](int_list) { CAF_FAIL("fan-in policy called the result handler"); },
......@@ -181,7 +181,7 @@ CAF_TEST(fan_in calls the error handler at most once) {
auto client = sys.spawn([=, &errors](event_based_actor* client_ptr) {
auto r1 = client_ptr->request(server1, infinite, 1, 2);
auto r2 = client_ptr->request(server2, infinite, 2, 3);
fan_in<detail::type_list<int>> merge{{r1.id(), r2.id()}};
fan_in_responses<detail::type_list<int>> merge{{r1.id(), r2.id()}};
merge.await(
client_ptr,
[](int_list) { CAF_FAIL("fan-in policy called the result handler"); },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment