diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-04-22 06:20:05 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-04-22 06:20:05 -0700 |
commit | ed0bfb4b8eb40d8a4efc65e528e477a2314b34aa (patch) | |
tree | 2a6721235dad8065c5208c3028dfd83b7da864cf /stream.h | |
parent | 962d2abc1ac024a5de5fe9fd92ad5312b1960a08 (diff) | |
download | txr-ed0bfb4b8eb40d8a4efc65e528e477a2314b34aa.tar.gz txr-ed0bfb4b8eb40d8a4efc65e528e477a2314b34aa.tar.bz2 txr-ed0bfb4b8eb40d8a4efc65e528e477a2314b34aa.zip |
streams: put_buf and fill_buf become lower-level.
In this commit, the put_buf and fill_buf stream virtual
functions are changed to operate directly on a low-level
buffer, rather than a stream. This will allow these functions
to be used for improving the performance of I/O operations
that are not related to buffer objects.
* stream.h (struct strm_ops): Change type signature of put_buf
and fill_buf members. The lengths and iszes are ucnum.
The return value is ucnum. The buffer is passed as a pointer
and length, rather than a buffer object.
* stream.c (unimpl_put_buf, unimpl_fill_buf, generic_put_buf,
generic_fill_buf, stdio_put_buf, stdio_fill_buf,
delegate_put_buf, delegate_fill_buf): Adjust to
new interface.
(put_buf, fill_buf, fill_buf_adjust): Pull the poitner and
size from the buffer and pass those down to the virtual
functions rather than the buffer itself. Convert ucnum return
value to val.
* strudel.c (strudel_put_buf, strudel_get_buf): The struct
delegate interface doesn't change. The put-buf and fill-buf
methods still operate on buffer objects. To glue that with the
new low-level interface, we use the init_borrowed_buf trick
that is was first used in ffi.c: temporary buf objects are
efficiently allocated on the stack, pointing to the same
memory that is coming down from the stream operation.
* txr.1: Document the new restrictions on the buf argument of
the put-buf and fill-buf stream delegate methods.
Since the buf not a heap object, it cannot be used after the
method returns.
Diffstat (limited to 'stream.h')
-rw-r--r-- | stream.h | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -69,8 +69,8 @@ struct strm_ops { val (*get_byte)(val); val (*unget_char)(val, val); val (*unget_byte)(val, int); - val (*put_buf)(val, val, cnum); - val (*fill_buf)(val, val, cnum); + ucnum (*put_buf)(val, mem_t *, ucnum len, ucnum pos); + ucnum (*fill_buf)(val, mem_t *, ucnum len, ucnum pos); val (*close)(val, val); val (*flush)(val); val (*seek)(val, val, enum strm_whence); |