2 -- Copyright (C) 2008-2009 Matthew Wild
3 -- Copyright (C) 2008-2009 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
11 -- Reverse an iterator
12 function reverse(f, s, var)
15 -- First call the normal iterator
17 local ret = { f(s, var) };
19 if var == nil then break; end
20 table.insert(results, 1, ret);
23 -- Then return our reverse one
24 local i,max = 0, #results;
25 return function (results)
28 return unpack(results[i]);
33 -- Iterate only over keys in a table
34 local function _keys_it(t, key)
35 return (next(t, key));
41 -- Iterate only over values in a table
45 key, val = next(t, key);
50 -- Given an iterator, iterate only over unique items
51 function unique(f, s, var)
56 local ret = { f(s, var) };
58 if var == nil then break; end
67 --[[ Return the number of items an iterator returns ]]--
68 function count(f, s, var)
72 local ret = { f(s, var) };
74 if var == nil then break; end
81 -- Return the first n items an iterator returns
82 function head(n, f, s, var)
84 return function (s, var)
93 -- Convert the values returned by an iterator to an array
94 function it2array(f, s, var)
98 if var == nil then break; end
104 -- Treat the return of an iterator as key,value pairs,
106 function it2table(f, s, var)
109 var, var2 = f(s, var);
110 if var == nil then break; end