-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplotiterator.lua
More file actions
53 lines (43 loc) · 1.3 KB
/
Copy pathplotiterator.lua
File metadata and controls
53 lines (43 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
---
-- @classmod PlotIterator
local middleclass = require("middleclass")
local assertions = require("luatypechecks.assertions")
local Iterable = require("luaplot.iterable")
local Plot = require("luaplot.plot")
---
-- @table instance
-- @tfield Plot _plot
-- @tfield func _transformer func(point: Vector2D): any
local PlotIterator = middleclass("PlotIterator")
PlotIterator:include(Iterable)
---
-- @function new
-- @tparam Plot plot
-- @tparam func transformer func(point: Vector2D): any
-- @treturn PlotIterator
function PlotIterator:initialize(plot, transformer)
assertions.is_instance(plot, Plot)
assertions.is_callable(transformer)
self._plot = plot
self._transformer = transformer
end
---
-- ⚠️. It supports direct access to transformed plot points
-- and is used for iterating over them in Lua 5.3+.
-- @tparam number index [1, ∞)
-- @treturn any transformed point, or nil when the index is out of range
function PlotIterator:__index(index)
assertions.is_number(index)
local point = self._plot[index]
if point == nil then
return
end
return self._transformer(point)
end
---
-- ⚠️. It is used for iterating over plot points in Lua 5.2.
-- @function __ipairs
-- @treturn iterators.inext iterator function
-- @treturn PlotIterator self
-- @treturn number always zero
return PlotIterator