File

tools/migration/migrator/mtools.lua @ 9309:33d500c25d76

net.server_epoll: Refactor Direct TLS assumptions outwards The assumption that connections are "Direct TLS" when a TLS context is supplided should be broken. The goal is to make it easy to add a new API that can be given a TLS context at creation even if it should do STARTTLS. With this commit, only the exposed server_select-compatible API assumes Direct TLS when a TLS context is included.
author Kim Alvefur <zash@zash.se>
date Thu, 13 Sep 2018 20:37:43 +0200
parent 7881:4e3067272fae
line wrap: on
line source



local print = print;
local t_insert = table.insert;
local t_sort = table.sort;


local 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

local 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 {
	sorted = sorted;
	merged = merged;
}