Initial work on pipelines

This commit is contained in:
Zahary Karadjov 2020-04-13 21:59:34 +03:00
commit 69fc4e24ee
No known key found for this signature in database
GPG key ID: C8936F8A3073D609
11 changed files with 525 additions and 72 deletions

28
faststreams/pipelines.nim Normal file
View file

@ -0,0 +1,28 @@
import
macros,
input_stream, output_stream
export
input_stream, output_stream
macro executePipeline*(start: InputStream, steps: varargs[untyped]) =
var input = start
result = newStmtList()
for i in 0 .. steps.len - 2:
var
step = steps[i]
outputVar = genSym(nskVar, "out")
output = if i == steps.len - 2: steps[^1]
else: newCall(bindSym"memoryOutput")
result.add quote do:
var `outputVar` = `output`
`step`(`input`, `outputVar`)
input = quote do:
memoryInput(getOutput(`outputVar`))
if defined(debugMacros) or defined(debugPipelines):
echo result.repr