12 #ifndef SST_CORE_CORETEST_MESSAGEMESH_ENCLOSINGCOMPONENT_H
13 #define SST_CORE_CORETEST_MESSAGEMESH_ENCLOSINGCOMPONENT_H
15 #include "sst/core/testElements/message_mesh/messageEvent.h"
17 #include "sst/core/component.h"
18 #include "sst/core/event.h"
19 #include "sst/core/link.h"
20 #include "sst/core/rng/rng.h"
21 #include "sst/core/ssthandler.h"
22 #include "sst/core/subcomponent.h"
26 namespace MessageMesh {
60 template <
typename classT,
typename dataT =
void>
63 virtual void setNotifyOnReceive(
HandlerBase* functor) { rFunctor = functor; }
79 virtual void send(
MessageEvent* ev,
int incoming_port) = 0;
86 SST_ELI_REGISTER_COMPONENT(
89 "message_mesh.enclosing_component",
90 SST_ELI_ELEMENT_VERSION(1,0,0),
91 "Base element that encloses the SubComponents that actually provide the functionality",
92 COMPONENT_CATEGORY_NETWORK
95 SST_ELI_DOCUMENT_PARAMS(
96 {
"id",
"Id for this componentd",
""},
99 SST_ELI_DOCUMENT_STATISTICS(
102 SST_ELI_DOCUMENT_PORTS(
105 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
106 {
"ports",
"Slot that the ports objects go in",
"SST::CoreTest::MessageMesh::PortInterface" },
107 {
"route",
"Slot that the ports objects go in",
"SST::CoreTest::MessageMesh::RouteInterface" }
118 std::vector<PortInterface*> ports;
131 SST_ELI_REGISTER_SUBCOMPONENT(
134 "message_mesh.port_slot",
135 SST_ELI_ELEMENT_VERSION(1,0,0),
136 "SubComponent implementing PortInterface that simply defers to another loaded PortInterface",
140 SST_ELI_DOCUMENT_PARAMS(
143 SST_ELI_DOCUMENT_STATISTICS(
146 SST_ELI_DOCUMENT_PORTS(
149 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
150 {
"port",
"Slot to load the real PortInterface object",
"SST::CoreTest::MessageMesh::PortInterface" }
156 void send(
MessageEvent* ev)
override { port->send(ev); }
157 void setNotifyOnReceive(
HandlerBase* functor)
override { port->setNotifyOnReceive(functor); }
168 SST_ELI_REGISTER_SUBCOMPONENT(
171 "message_mesh.message_port",
172 SST_ELI_ELEMENT_VERSION(1,0,0),
173 "SubComponent implementing PortInterface for sending and receiving messages",
177 SST_ELI_DOCUMENT_PARAMS(
180 SST_ELI_DOCUMENT_STATISTICS(
183 SST_ELI_DOCUMENT_PORTS(
184 {
"port",
"Port to send or receive on", {
"" } },
187 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
194 void handleEvent(
Event* ev);
204 SST_ELI_REGISTER_SUBCOMPONENT(
207 "message_mesh.route_message",
208 SST_ELI_ELEMENT_VERSION(1,0,0),
209 "SubComponent implementing message routing",
213 SST_ELI_DOCUMENT_PARAMS(
216 SST_ELI_DOCUMENT_STATISTICS(
219 SST_ELI_DOCUMENT_PORTS(
222 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
225 RouteMessage(ComponentId_t
id,
Params& params,
const std::vector<PortInterface*>& ports,
int my_id);
228 void send(
MessageEvent* ev,
int incoming_port)
override;
231 const std::vector<PortInterface*> ports;
Main component object for the simulation.
Definition: component.h:31
Definition: enclosingComponent.h:83
void finish()
Called after complete phase, but before objects are destroyed.
Definition: enclosingComponent.cc:72
void setup()
Called after all components have been constructed and initialization has completed,...
Definition: enclosingComponent.cc:60
Definition: messageEvent.h:22
Definition: enclosingComponent.h:165
Definition: enclosingComponent.h:29
SSTHandlerBase< void, Event * > HandlerBase
Base handler for event delivery.
Definition: enclosingComponent.h:39
Definition: enclosingComponent.h:128
Definition: enclosingComponent.h:72
Definition: enclosingComponent.h:201
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:35
Link between two components.
Definition: link.h:38
Parameter store.
Definition: params.h:56
Implements the base class for random number generators for the SST core.
Definition: rng.h:28
Handlers with 1 handler defined argument to callback from caller.
Definition: ssthandler.h:171
Handler class with user-data argument.
Definition: ssthandler.h:220
SubComponent is a class loadable through the factory which allows dynamic functionality to be added t...
Definition: subcomponent.h:29