16 function new() |
16 function new() |
17 local handlers = {}; |
17 local handlers = {}; |
18 local event_map = {}; |
18 local event_map = {}; |
19 local function _rebuild_index(event) -- TODO optimize index rebuilding |
19 local function _rebuild_index(event) -- TODO optimize index rebuilding |
20 local _handlers = event_map[event]; |
20 local _handlers = event_map[event]; |
21 local index = handlers[event]; |
21 local index = {}; |
22 if index then |
|
23 for i=#index,1,-1 do index[i] = nil; end |
|
24 else index = {}; handlers[event] = index; end |
|
25 for handler in pairs(_handlers) do |
22 for handler in pairs(_handlers) do |
26 t_insert(index, handler); |
23 t_insert(index, handler); |
27 end |
24 end |
28 t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end); |
25 t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end); |
|
26 handlers[event] = index; |
29 end; |
27 end; |
30 local function add_handler(event, handler, priority) |
28 local function add_handler(event, handler, priority) |
31 local map = event_map[event]; |
29 local map = event_map[event]; |
32 if map then |
30 if map then |
33 map[handler] = priority or 0; |
31 map[handler] = priority or 0; |