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;
}