/******************************************************************* * * DESCRIPTION: class Coordinator * * AUTHOR: Amir Barylko & Jorge Beyoglonian * Version 2: Daniel A. Rodriguez * * EMAIL: mailto://amir@dc.uba.ar * mailto://jbeyoglo@dc.uba.ar * mailto://drodrigu@dc.uba.ar * * DATE: 27/6/1998 * DATE: 04/6/1999 (v2) * *******************************************************************/ #ifndef __COORDINATOR_H #define __COORDINATOR_H /** include files **/ #include "process.h" // class Processor #include /** forward declarations **/ class Coupled; /** declarations **/ class Coordinator: public Processor { public: typedef map< ProcId, Time , less > DependentList; Coordinator( Coupled * ); //constructor virtual Processor &receive( const InitMessage & ) ; virtual Processor &receive( const InternalMessage & ) ; virtual Processor &receive( const CollectMessage &); virtual Processor &receive( const DoneMessage & ) ; virtual Processor &receive( const OutputMessage & ) ; // Processor &receive( const ExternalMessage & ) ; protected: Coordinator(const Coordinator & ) ; // Copy constructor Coordinator& operator=(const Coordinator & ) ; // Assignment operator int operator==(const Coordinator & ) const ; // Equality operator //Rami // Processor &id( const ProcId &pid ) ; // const ProcId &inminentChild() const // {return inminent;} // Coordinator &inminentChild( const ProcId & ) ; DependentList dependents; ProcId parentId; typedef set ProcSet; ProcSet synchronizeList; virtual Processor &sortExternalMessage( const ExternalMessage &); virtual Processor &sortOutputMessage( const OutputMessage &); virtual Time &calculateNextChange( const Time&) const ; Coordinator& doneCount(int d); int doneCount() const; // long receivedX; private: // ProcId inminent ; long donecount; Coordinator &recalcInminentChild() ; }; // class Coordinator /** inline **/ /* * inline Coordinator &Coordinator::inminentChild( const ProcId &mid ) { inminent = mid ; return *this ; } */ inline Coordinator & Coordinator::doneCount(int d) { donecount = d; return *this; } inline int Coordinator::doneCount() const { return donecount; } #endif //__COORDINATOR_H