Diff

util/events.lua @ 1180:8c5d945c1f35

util.events: Much more efficient index building
author Waqas Hussain <waqas20@gmail.com>
date Sun, 17 May 2009 02:06:35 +0500
parent 1175:edef0c10e076
child 1181:dffbb7d1da4b
line wrap: on
line diff
--- a/util/events.lua	Sat May 16 20:48:07 2009 +0100
+++ b/util/events.lua	Sun May 17 02:06:35 2009 +0500
@@ -11,17 +11,16 @@
 	local dispatchers = {};
 	local handlers = {};
 	local event_map = {};
-	local function _rebuild_index() -- TODO optimize index rebuilding
-		for event, _handlers in pairs(event_map) do
-			local index = handlers[event];
-			if index then
-				for i=#index,1,-1 do index[i] = nil; end
-			else index = {}; handlers[event] = index; end
-			for handler in pairs(_handlers) do
-				t_insert(index, handler);
-			end
-			t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end);
+	local function _rebuild_index(event) -- TODO optimize index rebuilding
+		local _handlers = event_map[event];
+		local index = handlers[event];
+		if index then
+			for i=#index,1,-1 do index[i] = nil; end
+		else index = {}; handlers[event] = index; end
+		for handler in pairs(_handlers) do
+			t_insert(index, handler);
 		end
+		t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end);
 	end;
 	local function add_handler(event, handler, priority)
 		local map = event_map[event];
@@ -31,13 +30,13 @@
 			map = {[handler] = priority or 0};
 			event_map[event] = map;
 		end
-		_rebuild_index();
+		_rebuild_index(event);
 	end;
 	local function remove_handler(event, handler)
 		local map = event_map[event];
 		if map then
 			map[handler] = nil;
-			_rebuild_index();
+			_rebuild_index(event);
 		end
 	end;
 	local function add_plugin(plugin)