Async destination abstraction where bytes can be written to. More...
#include <AsyncStreams.h>
Classes | |
struct | Request |
Public Member Functions | |
Result | init (AsyncBuffersPool &buffersPool, Span< Request > requests) |
Emitted when no more data can be written. More... | |
Result | write (AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> cb={}) |
Writes a buffer (that must be allocated by the AsyncBuffersPool passed in AsyncWritableStream) When the buffer it will be actually written, AsyncWritableStream::eventWritten will be raised and its reference count will be decreased. More... | |
Result | write (Span< const char > data, Function< void(AsyncBufferView::ID)> cb={}) |
Try requesting a buffer big enough and copy data into it. More... | |
template<size_t N> | |
Result | write (const char(&str)[N]) |
Write a C-string literal in the stream. More... | |
void | end () |
Ends the writable stream, waiting for all in-flight and queued writes to finish. More... | |
AsyncBuffersPool & | getBuffersPool () |
Obtains the buffers pool to access its data. More... | |
void | finishedWriting (AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> &&cb, Result res) |
Signals that the given buffer (previously queued by write) has been fully written. More... | |
Public Attributes | |
Function< Result(AsyncBufferView::ID, Function< void(AsyncBufferView::ID)>)> | asyncWrite |
Function that every stream must define to implement its custom write operation. More... | |
Event< MaxListeners, Result > | eventError |
Event< MaxListeners > | eventDrain |
Emitted when an error occurs. More... | |
Event< MaxListeners > | eventFinish |
Emitted when write queue is empty. More... | |
Static Public Attributes | |
static constexpr int | MaxListeners = 8 |
Async destination abstraction where bytes can be written to.
When buffers are pushed faster than the stream can handle, they will get queued. Queuing process happens with a linked list stored in the AsyncBufferView itself. As AsyncBufferView contains a fixed (at init) number of buffers, the queue is bounded by the fact that user will be unable to allocate buffers to write until at least one will be made available again (i.e. a write finishes). User can listen to AsyncWritableStream::eventWritten to know when a buffer is written (and its refcount decreased) or AsyncWritableStream::eventDrain when the queue is empty.
void SC::AsyncWritableStream::end | ( | ) |
Ends the writable stream, waiting for all in-flight and queued writes to finish.
After this happens, AsyncWritableStream::eventFinished will be raised
void SC::AsyncWritableStream::finishedWriting | ( | AsyncBufferView::ID | bufferID, |
Function< void(AsyncBufferView::ID)> && | cb, | ||
Result | res | ||
) |
Signals that the given buffer (previously queued by write) has been fully written.
AsyncBuffersPool & SC::AsyncWritableStream::getBuffersPool | ( | ) |
Obtains the buffers pool to access its data.
Result SC::AsyncWritableStream::init | ( | AsyncBuffersPool & | buffersPool, |
Span< Request > | requests | ||
) |
Emitted when no more data can be written.
Inits the writable stream
buffersPool | An instance of AsyncBuffersPool providing write buffers |
requests | User owned memory to hold a circular buffer for write requests |
Result SC::AsyncWritableStream::write | ( | AsyncBufferView::ID | bufferID, |
Function< void(AsyncBufferView::ID)> | cb = {} |
||
) |
Writes a buffer (that must be allocated by the AsyncBuffersPool passed in AsyncWritableStream) When the buffer it will be actually written, AsyncWritableStream::eventWritten will be raised and its reference count will be decreased.
bufferID | Buffer allocated from the associated AsyncBuffersPool (AsyncWritableStream::getBuffersPool) |
cb | Callback that will be invoked when the write is finished |
Write a C-string literal in the stream.
Result SC::AsyncWritableStream::write | ( | Span< const char > | data, |
Function< void(AsyncBufferView::ID)> | cb = {} |
||
) |
Try requesting a buffer big enough and copy data into it.
Function<Result(AsyncBufferView::ID, Function<void(AsyncBufferView::ID)>)> SC::AsyncWritableStream::asyncWrite |
Function that every stream must define to implement its custom write operation.
Event<MaxListeners> SC::AsyncWritableStream::eventDrain |
Emitted when an error occurs.
Event<MaxListeners> SC::AsyncWritableStream::eventFinish |
Emitted when write queue is empty.