local dispatchers = {};\r
local handlers = {};\r
local event_map = {};\r
- local function _rebuild_index() -- TODO optimize index rebuilding\r
- for event, _handlers in pairs(event_map) do\r
- local index = handlers[event];\r
- if index then\r
- for i=#index,1,-1 do index[i] = nil; end\r
- else index = {}; handlers[event] = index; end\r
- for handler in pairs(_handlers) do\r
- t_insert(index, handler);\r
- end\r
- t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end);\r
+ local function _rebuild_index(event) -- TODO optimize index rebuilding\r
+ local _handlers = event_map[event];\r
+ local index = handlers[event];\r
+ if index then\r
+ for i=#index,1,-1 do index[i] = nil; end\r
+ else index = {}; handlers[event] = index; end\r
+ for handler in pairs(_handlers) do\r
+ t_insert(index, handler);\r
end\r
+ t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end);\r
end;\r
local function add_handler(event, handler, priority)\r
local map = event_map[event];\r
map = {[handler] = priority or 0};\r
event_map[event] = map;\r
end\r
- _rebuild_index();\r
+ _rebuild_index(event);\r
end;\r
local function remove_handler(event, handler)\r
local map = event_map[event];\r
if map then\r
map[handler] = nil;\r
- _rebuild_index();\r
+ _rebuild_index(event);\r
end\r
end;\r
local function add_plugin(plugin)\r