package cute.dcute; import cute.concolic.Globals; import java.util.IdentityHashMap; import java.util.Iterator; /** * . * User: ksen * Date: Oct 9, 2005 * Time: 2:30:44 PM * To change this template use File | Settings | File Templates. */ abstract public class Actor { protected IdentityHashMap vc; private int qid = 0; public Actor(){ vc = new IdentityHashMap(); vc.put(this,new Integer(1)); } public void send(Actor a,Message m){ send(a,qid++,m); } public void send(Actor a,int qid,Message m){ addOneToVc(); if(Globals.globals.information.optimalDistributed) DScheduler.sched.checkAndSetRace(this,a,qid); m.vc = new IdentityHashMap(vc); DScheduler.sched.sendMessage(a,qid,m); } abstract public void receive(Message m); public void addOneToVc(Actor a){ Integer time = (Integer)vc.get(a); if(time==null){ vc.put(a,new Integer(1)); } else { vc.put(a,new Integer(time.intValue()+1)); } } public void addOneToVc(){ addOneToVc(this); } public int getTime(Actor t){ Integer time = (Integer)vc.get(t); if(time==null){ return 0; } else { return time.intValue(); } } public void putTime(Actor t,int time){ if(time==0){ vc.remove(t); } else { vc.put(t,new Integer(time)); } } public void maxVc(IdentityHashMap vc2){ if(vc2==null) return; for (Iterator iterator = vc2.keySet().iterator(); iterator.hasNext();) { Actor t = (Actor) iterator.next(); int time2 = ((Integer)vc2.get(t)).intValue(); int time1 = getTime(t); if(time2>time1){ putTime(t,time2); } } } public boolean isLE(IdentityHashMap vc2){ for (Iterator iterator = vc.keySet().iterator(); iterator.hasNext();) { Actor t1 = (Actor) iterator.next(); Integer time2 = (Integer)vc2.get(t1); int ltime2; if(time2==null){ ltime2 = 0; } else { ltime2 = time2.intValue(); } if(getTime(t1)>ltime2){ return false; } } return true; } public boolean isGE(IdentityHashMap vc2){ for (Iterator iterator = vc2.keySet().iterator(); iterator.hasNext();) { Actor t2 = (Actor) iterator.next(); Integer time2 = (Integer)vc2.get(t2); int ltime2; if(time2==null){ ltime2 = 0; } else { ltime2 = time2.intValue(); } if(ltime2>getTime(t2)) return false; } return true; } public boolean isIndependent(IdentityHashMap vc2){ return !isLE(vc2) && !isGE(vc2); } }