Diff

tools/migration/migrator/mtools.lua @ 4216:ff80a8471e86

tools/migration/*: Numerous changes and restructuring, and the addition of a Makefile
author Matthew Wild <mwild1@gmail.com>
date Sat, 26 Feb 2011 00:23:48 +0000
parent 4197:bef732980436
child 7881:4e3067272fae
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/migration/migrator/mtools.lua	Sat Feb 26 00:23:48 2011 +0000
@@ -0,0 +1,56 @@
+
+
+local print = print;
+local t_insert = table.insert;
+local t_sort = table.sort;
+
+module "mtools"
+
+function sorted(params)
+
+	local reader = params.reader; -- iterator to get items from
+	local sorter = params.sorter; -- sorting function
+	local filter = params.filter; -- filter function
+
+	local cache = {};
+	for item in reader do
+		if filter then item = filter(item); end
+		if item then t_insert(cache, item); end
+	end
+	if sorter then
+		t_sort(cache, sorter);
+	end
+	local i = 0;
+	return function()
+		i = i + 1;
+		return cache[i];
+	end;
+
+end
+
+function merged(reader, merger)
+
+	local item1 = reader();
+	local merged = { item1 };
+	return function()
+		while true do
+			if not item1 then return nil; end
+			local item2 = reader();
+			if not item2 then item1 = nil; return merged; end
+			if merger(item1, item2) then
+			--print("merged")
+				item1 = item2;
+				t_insert(merged, item1);
+			else
+			--print("unmerged", merged)
+				item1 = item2;
+				local tmp = merged;
+				merged = { item1 };
+				return tmp;
+			end
+		end
+	end;
+
+end
+
+return _M;