Performance improvement when transmitting

The 'checked' table is passed by reference anyway, so reassigning it at
every step along the network is just wasting time by creating more and
more copies of it.
This commit is contained in:
Ciaran Gultnieks 2014-02-15 12:22:07 +00:00
parent 78d67f00a6
commit 6876aa6a4f

View File

@ -66,9 +66,8 @@ function digiline:rules_link_anydir(output, input)
end end
function digiline:transmit(pos, channel, msg, checked) function digiline:transmit(pos, channel, msg, checked)
checked = checked or {}
local checkedid = tostring(pos.x).."_"..tostring(pos.y).."_"..tostring(pos.z) local checkedid = tostring(pos.x).."_"..tostring(pos.y).."_"..tostring(pos.z)
if checked[checkedid] then return checked end if checked[checkedid] then return end
checked[checkedid] = true checked[checkedid] = true
local node = minetest.env:get_node(pos) local node = minetest.env:get_node(pos)
@ -86,9 +85,9 @@ function digiline:transmit(pos, channel, msg, checked)
local rules = digiline:importrules(spec.wire.rules, node) local rules = digiline:importrules(spec.wire.rules, node)
for _,rule in ipairs(rules) do for _,rule in ipairs(rules) do
if digiline:rules_link(pos, digiline:addPosRule(pos, rule)) then if digiline:rules_link(pos, digiline:addPosRule(pos, rule)) then
checked = digiline:transmit(digiline:addPosRule(pos, rule), channel, msg, checked) digiline:transmit(digiline:addPosRule(pos, rule), channel, msg, checked)
end end
end end
end end
return checked return
end end