Title
[networking.ts] read_until still refers to "input sequence"
Status
c++23
Section
[buffer.read.until]
Submitter
Christopher Kohlhoff

Created on 2018-02-26.00:00:00 last changed 5 months ago

Messages

Date: 2018-06-12.01:05:16

Proposed resolution:

This wording is relative to N4711.

  1. Change [buffer.read.until] as indicated:

    template<class SyncReadStream, class DynamicBuffer>
      size_t read_until(SyncReadStream& s, DynamicBuffer&& b, char delim);
    template<class SyncReadStream, class DynamicBuffer>
      size_t read_until(SyncReadStream& s, DynamicBuffer&& b,
                        char delim, error_code& ec);
    template<class SyncReadStream, class DynamicBuffer>
      size_t read_until(SyncReadStream& s, DynamicBuffer&& b, string_view delim);
    template<class SyncReadStream, class DynamicBuffer>
      size_t read_until(SyncReadStream& s, DynamicBuffer&& b,
                        string_view delim, error_code& ec);
    

    -1- Effects: Reads data from the buffer-oriented synchronous read stream ([buffer.stream.reqmts.syncreadstream]) object stream by performing zero or more calls to the stream's read_some member function, until the input sequencereadable bytes of the dynamic buffer ([buffer.reqmts.dynamicbuffer]) object b contains the specified delimiter delim.

    -2- Data is placed into the dynamic buffer object b. A mutable buffer sequence (16.2.1) is obtained prior to each read_some call using b.prepare(N), where N is an unspecified value such that N <= max_size() - size(). [Note: Implementations are encouraged to use b.capacity() when determining N, to minimize the number of read_some calls performed on the stream. — end note] After each read_some call, the implementation performs b.commit(n), where n is the return value from read_some.

    -3- The synchronous read_until operation continues until:

    1. (3.1) — the input sequencereadable bytes of b contains the delimiter delim; or

    2. (3.2) — b.size() == b.max_size(); or

    3. (3.3) — an asynchronous read_some operation fails.

    -4- On exit, if the input sequencereadable bytes of b contains the delimiter, ec is set such that !ec is true. Otherwise, if b.size() == b.max_size(), ec is set such that ec == stream_errc::not_found. If b.size() < b.max_size(), ec contains the error_code from the most recent read_some call.

    -5- Returns: The number of bytes in the input sequence ofreadable bytes in b up to and including the delimiter, if present. [Note: On completion, the buffer may contain additional bytes following the delimiter. — end note] Otherwise returns 0.

Date: 2018-06-12.01:05:16

[ 2018-06 Rapperswil: Adopted ]

Date: 2018-03-06.00:00:00

[ 2018-03-06 Moved to Tentatively Ready after 5 positive votes on c++std-lib. ]

Date: 2018-02-26.00:00:00
Addresses: networking.ts

When specifying DynamicBuffers and their related operations, early drafts of the Networking TS described the buffers in terms of their "input sequence" and "output sequence". This was changed to "readable bytes" and "writable bytes" respectively. Unfortunately, some instances of "input sequence" were missed in section [buffer.read.until].

History
Date User Action Args
2023-11-22 15:47:43adminsetstatus: wp -> c++23
2021-02-27 12:43:20adminsetstatus: c++20 -> wp
2021-02-25 10:48:01adminsetstatus: wp -> c++20
2018-06-12 01:05:16adminsetmessages: + msg9884
2018-06-12 01:05:16adminsetstatus: voting -> wp
2018-05-06 19:23:13adminsetstatus: ready -> voting
2018-03-07 17:16:45adminsetmessages: + msg9714
2018-03-07 17:16:45adminsetstatus: new -> ready
2018-03-04 10:33:48adminsetmessages: + msg9701
2018-02-26 00:00:00admincreate