On Monday, 27 January 2020 at 18:12:40 UTC, Steven Schveighoffer
wrote:
Before I show you what to do, let me explain what the above
actually does.
1. You constructed a buffer of characters. Good, this is the
first step.
2. You used encodeText to convert the data to ubyte. Note that
for char buffer, this basically is just a cast. Other encodings
might do byteswapping. But you have done this step a bit early.
At this point now, the window type is ubyte[]. You want to put
data into the buffer as char[].
3. You appended an outputPipe, which is a pass through while
writing the data to a file (which is fed a stream of
uninitialized data I think, so you probably got a file with
garbage in it). Writing to this pipe's buffer is kind of
pointless because the writing has already happened (pretty much
all effects and actions performed on the buffer happen in the
.extend function).
What you need is to access the buffer for writing BEFORE
encoding and streaming to the file. For this, you need the push
[1] mechanism, which wraps up everything you want to happen to
data you have written to the buffer into a lambda template:
auto outputBuffered = bufd!char
.push!(p => p
.encodeText
.outputPipe(output()));
[1] http://schveiguy.github.io/iopipe/iopipe/valve/push.html
I really feel like this is all very well thought out and clean, I
don't appear to have a previous model to help visualize this
output approach. Right now something like tee is coming to mind.
Thank you for explaining with the answer.