public static void remove_handler(Event_Type type, Handler fn, object user) { event_handler_entry prev = null; event_handler_entry curr = event_handlers[(int)type]; /* Look for the entry in the list */ while (curr != null) { /* Check if this is the entry we want to remove */ if (curr.fn == fn && curr.user == user) { if (prev == null) { event_handlers[(int)type] = curr.next; } else { prev.next = curr.next; } //mem_free(curr); return; } prev = curr; curr = curr.next; } }
static void dispatch(Event_Type type, Game_Event data) { event_handler_entry t = event_handlers[(int)type]; /* * Send the word out to all interested event handlers. */ while (t != null) { /* Call the handler with the relevant data */ t.fn(type, data, t.user); t = t.next; } }
public static void add_handler(Event_Type type, Handler fn, object user) { event_handler_entry e; Misc.assert(fn != null); /* Make a new entry */ e = new event_handler_entry(); e.fn = fn; e.user = user; /* Add it to the head of the appropriate list */ e.next = event_handlers[(int)type]; event_handlers[(int)type] = e; }