Software / code / prosody
File
tools/migration/migrator/mtools.lua @ 11106:76f46c2579a2 0.11
net.websocket.frames: Allow all methods to work on non-string objects
Instead of using the string library, use methods from the passed object,
which are assumed to be equivalent.
This provides compatibility with objects from util.ringbuffer and
util.dbuffer, for example.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 17 Sep 2020 13:00:19 +0100 |
| 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; }