You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
979 B
Lua

--[=[
@c TableIterable x Iterable
@mt mem
@d Iterable class that wraps a basic Lua table, where order is not guaranteed.
Some versions may use a map function to shape the objects before they are accessed.
]=]
local Iterable = require('iterables/Iterable')
local TableIterable = require('class')('TableIterable', Iterable)
function TableIterable:__init(tbl, map)
self._tbl = tbl
self._map = map
end
--[=[
@m iter
@r function
@d Returns an iterator that returns all contained objects. The order of the objects is not guaranteed.
]=]
function TableIterable:iter()
local tbl = self._tbl
if not tbl then
return function()
return nil
end
end
local map = self._map
if map then
local k, v
return function()
while true do
k, v = next(tbl, k)
if not v then
return nil
end
v = map(v)
if v then
return v
end
end
end
else
local k, v
return function()
k, v = next(tbl, k)
return v
end
end
end
return TableIterable