📄 event.c
字号:
/*****************************************************************************
*** Author: Hussein F. Salama ***
*** Date: September 9, 1994 ***
*** File: event.c ***
*** C++ classes Event, EventListEntry and TheEventlist to be used in a ***
*** discrete event simulator for computer networks ***
*****************************************************************************/
#include "event.h"
void TheEventList::deleteEvent() //removes the first event from the event list.
//returns the id of the removed event.
{
EventListEntry *temp;
temp = eventListHead;
eventListHead = eventListHead->next;
if (eventListHead == NULL) eventListTail = NULL;
else eventListHead->prev = NULL;
delete temp;
};
void TheEventList::addEventTop(EventListEntry *e) {
/* inserts an event in the event list. */
/* searches the list from top down */
/* keeps the list in increasing time */
/* order, so the first event is always */
/* the most imminent one. */
/* the insert is currently done with a */
/* linear search. if time is a problem, */
/* we can use a faster search. */
short stop = 0;
EventListEntry *dum;
e->next = eventListHead;
if (eventListHead == NULL)
eventListHead = eventListTail = e;
else if (eventListHead->event->time > e->event->time) {
eventListHead->prev = e;
eventListHead = e;
}
else while(!stop) {
dum = e->next;
e->next = e->next->next;
if (e->next == NULL) {
eventListTail->next = e;
e->prev = eventListTail;
eventListTail = e;
stop = 1;
}
else if (e->next->event->time > e->event->time) {
dum->next = e;
e->prev = dum;
e->next->prev = e;
stop = 1;
};
};
};
void TheEventList::addEventBottom(EventListEntry *e) {
/* inserts an event in the event list. */
/* searches the list from bottom up */
/* keeps the list in increasing time */
/* order, so the first event is always */
/* the most imminent one. */
/* the insert is currently done with a */
/* linear search. if time is a problem, */
/* we can use a faster search. */
short stop = 0;
EventListEntry *dum;
e->prev = eventListTail;
if (eventListTail == NULL)
eventListHead = eventListTail = e;
else if (eventListTail->event->time <= e->event->time) {
eventListTail->next = e;
eventListTail = e;
}
else while(!stop) {
dum = e->prev;
e->prev = e->prev->prev;
if (e->prev == NULL) {
eventListHead->prev = e;
e->next = eventListHead;
eventListHead = e;
stop = 1;
}
else if (e->prev->event->time <= e->event->time) {
dum->prev = e;
e->next = dum;
e->prev->next = e;
stop = 1;
};
};
};
void TheEventList::insertEvent(int mode, void *ptr, int n, double t, Data *d)
/* inserts an event in the event list. */
/* n is an integer; it denotes the type of the event *
* that occured. t is the time instant at which the event will occur. */
/* ptr points to the owner of the event, and d point to the event's data */
{
EventListEntry *tmp;
tmp = new EventListEntry;
tmp->event->type = n;
tmp->event->data =d;
tmp->event->time = t;
//printf("insert event at time %e of type %d\n", tmp->event->time,
// tmp->event->type);
tmp->event->pointer = ptr;
if (mode == top) addEventTop(tmp);
else addEventBottom(tmp);
};
void TheEventList::clear() { //Deletes all events in the list
while (eventListHead != NULL) deleteEvent();
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -