Reference Guide Appendix: A1
A1. Source for basic (atomic) model example
//
//testatomic.C
//
#include “hold.h”
int main(int argc,char ** argv)
{
cout << endl;
cout << “TEST FOR ATOMIC: ” << endl;
cout << endl;
hold* p = new hold(“p”,2);
p ->initialize();
entity * e = new entity(“a”);
p ->inject(“in”,e);
p->simulate(2);
message * m = p->get_output();
if (m->is_in_value(e) ) {
cout << endl;
cout << “TEST SATISFIED” << endl;
cout << endl;
}
else {
cout << endl;
cout << “test NOT satisfied” << endl;
cout << endl;
}
return 0;
}
//
// hold.h
//
#include “../devs/atomic.h”
class hold:public atomic{
protected:
timetype hold_time;
entity * store;
public:
hold(char * name,timetype hold_time);
void deltext(timetype e,message * x) ;
void deltint( );
message * out( );
void show_state();
void show_output();
};
//
// hold.C
//
#include “hold.h”
hold::hold(char * name,timetype hold_time):atomic(name){
inports->add(“in”);
inports->add(“start”);
outports->add(“out”);
phases->add(“busy”);
this->hold_time = hold_time ;
}
void hold::deltext(timetype e,message * x) {
Continue();
element *el, *elnext;
for (el=x->get_head(); el!=NULL;el=elnext) {
elnext = el->get_right();
x->remove(el);
content *con;
con = (content *)el->get_ent();
if(strcmp(con->p,”stop”)==0) {
}
if(strcmp(con->p,”start”)==0) {
store = con->val;
hold_in(“busy”,hold_time);
}
}
}
void hold::deltint( ) {
passivate();
}
message * hold::out( ) {
message * m = new message();
content * con = make_content_address(“out”,store, new addrclass(1,1));
store = NULL;
m->add(con);
m->show_message();
return m;
}