Mercurial > prosody-hg
comparison util/iterators.lua @ 1660:ae2f60a20428
util.iterators: Add tail() iterator, to return the last n items
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 10 Aug 2009 15:46:34 +0100 |
| parents | 6092fc9b078b |
| children | b7049746bd29 |
comparison
equal
deleted
inserted
replaced
| 1659:6092fc9b078b | 1660:ae2f60a20428 |
|---|---|
| 88 c = c + 1; | 88 c = c + 1; |
| 89 return f(s, var); | 89 return f(s, var); |
| 90 end, s; | 90 end, s; |
| 91 end | 91 end |
| 92 | 92 |
| 93 function tail(n, f, s, var) | |
| 94 local results, count = {}, 0; | |
| 95 while true do | |
| 96 local ret = { f(s, var) }; | |
| 97 var = ret[1]; | |
| 98 if var == nil then break; end | |
| 99 results[(count%n)+1] = ret; | |
| 100 count = count + 1; | |
| 101 end | |
| 102 | |
| 103 if n > count then n = count; end | |
| 104 | |
| 105 local pos = 0; | |
| 106 return function () | |
| 107 pos = pos + 1; | |
| 108 if pos > n then return nil; end | |
| 109 return unpack(results[((count-1+pos)%n)+1]); | |
| 110 end | |
| 111 --return reverse(head(n, reverse(f, s, var))); | |
| 112 end | |
| 113 | |
| 93 -- Convert the values returned by an iterator to an array | 114 -- Convert the values returned by an iterator to an array |
| 94 function it2array(f, s, var) | 115 function it2array(f, s, var) |
| 95 local t, var = {}; | 116 local t, var = {}; |
| 96 while true do | 117 while true do |
| 97 var = f(s, var); | 118 var = f(s, var); |
