"I am a person who works hard and plays hard."

Yuan Wei
Second Year Graduate Student Department of Computer Science
University of Virginia Charlottesville, VA 22903
Email: yw3f@cs.virginia.edu


Source Code Analysis

Main Page   Compound List   File List   Compound Members   File Members  

eventq.h File Reference

#include <stdio.h>
#include "host.h"
#include "misc.h"
#include "bitmap.h"

Include dependency graph for eventq.h:

Include dependency graph

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Compounds

Typedefs

Enumerations

Functions


Typedef Documentation

typedef unsigned int EVENTQ_ID_TYPE
 

Definition at line 96 of file eventq.h.

Referenced by eventq_execute(), eventq_queue_addop(), eventq_queue_callback(), eventq_queue_clearbit(), eventq_queue_setbit(), eventq_queue_setflag(), and eventq_remove().


Enumeration Type Documentation

enum eventq_action
 

Enumeration values:
EventSetBit 
EventClearBit 
EventSetFlag 
EventAddOp 
EventCallback 

Definition at line 87 of file eventq.h.

00087                    {
00088   EventSetBit,                  /* set a bit: int *, bit # */
00089   EventClearBit,                /* clear a bit: int *, bit # */
00090   EventSetFlag,                 /* set a flag: int *, value */
00091   EventAddOp,                   /* add a value to a summand */
00092   EventCallback,                /* call event handler: fn * */
00093 };


Function Documentation

void eventq_dump FILE *    stream
 

Definition at line 1903 of file sim-outorder.c.

References eventq_desc::action, eventq_desc::eventq_data::addop, eventq_desc::eventq_data::bit, eventq_desc::eventq_data::callback, eventq_desc::data, EventAddOp, EventCallback, EventClearBit, EventSetBit, EventSetFlag, eventq_desc::eventq_data::flag, eventq_desc::next, panic(), and eventq_desc::when.

01904 {
01905   struct RS_link *ev;
01906 
01907   if (!stream)
01908     stream = stderr;
01909 
01910   fprintf(stream, "** event queue state **\n");
01911 
01912   for (ev = event_queue; ev != NULL; ev = ev->next)
01913     {
01914       /* is event still valid? */
01915       if (RSLINK_VALID(ev))
01916         {
01917           struct RUU_station *rs = RSLINK_RS(ev);
01918 
01919           fprintf(stream, "idx: %2d: @ %.0f\n",
01920                   (int)(rs - (rs->in_LSQ ? LSQ : RUU)), (double)ev->x.when);
01921           ruu_dumpent(rs, rs - (rs->in_LSQ ? LSQ : RUU),
01922                       stream, /* !header */FALSE);
01923         }
01924     }
01925 }

int eventq_execute EVENTQ_ID_TYPE    id
 

Definition at line 206 of file eventq.c.

References EVENTQ_ID_TYPE, EXECUTE_ACTION, FALSE, eventq_desc::id, eventq_desc::next, and TRUE.

00207 {
00208   struct eventq_desc *prev, *ev;
00209 
00210   for (prev=NULL,ev=eventq_pending; ev; prev=ev,ev=ev->next)
00211     {
00212       if (ev->id == id)
00213         {
00214           if (prev)
00215             {
00216               /* middle of end of list */
00217               prev->next = ev->next;
00218             }
00219           else /* !prev */
00220             {
00221               /* beginning of list */
00222               eventq_pending = ev->next;
00223             }
00224 
00225           /* handle action, now is munged */
00226           EXECUTE_ACTION(ev, 0);
00227 
00228           /* put event on free list */
00229           ev->next = eventq_free;
00230           eventq_free = ev;
00231 
00232           /* return success */
00233           return TRUE;
00234         }
00235     }
00236   /* not found */
00237   return FALSE;
00238 }

void eventq_init int    max_events
 

Definition at line 88 of file eventq.c.

References eventq_event_count, and eventq_max_events.

00089 {
00090   eventq_max_events = max_events;
00091   eventq_event_count = 0;
00092   eventq_pending = NULL;
00093   eventq_free = NULL;
00094 }

EVENTQ_ID_TYPE eventq_queue_addop SS_TIME_TYPE    when,
int *    summand,
int    addend
 

Definition at line 160 of file eventq.c.

References __QUEUE_EVENT, EventAddOp, and EVENTQ_ID_TYPE.

00161 {
00162   EVENTQ_ID_TYPE id;
00163   __QUEUE_EVENT(when, id,                                               \
00164                 new->action = EventAddOp;                               \
00165                 new->data.addop.summand = summand;                      \
00166                 new->data.addop.addend = addend);
00167   return id;
00168 }

EVENTQ_ID_TYPE eventq_queue_callback SS_TIME_TYPE    when,
void(*    fn)(SS_TIME_TYPE time, int arg),
int    arg
 

Definition at line 171 of file eventq.c.

References __QUEUE_EVENT, EventCallback, and EVENTQ_ID_TYPE.

00173 {
00174   EVENTQ_ID_TYPE id;
00175   __QUEUE_EVENT(when, id,                                               \
00176                 new->action = EventCallback; new->data.callback.fn = fn;\
00177                 new->data.callback.arg = arg);
00178   return id;
00179 }

EVENTQ_ID_TYPE eventq_queue_clearbit SS_TIME_TYPE    when,
BITMAP_ENT_TYPE   bmap,
int    sz,
int    bitnum
 

Definition at line 139 of file eventq.c.

References __QUEUE_EVENT, BITMAP_ENT_TYPE, EventClearBit, and EVENTQ_ID_TYPE.

00141 {
00142   EVENTQ_ID_TYPE id;
00143   __QUEUE_EVENT(when, id,                                               \
00144                 new->action = EventClearBit; new->data.bit.bmap = bmap; \
00145                 new->data.bit.sz = sz; new->data.bit.bitnum = bitnum);
00146   return id;
00147 }

EVENTQ_ID_TYPE eventq_queue_setbit SS_TIME_TYPE    when,
BITMAP_ENT_TYPE   bmap,
int    sz,
int    bitnum
 

Definition at line 128 of file eventq.c.

References __QUEUE_EVENT, BITMAP_ENT_TYPE, EVENTQ_ID_TYPE, and EventSetBit.

00130 {
00131   EVENTQ_ID_TYPE id;
00132   __QUEUE_EVENT(when, id,                                               \
00133                 new->action = EventSetBit; new->data.bit.bmap = bmap;   \
00134                 new->data.bit.sz = sz; new->data.bit.bitnum = bitnum);
00135   return id;
00136 }

EVENTQ_ID_TYPE eventq_queue_setflag SS_TIME_TYPE    when,
int *    pflag,
int    value
 

Definition at line 150 of file eventq.c.

References __QUEUE_EVENT, EVENTQ_ID_TYPE, and EventSetFlag.

00151 {
00152   EVENTQ_ID_TYPE id;
00153   __QUEUE_EVENT(when, id,                                               \
00154                 new->action = EventSetFlag;                             \
00155                 new->data.flag.pflag = pflag; new->data.flag.value = value);
00156   return id;
00157 }

int eventq_remove EVENTQ_ID_TYPE    id
 

Definition at line 243 of file eventq.c.

References EVENTQ_ID_TYPE, FALSE, eventq_desc::id, eventq_desc::next, and TRUE.

00244 {
00245   struct eventq_desc *prev, *ev;
00246 
00247   for (prev=NULL,ev=eventq_pending; ev; prev=ev,ev=ev->next)
00248     {
00249       if (ev->id == id)
00250         {
00251           if (prev)
00252             {
00253               /* middle of end of list */
00254               prev->next = ev->next;
00255             }
00256           else /* !prev */
00257             {
00258               /* beginning of list */
00259               eventq_pending = ev->next;
00260             }
00261 
00262           /* put event on free list */
00263           ev->next = eventq_free;
00264           eventq_free = ev;
00265 
00266           /* return success */
00267           return TRUE;
00268         }
00269     }
00270   /* not found */
00271   return FALSE;
00272 }

void eventq_service_events SS_TIME_TYPE    now
 

Definition at line 275 of file eventq.c.

References EXECUTE_ACTION, eventq_desc::next, and eventq_desc::when.

00276 {
00277   while (eventq_pending && eventq_pending->when <= now)
00278     {
00279       struct eventq_desc *ev = eventq_pending;
00280 
00281       /* handle action */
00282       EXECUTE_ACTION(ev, now);
00283 
00284       /* return the event record to the free list */
00285       eventq_pending = ev->next;
00286       ev->next = eventq_free;
00287       eventq_free = ev;
00288   }
00289 }



UVa CS Department of Computer Science
School of Engineering, University of Virginia
151 Engineer's Way, P.O. Box 400740
Charlottesville, Virginia 22904-4740

(434) 982-2200  Fax: (434) 982-2214