/************************************************************************ ** ** FILE : simaktiv.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "simaktiv.h" #include "sim.h" #include "ka.h" #include "tra.h" /************************************************************************* ** FUNKTION: TestOnActiv ** ZWECK: Beurteilt, ob eine Transition aktiv zu setzen ist. ** EINGABE: Transition ** RETURN: TOT oder AKTIV ** ANMERK: Vorgehensweise fuer Transition T: ** fuer jede Stelle S tue: ** if (existiert ST-Kante) ** if (ST-Kante ist NegativKante) ** if (Markierung( S) <> 0) ** TOT ** else ** if (-Markierung( S) > Delta( ST-Kante) ) ** TOT *************************************************************************/ static char TestOnAktiv( TNr) int TNr; { register int i; register int *m; register KANTE **k; char back = TOT; k =&(KaKante[ 0][ TNr].NachTrans); for (i=0, m=Mark; iNegativKante) { if ( (*m) ) return TOT; } else if (*m > (*k)->delta) return TOT; } k+=KaSDisp; } return back; } /************************************************************************* ** FUNKTION: SimAktiv ** ZWECK: Berechnet die Aktivitaet aller Transitionen bezueglich der ** Markierung in Marke. Die Anzahl der aktiven Transitionen ** und die Summe der einzelnen Prioritaeten wird festgehalten. ** GLOBAL: TransCond wird VOLLSTAENDIG neu berechnet. ** nAktiv und SumPrio. ** ANMERK: Diese Funktion liefert eine nicht auf Konfliktfreiheit ** gepruefte Schaltmenge. Fuer den Seriellen Simulationsmodus ** ist sie ausreichend. *************************************************************************/ void SimAktiv() { register int i; register TRANSITION **t; register char *c; sumPrio = nAktiv = 0; for (i=0, t=TraTrans, c=TransCond; iPrio; } else *c=TOT; } /************************************************************************* ** FUNKTION: SimAktivOnTC ** ZWECK: Berechnet die Aktivitaet bestimmter Transitionen bezueglich der ** Markierung in Marke. Die Anzahl der aktiven Transitionen ** und die Summe der einzelnen Prioritaeten wird festgehalten. ** GLOBAL: TransCond wird partiell neu berechnet. Betroffen sind die ** Transitionen, die im Zustand AKTIV oder KONFLIKT sind. ** nAktiv und SumPrio. ** ANMERK: Diese Funktion liefert eine nicht auf Konfliktfreiheit ** gepruefte Schaltmenge. Es muss ein SimAktiv vorausgegangen ** sein. *************************************************************************/ void SimAktivOnTC() { register int i; register TRANSITION **t; register char *c; sumPrio = nAktiv = 0; for (i=0, t=TraTrans, c=TransCond; iPrio; } }