All pastes #241555 Raw Edit

Mine

public text v1 · immutable
·published 2006-11-06 09:22 UTC
rendered paste body
function a(object, params)
	params.x = params.x + 0.5
end

function b(object, params)
	params.x = params.x + 100
end

function c(object, params)
	params.x = params.x * 2
end

function add_hook(object, name, fn, priority)
	local h = {name = name, fn = fn, priority = priority}
	object.hooks = object.hooks or {}
	local n = #object.hooks + 1
	for i, v in ipairs(object.hooks) do
		if v.priority <= priority then n = i break end
	end
	table.insert(object.hooks, n, h);
end

function run_hooks(object, name, params)
	for i, v in ipairs(object.hooks) do
		if (v.name == name) then
			v.fn(object, params)
			if params.quit then break end
		end
	end		
end

obj = {}
add_hook(obj, "qwe", a, 100)
add_hook(obj, "qwe", b, 1000)
add_hook(obj, "qweqwe", c, 300)
params = {x = 2}
run_hooks(obj, "qwe", params)
print("Result: params.x = " .. tostring(params.x))