All pastes #241560 Raw Edit

Untitled

public text v1 · immutable
·published 2006-11-06 09:38 UTC
rendered paste body
-- Add a hook
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

-- Remove hooks by name
function remove_hooks(object, name)
	if object.hooks then
		for i, v in ipairs(object.hooks) do
			if v.name == name then table.remove(object.hooks, i) end
		end
	end
end

-- Remove a hook by reference
function remove_hook(object, hook)
	if object.hooks then
		for i, v in ipairs(object.hooks) do
			if v == hook then table.remove(object.hooks, i) end
		end
	end
end

-- Run hooks by name
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