12 #ifndef SST_CORE_CORE_EVENT_H
13 #define SST_CORE_CORE_EVENT_H
15 #include <sst/core/sst_types.h>
21 #include <sst/core/activity.h>
42 #if __SST_DEBUG_EVENT_TRACKING__
57 #ifdef SST_ENFORCE_EVENT_ORDERING
58 enforce_link_order = id;
77 #ifdef SST_ENFORCE_EVENT_ORDERING
78 return enforce_link_order;
97 template <
typename classT,
typename argT =
void>
100 typedef void (classT::*PtrMember)(
Event*, argT);
102 const PtrMember member;
111 Handler( classT*
const object, PtrMember member, argT data ) :
118 (
object->*member)(event,data);
126 template <
typename classT>
129 typedef void (classT::*PtrMember)(
Event*);
130 const PtrMember member;
138 Handler( classT*
const object, PtrMember member ) :
144 (
object->*member)(event);
149 virtual void print(
const std::string& header,
Output &out)
const {
150 out.
output(
"%s Generic Event to be delivered at %" PRIu64
" with priority %d\n",
154 #ifdef __SST_DEBUG_EVENT_TRACKING__
156 virtual void printTrackingInfo(
const std::string& header,
Output &out)
const {
157 out.
output(
"%s Event first sent from: %s:%s (type: %s) and last received by %s:%s (type: %s)\n", header.c_str(),
158 first_comp.c_str(),first_port.c_str(),first_type.c_str(),
159 last_comp.c_str(),last_port.c_str(),last_type.c_str());
162 const std::string& getFirstComponentName() {
return first_comp; }
163 const std::string& getFirstComponentType() {
return first_type; }
164 const std::string& getFirstPort() {
return first_port; }
165 const std::string& getLastComponentName() {
return last_comp; }
166 const std::string& getLastComponentType() {
return last_type; }
167 const std::string& getLastPort() {
return last_port; }
169 void addSendComponent(
const std::string& comp,
const std::string& type,
const std::string& port) {
170 if ( first_comp ==
"" ) {
176 void addRecvComponent(
const std::string& comp,
const std::string& type,
const std::string& port) {
185 Activity::serialize_order(ser);
186 #ifndef SST_ENFORCE_EVENT_ORDERING
189 #ifdef __SST_DEBUG_EVENT_TRACKING__
210 static std::atomic<uint64_t> id_counter;
213 #ifndef SST_ENFORCE_EVENT_ORDERING
217 #ifdef __SST_DEBUG_EVENT_TRACKING__
218 std::string first_comp;
219 std::string first_type;
220 std::string first_port;
221 std::string last_comp;
222 std::string last_type;
223 std::string last_port;
239 virtual void print(
const std::string& header,
Output &out)
const {
240 out.
output(
"%s NullEvent to be delivered at %" PRIu64
" with priority %d\n",
252 #endif // SST_CORE_EVENT_H
Output object provides consistant method for outputing data to stdout, stderr and/or sst debug file...
Definition: output.h:54
void execute(void)
Cause this event to fire.
Definition: event.cc:46
void execute(void)
Cause this event to fire.
Definition: event.cc:28
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:35
void operator()(Event *event)
Handler function.
Definition: event.h:143
LinkId_t getLinkId(void) const
Gets the link id associated with this event.
Definition: event.h:76
Base class for all Activities in the SST Event Queue.
Definition: activity.h:53
Handler(classT *const object, PtrMember member)
Constructor.
Definition: event.h:138
virtual void print(const std::string &header, Output &out) const
Virtual function to "pretty-print" this event.
Definition: event.h:239
void operator()(Event *event)
Handler function.
Definition: event.h:117
virtual void operator()(Event *)=0
Handler function.
virtual void print(const std::string &header, Output &out) const
Virtual function to "pretty-print" this event.
Definition: event.h:149
Null Event.
Definition: event.h:232
Link * delivery_link
Link used for delivery.
Definition: event.h:202
Link * getDeliveryLink()
Gets the link id used for delivery.
Definition: event.h:66
Event Handler class with user-data argument.
Definition: event.h:98
std::pair< uint64_t, int > id_type
Type definition of unique identifiers.
Definition: event.h:35
void setPriority(int priority)
Set the priority of the Activity.
Definition: activity.h:339
static const id_type NO_ID
Constatn, default value for id_types.
Definition: event.h:37
SimTime_t getDeliveryTime() const
Return the time at which this Activity will be delivered.
Definition: activity.h:206
void setDeliveryLink(LinkId_t id, Link *link)
Sets the link id used for delivery.
Definition: event.h:56
void output(uint32_t line, const char *file, const char *func, const char *format,...) const
Output the message with formatting as specified by the format parameter.
Definition: output.h:184
int getPriority() const
Return the Priority of this Activity.
Definition: activity.h:211
void setRemoteEvent()
For use by SST Core only.
Definition: event.h:71
Functor classes for Event handling.
Definition: event.h:86
id_type generateUniqueId()
Generates an ID that is unique across ranks, components and events.
Definition: event.cc:40
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:31
Handler(classT *const object, PtrMember member, argT data)
Constructor.
Definition: event.h:111
Link between two components.
Definition: link.h:33
virtual Event * clone()
Clones the event in for the case of a broadcast.
Definition: event.cc:33
Definition: serializable.h:128