/******************************************************************* * * DESCRIPTION: struct Event * * AUTHOR: Amir Barylko & Jorge Beyoglonian * Version 2: Daniel Rodriguez * Version 3: Qi (Jacky) Liu * * EMAIL: mailto://amir@dc.uba.ar * mailto://jbeyoglo@dc.uba.ar * mailto://drodrigu@dc.uba.ar * mailto://liuqi@sce.carleton.ca * * DATE: 27/06/1998 * DATE: 11/10/1998 (v2) * DATE: Nov. 10, 2005 (v3) *******************************************************************/ #ifndef __EVENT_H #define __EVENT_H /** include files **/ #include "VTime.hh" // class VTime #include "real.h" // class Real #include "port.h" // class Port /** foward declarations **/ /** definitions **/ struct Event { VTime time ; //Jacky: this is the recvTime! const Port *port ; Real value ; /* #ifdef JACKY_RB_EVENT //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee //Nov. 13, 2005 //we need to record the sendTime of the (X) message that is derived from this event VTime sendTime; #endif //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee */ //#ifndef JACKY_RB_EVENT //original version Event( const VTime = VTime::Zero, const Port * = NULL, const Real = Real(0) ); /* #else // this is the new version Nov. 13, 2005 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Event( const VTime = VTime::Zero, //recvTime const Port * = NULL, //port const Real = Real(0), //value const VTime = VTime::Zero //sendTime, added by Jacky ); #endif //end JACKY_RB_EVENT eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee */ bool operator < ( const Event &ev ) { //Jacky: compare events based on their "recvTime" return time < ev.time; } Event &operator =( const Event &ev ) ; //Jacky: function for comparing event based on their recvTime, port, and value // sendTime is used just in determining event rollbacks, it does not participate in comparison! bool operator == ( const Event &ev) { return ((time == ev.time) && (port == ev.port) && (value == ev.value)); } const string asString() const { //#ifndef JACKY_RB_EVENT //original version return time.asString() + " / " + port->asString() + " / " + value.asString(); /* #else //this is the new version for showing the sendTime of the event eeeeeeeeeeeeeeeeeeeeeeeee return "recvTime:" + time.asString() + " / " + port->asString() + " / " + value.asString() + " / sendTime:" + sendTime.asString() ; #endif // eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee */ } } ; /** inline methods **/ //#ifndef JACKY_RB_EVENT //original version inline Event::Event( const VTime t, const Port *p , const Real v) : time( t ) , port( p ) , value( v ) {} inline Event &Event::operator =( const Event &ev ) { time = ev.time ; port = ev.port ; value = ev.value ; return *this; } /* #else // this is the new version Nov. 13, 2005 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee inline Event::Event( const VTime recv_time, const Port *p , const Real v, const VTime send_time) : time( recv_time ) , port( p ) , value( v ) , sendTime( send_time ) //added {} inline Event &Event::operator =( const Event &ev ) { time = ev.time ; port = ev.port ; value = ev.value ; sendTime = ev.sendTime ; //added return *this; } #endif //end JACKY_RB_EVENT eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee */ #endif //__EVENT_H