Feature: actor output #1

Merged
erki merged 3 commits from feature/actor_output into master 2021-11-12 21:23:13 +00:00
Showing only changes of commit e77adb65c0 - Show all commits

View File

@ -8,6 +8,12 @@
#ifndef SKULLC_THREADS_ACTOR_OUTPUT_HPP_ #ifndef SKULLC_THREADS_ACTOR_OUTPUT_HPP_
#define SKULLC_THREADS_ACTOR_OUTPUT_HPP_ #define SKULLC_THREADS_ACTOR_OUTPUT_HPP_
#include <array>
#include <optional>
#include <variant>
#include <threads_signal.hpp>
namespace Threads namespace Threads
{ {
@ -19,7 +25,7 @@ private:
std::array<signal_variant, N> stored_signals_; std::array<signal_variant, N> stored_signals_;
public: public:
using connection_type = std::optional<decltype(stored_signals_)::iterator>; using connection_type = std::optional<typename decltype(stored_signals_)::iterator>;
template<typename T> template<typename T>
connection_type addConnection(Signallable<T>* signal) connection_type addConnection(Signallable<T>* signal)
@ -49,7 +55,9 @@ public:
{ {
if (it == *connection) if (it == *connection)
{ {
*it = std::monostate; delete *it;
*it = std::monostate{};
return true; return true;
} }
} }
@ -84,10 +92,17 @@ protected:
}; };
template<typename T, typename Sender, typename Receiver> template<typename T, typename Sender, typename Receiver>
typename Receiver::connection_type connectActors(Sender& sender, Receiver& receiver) auto connectActors(Sender* sender, Receiver* receiver)
{ {
auto* signal = sender.getAllocatedSignal<T>(); auto* signal = receiver->template getAllocatedSignal<T>();
return receiver.addConnection(signal); return sender->addConnection(signal);
}
template<typename T, typename Sender, typename Receiver>
auto connectActors(Sender& sender, Receiver& receiver)
{
auto* signal = receiver.template getAllocatedSignal<T>();
return sender.addConnection(signal);
} }
}// namespace Threads }// namespace Threads