Diff

util/iterators.lua @ 4545:c9b91ddc9c11

util.iterators: Make a standard library (no longer injects into global namespace)
author Matthew Wild <mwild1@gmail.com>
date Mon, 23 Jan 2012 00:00:10 +0000
parent 4441:a01b7207cb37
child 5468:2660407c3b73
line wrap: on
line diff
--- a/util/iterators.lua	Sun Jan 22 23:59:19 2012 +0000
+++ b/util/iterators.lua	Mon Jan 23 00:00:10 2012 +0000
@@ -8,8 +8,10 @@
 
 --[[ Iterators ]]--
 
+local it = {};
+
 -- Reverse an iterator
-function reverse(f, s, var)
+function it.reverse(f, s, var)
 	local results = {};
 
 	-- First call the normal iterator
@@ -34,12 +36,12 @@
 local function _keys_it(t, key)
 	return (next(t, key));
 end
-function keys(t)
+function it.keys(t)
 	return _keys_it, t;
 end
 
 -- Iterate only over values in a table
-function values(t)
+function it.values(t)
 	local key, val;
 	return function (t)
 		key, val = next(t, key);
@@ -48,7 +50,7 @@
 end
 
 -- Given an iterator, iterate only over unique items
-function unique(f, s, var)
+function it.unique(f, s, var)
 	local set = {};
 	
 	return function ()
@@ -65,7 +67,7 @@
 end
 
 --[[ Return the number of items an iterator returns ]]--
-function count(f, s, var)
+function it.count(f, s, var)
 	local x = 0;
 	
 	while true do
@@ -79,7 +81,7 @@
 end
 
 -- Return the first n items an iterator returns
-function head(n, f, s, var)
+function it.head(n, f, s, var)
 	local c = 0;
 	return function (s, var)
 		if c >= n then
@@ -91,7 +93,7 @@
 end
 
 -- Skip the first n items an iterator returns
-function skip(n, f, s, var)
+function it.skip(n, f, s, var)
 	for i=1,n do
 		var = f(s, var);
 	end
@@ -99,7 +101,7 @@
 end
 
 -- Return the last n items an iterator returns
-function tail(n, f, s, var)
+function it.tail(n, f, s, var)
 	local results, count = {}, 0;
 	while true do
 		local ret = { f(s, var) };
@@ -121,13 +123,13 @@
 end
 
 local function _range_iter(max, curr) if curr < max then return curr + 1; end end
-function range(x, y)
+function it.range(x, y)
 	if not y then x, y = 1, x; end -- Default to 1..x if y not given
 	return _range_iter, y, x-1;
 end
 
 -- Convert the values returned by an iterator to an array
-function it2array(f, s, var)
+function it.to_array(f, s, var)
 	local t, var = {};
 	while true do
 		var = f(s, var);
@@ -139,7 +141,7 @@
 
 -- Treat the return of an iterator as key,value pairs,
 -- and build a table
-function it2table(f, s, var)
+function it.to_table(f, s, var)
 	local t, var2 = {};
 	while true do
 		var, var2 = f(s, var);
@@ -149,3 +151,4 @@
 	return t;
 end
 
+return it;