MP-Gadget  5.0.1.dev1-76bc7d4726-dirty
event.c
Go to the documentation of this file.
1 #include "event.h"
2 #include <stdlib.h>
3 #include <string.h>
4 
5 int
6 event_listen(EventSpec * eh, eventfunc func, void * userdata)
7 {
8  int i;
9  for(i = 0; i < eh->used; i ++) {
10  if(eh->h[i].func == func && eh->h[i].userdata == userdata) {
11  return 0;
12  }
13  }
14  if(eh->used == MAXEH) {
15  /* overflown */
16  abort();
17  }
18 
19  eh->h[eh->used].func = func;
20  eh->h[eh->used].userdata = userdata;
21  eh->used ++;
22  return 0;
23 }
24 
25 int
26 event_unlisten(EventSpec * eh, eventfunc func, void * userdata)
27 {
28  int i;
29  for(i = 0; i < eh->used; i ++) {
30  if(eh->h[i].func == func && eh->h[i].userdata == userdata) {
31  break;
32  }
33  }
34  if(i == eh->used || eh->used == 0) {
35  return 1;
36  }
37  memmove(&eh->h[i], &eh->h[i+1], sizeof(eh->h[0]) * (eh->used - i - 1));
38  eh->used --;
39  return 0;
40 }
41 
42 
43 int
44 event_emit(EventSpec * eh, EIBase * event)
45 {
46 
47  int i;
48  for(i = 0; i < eh->used; i ++) {
49  eh->h[i].func(event, eh->h[i].userdata);
50  }
51  return 0;
52 }
53 
54 EventSpec EventSlotsFork = {"SlotsFork", 0, {{0}}};
55 EventSpec EventSlotsAfterGC = {"SlotsAfterGC", 0, {{0}}};
56 
57 
EventSpec EventSlotsAfterGC
Definition: event.c:55
int event_emit(EventSpec *eh, EIBase *event)
Definition: event.c:44
int event_listen(EventSpec *eh, eventfunc func, void *userdata)
Definition: event.c:6
int event_unlisten(EventSpec *eh, eventfunc func, void *userdata)
Definition: event.c:26
EventSpec EventSlotsFork
Definition: event.c:54
int(* eventfunc)(EIBase *event, void *userdata)
Definition: event.h:12
#define MAXEH
Definition: event.h:20
Definition: event.h:8
eventfunc func
Definition: event.h:16
void * userdata
Definition: event.h:17
int used
Definition: event.h:25
EventHandler h[MAXEH]
Definition: event.h:26