コード例 #1
0
 typename detail::deduce_output_type<
   detail::type_list<Sigs...>,
   detail::type_list<
     typename detail::implicit_conversions<
       typename std::decay<Ts>::type
     >::type...
   >
 >::delegated_type
 delegate(message_priority mp, const typed_actor<Sigs...>& dest, Ts&&... xs) {
   static_assert(sizeof...(Ts) > 0, "no message to send");
   using token =
     detail::type_list<
       typename detail::implicit_conversions<
         typename std::decay<Ts>::type
       >::type...>;
   token tk;
   check_typed_input(dest, tk);
   if (! dest)
     return {};
   auto mid = current_element_->mid;
   current_element_->mid = mp == message_priority::high
                            ? mid.with_high_priority()
                            : mid.with_normal_priority();
   current_element_->msg = make_message(std::forward<Ts>(xs)...);
   dest->enqueue(std::move(current_element_), host());
   return {};
 }
コード例 #2
0
 void delegate(message_priority mp, const actor& dest, Ts&&... xs) {
   static_assert(sizeof...(Ts) > 0, "no message to send");
   if (! dest)
     return;
   auto mid = current_element_->mid;
   current_element_->mid = mp == message_priority::high
                            ? mid.with_high_priority()
                            : mid.with_normal_priority();
   current_element_->msg = make_message(std::forward<Ts>(xs)...);
   dest->enqueue(std::move(current_element_), host());
 }
コード例 #3
0
 typename response_type<
   typename Handle::signatures,
   detail::implicit_conversions_t<typename std::decay<Ts>::type>...
 >::delegated_type
 delegate(const Handle& dest, Ts&&... xs) {
   static_assert(sizeof...(Ts) > 0, "nothing to delegate");
   using token =
     detail::type_list<
       typename detail::implicit_conversions<
         typename std::decay<Ts>::type
       >::type...>;
   static_assert(response_type_unbox<signatures_of_t<Handle>, token>::valid,
                 "receiver does not accept given message");
   auto mid = current_element_->mid;
   current_element_->mid = P == message_priority::high
                           ? mid.with_high_priority()
                           : mid.with_normal_priority();
   dest->enqueue(make_mailbox_element(std::move(current_element_->sender),
                                      mid, std::move(current_element_->stages),
                                      std::forward<Ts>(xs)...),
                 context());
   return {};
 }