def add_deact_block(t, inv, vert, proc, sm, ta): s = t.src.parent l = Location(t.src.name + "_" + t.dst.name + "_deact") l.iscommit = True proc.addLocation(l) tree = make_deact_tree(t.src, sm, ta) newt = add_tr(ta, proc, proc.locations[s.name + "_active"], proc.locations[t.src.name + "_" + t.dst.name + "_deact"], t.guard, t.trigger, None) newt.addGuard(trig(t.src, tree, sm)) c = Channel(t.src.name + "_bdeact", "b", False) ta.addChannel(c) tr = Transition(proc.locations[t.src.name + "_" + t.dst.name + "_deact"], vert, sync=c.name + "!") add_assign(tr, t.effect, ta) proc.addTransition(tr) procset = make_deact_set(t.src, sm, ta) for pair in procset: p = (q for q in ta.processes if q.name == pair[0].parent.name).next() upstate = up(pair[0]) if upstate.parent.isAnd(): upstate = upstate.parent p = (q for q in ta.processes if q.name == upstate.parent.name).next() tr = Transition(p.locations[upstate.name + "_active"], p.locations["idle"], sync=c.name + "?") p.addTransition(tr)
def add_act_block(e, s, proc, sm, ta): l = Location(e.name + "_act") l.iscommit = True proc.addLocation(l) c = Channel(e.name + "_bact", "b", False) ta.addChannel(c) tr = Transition(l, proc.locations[s.name + "_active"], sync=c.name + "!") proc.addTransition(tr) #TODO: add invariant to l procset = make_act_set(e, sm, ta) for pair in procset: p = (q for q in ta.processes if q.name == pair[1].parent.name).next() upstate = up(pair[1]) tr = Transition(p.locations["idle"], p.locations[upstate.name + "_active"], sync=c.name + "?") p.addTransition(tr)