On 1/30/20 12:59 AM, Jesse Phillips wrote:
On Tuesday, 28 January 2020 at 16:09:55 UTC, Steven Schveighoffer wrote:

Everything is pulled with iopipe, even output, so it's just a matter of who is pulling and when. Pushing is a matter of telling the other end to pull.


That statement I think will be very helpful to me.

The push would control the buffer, creating that value concept, where the buffer is flush which creates a pull, specified in the delegate.

The push function divides the buffer into 2 parts, the "writeable" items (i.e. items ready to push), and the buffer that can be accessed for manipulation (this is where you put your data). Eventually, the latter fills up and you need more buffer space. At this point, it performs the push, which is done by running the push chain as if it were an input stream, where the data source is the writeable data.


Pusher(buffer) <- put(content)

An output range wrapper would provide a push interface which would fill in the buffer of the Pusher. When the buffer fills the range wrapper would ask to release which Pusher does by calling the delegate.

An output range wrapper should fill in the accessible buffer and then immediately release it (same as that writeln example I showed before).

Hopefully I'm following this correctly.

I was going to write an ascii art concept to show how the pushing works, but I think I'll maybe draw an actual picture. I need some time to accomplish this, though.

It's very clear in my head how this works, but very hard to describe :)

-Steve

Reply via email to