/******************************************************************* * * DESCRIPTION: class Atomic * * AUTHOR: Amir Barylko & Jorge Beyoglonian * VERSION 2: Daniel Rodriguez * * EMAIL: mailto://amir@dc.uba.ar * mailto://jbeyoglo@dc.uba.ar * mailto://drodrigu@dc.uba.ar * * DATE: 27/6/1998 * DATE: 25/4/1999 (v2) * *******************************************************************/ #ifndef __ATOMIC_H #define __ATOMIC_H /** include files **/ #include "model.h" //class Model /** foward declarations **/ class MainSimulator ; class Simulator ; class ExternalMessage ; class InternalMessage ; class MessageBag; class CollectMessage; #define ATOMIC_NAME "Atomic" /** definitions **/ class Atomic : public Model { public: virtual ~Atomic() // Destructor {} protected: friend class Simulator ; enum State { active, passive } ; Atomic( const string &name = "Atomic" ) // Constructor : Model( name ) , st( passive ) {} Atomic( const Atomic & ) ; // Copy constructor Atomic &operator = ( const Atomic & ); // Assignment operator int operator ==( const Atomic & ) const; // Equality operator virtual Model &initFunction() = 0 ; virtual Model &externalFunction( const ExternalMessage & ) ; virtual Model &externalFunction( const MessageBag &) ; virtual Model &internalFunction( const InternalMessage & ) = 0 ; virtual Model &outputFunction(const CollectMessage & ) = 0 ; virtual Model &confluentFunction(const InternalMessage &, const MessageBag &); // Rami: to be removed later ... just kept to avoid compilation errors // virtual Model &outputFunction( const InternalMessage & ) = 0 ; // Model &holdIn( const State &, const Time & ) ; Model &passivate(); Model &state( const State &s ) { st = s; return *this; } const State &state() const {return st;} virtual string className() const {return ATOMIC_NAME;} virtual Processor& createProcessor() ; private: friend class MainSimulator ; State st; }; // class Atomic #endif //__ATOMIC_H