Mercurial > prosody-hg
comparison util/events.lua @ 3498:3f52f3d9db5a
util.events: Removed dispatcher creation functions (these weren't being used).
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Fri, 17 Sep 2010 04:09:58 +0500 |
| parents | 692b3c6c5bd2 |
| children | 91c55ae31ef3 |
comparison
equal
deleted
inserted
replaced
| 3497:e9159b325e33 | 3498:3f52f3d9db5a |
|---|---|
| 5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 | 9 |
| 10 local ipairs = ipairs; | |
| 11 local pairs = pairs; | 10 local pairs = pairs; |
| 12 local t_insert = table.insert; | 11 local t_insert = table.insert; |
| 13 local t_sort = table.sort; | 12 local t_sort = table.sort; |
| 14 local select = select; | |
| 15 | 13 |
| 16 module "events" | 14 module "events" |
| 17 | 15 |
| 18 function new() | 16 function new() |
| 19 local dispatchers = {}; | |
| 20 local handlers = {}; | 17 local handlers = {}; |
| 21 local event_map = {}; | 18 local event_map = {}; |
| 22 local function _rebuild_index(event) -- TODO optimize index rebuilding | 19 local function _rebuild_index(event) -- TODO optimize index rebuilding |
| 23 local _handlers = event_map[event]; | 20 local _handlers = event_map[event]; |
| 24 local index = handlers[event]; | 21 local index = handlers[event]; |
| 55 local function remove_handlers(handlers) | 52 local function remove_handlers(handlers) |
| 56 for event, handler in pairs(handlers) do | 53 for event, handler in pairs(handlers) do |
| 57 remove_handler(event, handler); | 54 remove_handler(event, handler); |
| 58 end | 55 end |
| 59 end; | 56 end; |
| 60 local function _create_dispatcher(event) -- FIXME duplicate code in fire_event | 57 local function fire_event(event, ...) |
| 61 local h = handlers[event]; | |
| 62 if not h then h = {}; handlers[event] = h; end | |
| 63 local dispatcher = function(...) | |
| 64 for i=1,#h do | |
| 65 local ret = h[i](...); | |
| 66 if ret ~= nil then return ret; end | |
| 67 end | |
| 68 end; | |
| 69 dispatchers[event] = dispatcher; | |
| 70 return dispatcher; | |
| 71 end; | |
| 72 local function get_dispatcher(event) | |
| 73 return dispatchers[event] or _create_dispatcher(event); | |
| 74 end; | |
| 75 local function fire_event(event, ...) -- FIXME duplicates dispatcher code | |
| 76 local h = handlers[event]; | 58 local h = handlers[event]; |
| 77 if h then | 59 if h then |
| 78 for i=1,#h do | 60 for i=1,#h do |
| 79 local ret = h[i](...); | 61 local ret = h[i](...); |
| 80 if ret ~= nil then return ret; end | 62 if ret ~= nil then return ret; end |
| 81 end | 63 end |
| 82 end | 64 end |
| 83 end; | 65 end; |
| 84 local function get_named_arg_dispatcher(event, ...) | |
| 85 local dispatcher = get_dispatcher(event); | |
| 86 local keys = {...}; | |
| 87 local data = {}; | |
| 88 return function(...) | |
| 89 for i, key in ipairs(keys) do data[key] = select(i, ...); end | |
| 90 dispatcher(data); | |
| 91 end; | |
| 92 end; | |
| 93 return { | 66 return { |
| 94 add_handler = add_handler; | 67 add_handler = add_handler; |
| 95 remove_handler = remove_handler; | 68 remove_handler = remove_handler; |
| 96 add_plugin = add_plugin; | 69 add_plugin = add_plugin; |
| 97 remove_plugin = remove_plugin; | 70 remove_plugin = remove_plugin; |
| 98 get_dispatcher = get_dispatcher; | |
| 99 fire_event = fire_event; | 71 fire_event = fire_event; |
| 100 get_named_arg_dispatcher = get_named_arg_dispatcher; | |
| 101 _dispatchers = dispatchers; | |
| 102 _handlers = handlers; | 72 _handlers = handlers; |
| 103 _event_map = event_map; | 73 _event_map = event_map; |
| 104 }; | 74 }; |
| 105 end | 75 end |
| 106 | 76 |
