20 #ifndef HEDGEHOG_CORE_GRAPH_RECEIVER_H 21 #define HEDGEHOG_CORE_GRAPH_RECEIVER_H 23 #include "../../base/receiver/core_receiver.h" 30 template<
class GraphInput>
44 HLOG_SELF(0,
"Creating CoreGraphReceiver with type: " << (
int) type <<
" and name: " << name)
45 this->graphReceiverInputs_ = std::make_unique<std::set<CoreReceiver<GraphInput> *>>();
50 HLOG_SELF(0,
"Destructing CoreGraphReceiver")
57 HLOG_SELF(0,
"Add sender " << sender->name() <<
"(" << sender->id() <<
")")
59 inputNode->addSender(sender);
67 HLOG_SELF(0,
"Remove sender " << sender->name() <<
"(" << sender->id() <<
")")
69 inputNode->removeSender(sender);
75 void receive(std::shared_ptr<GraphInput> ptr)
final {
76 HLOG_SELF(2,
"Receive data")
83 HLOG_SELF(0,
"Add Graph Receiver Input " << receiver->
name() <<
"(" << receiver->
id() <<
")")
84 this->graphReceiverInputs_->insert(receiver);
92 result &= inputNode->receiverEmpty();
94 HLOG_SELF(2,
"Test receiver empty " <<
"(" << result <<
")")
100 std::set<CoreReceiver < GraphInput> *>
102 std::set<CoreReceiver<GraphInput> *>
receivers{};
103 std::set<CoreReceiver<GraphInput> *> tempReceivers;
105 tempReceivers = receiver->receivers();
106 receivers.insert(tempReceivers.begin(), tempReceivers.end());
115 std::ostringstream oss;
116 oss <<
"Internal error, should not be called, graph does not have a node: " << __FUNCTION__;
117 HLOG_SELF(0, oss.str())
118 throw (std::runtime_error(oss.str()));
123 #endif //HEDGEHOG_CORE_GRAPH_RECEIVER_H NodeType type() const
Node type accessor.
Receiver Interface, receive one data type from CoreSender.
CoreGraphReceiver(std::string_view const &name, NodeType const type, size_t const numberThreads)
CoreGraphReceiver constructor.
Graph Receiver for a type GraphInput.
void addGraphReceiverInput(CoreReceiver< GraphInput > *receiver)
Register a CoreReceiver from an input node.
Node Behavior definition.
virtual ~CoreGraphReceiver()
CoreGraphReceiver destructor.
NodeType
Hedgehog node's type.
Sender interface, send data to CoreReceiver.
Main Hedgehog core abstraction.
std::unique_ptr< std::set< CoreReceiver< GraphInput > * > > graphReceiverInputs_
Graph receivers (Input node receivers)
std::string_view const & name() const
Node name accessor.
void addSender(CoreSender< GraphInput > *sender) final
Add a CoreSender to the graph.
void removeSender(CoreSender< GraphInput > *sender) final
Remove a CoreSender from the graph.
size_t numberThreads() const
Number of threads associated accessor.
std::set< CoreReceiver< GraphInput > * > receivers() override
Get a set of CoreReceiver built from the input nodes.
behavior::Node * node() override
Get a node from the graph, that does not exist, throw an error in every case.
void receive(std::shared_ptr< GraphInput > ptr) final
Define how the graph receives data for a specific type and sends the data to all input nodes...
virtual std::string id() const
Unique Id accessor.
bool receiverEmpty() final
Test emptiness in all graph receivers.