Feature: actor output #1
@ -8,6 +8,12 @@
|
||||
#ifndef SKULLC_THREADS_ACTOR_OUTPUT_HPP_
|
||||
#define SKULLC_THREADS_ACTOR_OUTPUT_HPP_
|
||||
|
||||
#include <array>
|
||||
#include <optional>
|
||||
#include <variant>
|
||||
|
||||
#include <threads_signal.hpp>
|
||||
|
||||
namespace Threads
|
||||
{
|
||||
|
||||
@ -19,7 +25,7 @@ private:
|
||||
std::array<signal_variant, N> stored_signals_;
|
||||
|
||||
public:
|
||||
using connection_type = std::optional<decltype(stored_signals_)::iterator>;
|
||||
using connection_type = std::optional<typename decltype(stored_signals_)::iterator>;
|
||||
|
||||
template<typename T>
|
||||
connection_type addConnection(Signallable<T>* signal)
|
||||
@ -49,7 +55,9 @@ public:
|
||||
{
|
||||
if (it == *connection)
|
||||
{
|
||||
*it = std::monostate;
|
||||
delete *it;
|
||||
|
||||
*it = std::monostate{};
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -84,10 +92,17 @@ protected:
|
||||
};
|
||||
|
||||
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>();
|
||||
return receiver.addConnection(signal);
|
||||
auto* signal = receiver->template getAllocatedSignal<T>();
|
||||
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user