From fbfd8ee680e2c822decd863a33c6d0c6266dbbf8 Mon Sep 17 00:00:00 2001 From: Fabien Fleutot Date: Tue, 18 Jun 2013 11:21:47 +0200 Subject: [PATCH] support for intermediate filters in ltn12.pump.all --- src/ltn12.lua | 7 +++++-- test/ltn12test.lua | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ltn12.lua b/src/ltn12.lua index 1014de2..adb6a12 100644 --- a/src/ltn12.lua +++ b/src/ltn12.lua @@ -283,14 +283,17 @@ end ----------------------------------------------------------------------------- -- pumps one chunk from the source to the sink function pump.step(src, snk) + if ... then snk = ltn12.sink.chain(snk, ...) end local chunk, src_err = src() local ret, snk_err = snk(chunk, src_err) if chunk and ret then return 1 else return nil, src_err or snk_err end end --- pumps all data from a source to a sink, using a step function -function pump.all(src, snk, step) +-- pumps all data from a source to a sink, optionally going through +-- intermediate filters +function pump.all(src, snk, ...) + if ... then snk = ltn12.sink.chain(snk, ...) end base.assert(src and snk) step = step or pump.step while true do diff --git a/test/ltn12test.lua b/test/ltn12test.lua index e3f85fb..58dd4a1 100644 --- a/test/ltn12test.lua +++ b/test/ltn12test.lua @@ -229,6 +229,14 @@ assert(ltn12.pump.all(source, sink), "returned error") assert(table.concat(t) == double(double(double(s))), "mismatch") print("ok") +-------------------------------- +io.write("testing pump.all (with intermediate filters): ") +local source = ltn12.source.string(s) +sink, t = ltn12.sink.table() +assert(ltn12.pump.all(source, double, double, sink), "returned error") +assert(table.concat(t) == double(double(s)), "mismatch") +print("ok") + -------------------------------- io.write("testing filter.chain (and sink.chain, with split, merge): ") source = ltn12.source.string(s)