53 lines
1.3 KiB
Lua

array_pair = {}
array_pair.__index = array_pair
function array_pair.new()
return { table_a = {}, table_b = {} }
end
function array_pair.reset(list)
list.table_a = {}
list.table_b = {}
end
function array_pair.insert(list, tuple)
table.insert(list.table_a, tuple.x)
table.insert(list.table_b, tuple.y)
end
function array_pair.remove(list)
if #list.table_a > 0 then
local a = table.remove(list.table_a)
local b = table.remove(list.table_b)
return { x = a, y = b }
end
return nil
end
function array_pair.size(list)
return #list.table_a
end
function array_pair.iterator(list)
local iterator = { list = list, current_index = #list.table_a }
function iterator.next()
if iterator.has_next() then
local idx = iterator.current_index
iterator.current_index = iterator.current_index - 1
return { x = iterator.list.table_a[idx], y = iterator.list.table_b[idx] }
end
return nil
end
function iterator.remove()
local idx = iterator.current_index + 1
return { x = table.remove(iterator.list.table_a, idx), y = table.remove(iterator.list.table_b, idx) }
end
function iterator.has_next()
return iterator.current_index >= 1
end
return iterator
end