From 8b9794b1a7276d8ea2957d5aed7169fc0b40e25d Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Mon, 18 Sep 2017 13:39:47 +0300 Subject: [core] Actor/ActorRef - ask calls to void methods - allows to wait for execution of void methods as well as non-void methods --- include/mbgl/actor/message.hpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'include') diff --git a/include/mbgl/actor/message.hpp b/include/mbgl/actor/message.hpp index 406de425d4..0a20993352 100644 --- a/include/mbgl/actor/message.hpp +++ b/include/mbgl/actor/message.hpp @@ -64,6 +64,32 @@ public: std::promise promise; }; +template +class AskMessageImpl : public Message { +public: + AskMessageImpl(std::promise promise_, Object& object_, MemberFn memberFn_, ArgsTuple argsTuple_) + : object(object_), + memberFn(memberFn_), + argsTuple(std::move(argsTuple_)), + promise(std::move(promise_)) { + } + + void operator()() override { + ask(std::make_index_sequence::value>()); + promise.set_value(); + } + + template + void ask(std::index_sequence) { + (object.*memberFn)(std::move(std::get(argsTuple))...); + } + + Object& object; + MemberFn memberFn; + ArgsTuple argsTuple; + std::promise promise; +}; + namespace actor { template -- cgit v1.2.1