53 lines
1.3 KiB
Lua
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
|