Commit e01bde19 authored by Dominik Charousset's avatar Dominik Charousset

Rename fan_in{ => _responses}

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