/************************************************************************ ** ** FILE : simget.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "simget.h" #include "sim.h" #include "tra.h" #include #include #include #define RAND_MAX ((1<<31)-1) /************************************************************************* ** FUNKTION: SimGetInit ** ZWECK: Initialisiert Zufallszahlengenerator. *************************************************************************/ void SimGetInit() { unsigned int e; srand( 17); } /************************************************************************* ** FUNKTION: SimGetRandomT ** ZWECK: Waehlt aus einer gewuenschten Menge eine Transition aus ** Bei der Menge kann es sich um AKTIVe oder KONFLIKTbehaftete ** Transitionen handeln. Die Auswahl ist zufaellig. Die Prioritaeten ** der Transitionen dienen als Gewichte. ** EINGABE: Typ der Menge: AKTIV oder KONFLIKT ** RETURN: Nr der ausgewaehlten Transition. ** ANMERK: ACHTUNG: ** 1. TransCond und SumPrio muessen aktuell sein. ** 2. Es muss mind 1 aktive Transition existieren. ** 3. for-Schleife anthaelt KEINE Abbruchbedingung ! ** falls 1. und 2. nicht zutrifft, knallt es. *************************************************************************/ int SimGetRandomT( Typ) char Typ; { register int i; register TRANSITION **t; register char *c; int x; int sum = 0; x = (int)( ( (float)(sumPrio-1) )*( (float)random() )/( (float)RAND_MAX ) ); for (i=0, t=TraTrans, c=TransCond; ;i++, t++, c++) if ( *c==Typ ) { sum += (*t)->Prio; if (x < sum) return (i); } } /************************************************************************* ** FUNKTION: SimGetFirstT ** ZWECK: Liefert die Nummer der ersten AKTIVen oder KONFLIKTbehafteten ** Transition. ** EINGABE: Typ der Aktivitaet. ** RETURN: TNr *************************************************************************/ int SimGetFirstT( Typ) char Typ; { register int i; register char *c; for (i=0, c=TransCond; ;i++, c++) if ( *c==Typ ) return (i); }