From 8fee6363093611302af3af5139eba9716267f03b Mon Sep 17 00:00:00 2001 From: "E. Westbrook" <github@westbrook.io> Date: Mon, 4 Jun 2018 23:23:39 -0600 Subject: Add ltn12.source.table() --- doc/ltn12.html | 10 ++++++++++ doc/reference.html | 3 ++- src/ltn12.lua | 10 ++++++++++ test/ltn12test.lua | 9 +++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/doc/ltn12.html b/doc/ltn12.html index 54e66fb..ee2502f 100644 --- a/doc/ltn12.html +++ b/doc/ltn12.html @@ -405,6 +405,16 @@ Creates and returns a source that produces the contents of a <tt>string</tt>, chunk by chunk. </p> +<!-- table +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<p class=name id="source.table"> +ltn12.source.<b>table(</b>table<b>)</b> +</p> + +<p class=description> +Creates and returns a source that produces the numerically-indexed values of a <tt>table</tt> successively beginning at 1. The source returns nil (end-of-stream) whenever a nil value is produced by the current index, which proceeds forward regardless. +</p> + <!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <div class=footer> diff --git a/doc/reference.html b/doc/reference.html index 287dc19..163a8a2 100644 --- a/doc/reference.html +++ b/doc/reference.html @@ -99,7 +99,8 @@ Support, Manual"> <a href="ltn12.html#source.error">error</a>, <a href="ltn12.html#source.file">file</a>, <a href="ltn12.html#source.simplify">simplify</a>, -<a href="ltn12.html#source.string">string</a>. +<a href="ltn12.html#source.string">string</a>, +<a href="ltn12.html#source.table">table</a>. </blockquote> </blockquote> diff --git a/src/ltn12.lua b/src/ltn12.lua index 575c5a7..afa735d 100644 --- a/src/ltn12.lua +++ b/src/ltn12.lua @@ -128,6 +128,16 @@ function source.string(s) else return source.empty() end end +-- creates table source +function source.table(t) + base.assert('table' == type(t)) + local i = 0 + return function() + i = i + 1 + return t[i] + end +end + -- creates rewindable source function source.rewind(src) base.assert(src) diff --git a/test/ltn12test.lua b/test/ltn12test.lua index e3f85fb..e7d368d 100644 --- a/test/ltn12test.lua +++ b/test/ltn12test.lua @@ -180,6 +180,15 @@ assert(ltn12.pump.all(source, sink), "returned error") assert(table.concat(t) == s, "mismatch") print("ok") +-------------------------------- +io.write("testing source.table: ") +local inp = {'a','b','c','d','e'} +local source = ltn12.source.table(inp) +sink, t = ltn12.sink.table() +assert(ltn12.pump.all(source, sink), "returned error") +for i = 1, #inp do assert(t[i] == inp[i], "mismatch") end +print("ok") + -------------------------------- io.write("testing source.chain (with split): ") source = ltn12.source.string(s) -- cgit v1.2.3-55-g6feb