diff options
author | Matthew Wild <mwild1@gmail.com> | 2011-02-26 00:24:23 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2011-02-26 00:24:23 +0000 |
commit | 05b3139a2ca2d784ac07066d8773ca07b5113159 (patch) | |
tree | aa68c7dba38183a45322f3356d08c73e8c45b599 /tools/migration/migrator/mtools.lua | |
parent | 48f32e711317c95d6d4b32de85ae8b8fe1590533 (diff) | |
parent | 2b4811c8430dcbec09c67b73e8f939b4047f1aec (diff) | |
download | prosody-05b3139a2ca2d784ac07066d8773ca07b5113159.tar.gz prosody-05b3139a2ca2d784ac07066d8773ca07b5113159.zip |
Merge 0.8->trunk
Diffstat (limited to 'tools/migration/migrator/mtools.lua')
-rw-r--r-- | tools/migration/migrator/mtools.lua | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tools/migration/migrator/mtools.lua b/tools/migration/migrator/mtools.lua new file mode 100644 index 00000000..e7b774bb --- /dev/null +++ b/tools/migration/migrator/mtools.lua @@ -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; |