document the flushing feature for the buffer

Tue, 01 Apr 2025 19:21:04 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 01 Apr 2025 19:21:04 +0200
changeset 1269
e15ca477d448
parent 1268
a84403b0a503
child 1270
503f0ad94c6c

document the flushing feature for the buffer

relates #451

docs/Writerside/topics/buffer.h.md file | annotate | diff | comparison | revisions
--- a/docs/Writerside/topics/buffer.h.md	Mon Mar 31 19:39:42 2025 +0200
+++ b/docs/Writerside/topics/buffer.h.md	Tue Apr 01 19:21:04 2025 +0200
@@ -210,9 +210,30 @@
 size_t cxBufferFlush(CxBuffer *buffer);
 ```
 
-<warning>
-TODO: document
-</warning>
+With the function `cxBufferEnableFlushing()` you can configure a flushing strategy for the contents of the buffer.
+
+Flushing, once enabled, may happen in the following cases:
+1. when data is written to the buffer, the capacity is insufficient, and `CX_BUFFER_AUTO_EXTEND` is _not_ enabled
+2. when data is written to the buffer, and the required capacity exceeds the `threshold` configuration
+3. when `cxBufferFlush()` is called explicitly
+
+> By combining the `CX_BUFFER_AUTO_EXTEND` flag and the `threshold` setting,
+> you can create a buffer that initially starts with a small capacity, grows up to a certain threshold,
+> and starts flushing only when that threshold is exceeded.
+
+Flushing happens by invoking the `wfunc` up to `blkmax` times, writing up to `blksize` bytes from the buffer to the `target` with each call.
+The target might not accept all bytes (i.e. the `wfunc` return value indicates that fewer items have been written than requested),
+in which case the remaining data remains in the buffer.
+That means, the buffer is effectively [shifted](#shift-contents) left by the number of successfully flushed bytes.
+
+> When you write large amounts of data to a buffer, multiple flush cycles might happen.
+> After the first flush operations completed, the reclaimed space in the buffer is filled first, but if that
+> is not sufficient, another flush may be triggered within the same invocation of the write operation.
+> 
+> That means, as much data is written to the buffer and/or flushed as possible, until neither the flush target, nor the buffer accept more data.
+>{style="note"}
+
+> The function `cxBufferFlush()` simply returns zero when flushing was not enabled via `cxBufferEnableFlushing()`.
 
 <seealso>
 <category ref="apidoc">

mercurial