driver.love/0033-maybe_update_key_in_de...

33 lines
1.2 KiB
Plaintext

maybe_update_key_in_definitions = function(old_definition_name, definition_name, node)
--print(old_definition_name, definition_name)
if old_definition_name ~= definition_name then
if old_definition_name == nil or Definitions[old_definition_name] ~= node then
local pos = array.find(Definitions, node)
--print('found at index', pos)
assert(pos)
table.remove(Definitions, pos)
for i,n in ipairs(Definitions) do n.key = i end
elseif Definitions[old_definition_name] == node then
--print('found at key', old_definition_name)
Definitions[old_definition_name] = nil
end
-- at this point we're sure node is no longer in Definitions
node.key = nil
if definition_name and Definitions[definition_name] == nil then
--print('moving to key', definition_name)
Definitions[definition_name] = node
node.key = definition_name
elseif definition_name == nil or Definitions[definition_name] then
-- temporary collision; try again later
-- deleting and reinserting is inefficient, but hopefully rare
--print('moving to index', #Definitions+1)
table.insert(Definitions, node)
node.key = #Definitions
end
--print('-- definition keys')
--for k in pairs(Definitions) do
--print(k)
--end
end
end