将数据读取到动态缓冲区序列中,直到函数对象指示匹配。
template< typename SyncReadStream, typename DynamicBuffer_v2, typename MatchCondition> std::size_t read_until( SyncReadStream & s, DynamicBuffer_v2 buffers, MatchCondition match_condition, boost::system::error_code & ec, constraint_t< is_match_condition< MatchCondition >::value > = 0, constraint_t< is_dynamic_buffer_v2< DynamicBuffer_v2 >::value > = 0);
此函数用于将数据读取到指定的动态缓冲区序列中,直到用户定义的匹配条件函数对象应用于动态缓冲区序列中的数据时指示匹配成功。调用将阻塞,直到以下任一条件成立
此操作通过零次或多次调用流的 read_some 函数来实现。如果匹配条件函数对象已指示匹配,则函数会立即返回。
要从中读取数据的流。类型必须支持 SyncReadStream 概念。
将读取数据的动态缓冲区序列。
将要调用的函数对象,用于确定是否存在匹配。函数对象的签名必须为:
pair<iterator, bool> match_condition(iterator begin, iterator end);
其中 iterator
代表类型
buffers_iterator<DynamicBuffer_v2::const_buffers_type>
迭代器参数 begin
和 end
定义了要扫描以确定是否存在匹配的字节范围。返回值中的 first
成员是一个迭代器,指向匹配函数已消耗字节的末尾之后一个位置。此迭代器用于计算匹配条件后续任何调用的 begin
参数。返回值的 second
成员为 true,表示已找到匹配项,否则为 false。
用于指示发生何种错误(如果有)。
动态缓冲区序列的 get 区域中被匹配函数完全消耗的字节数。如果发生错误,则返回 0。
在成功的 read_until 操作后,动态缓冲区序列可能包含超出匹配函数对象数据的额外数据。应用程序通常会将这些数据保留在动态缓冲区序列中,供后续的 read_until 操作进行检查。
is_match_condition
类型特征的默认实现对具有 result_type
类型的函数指针和函数对象求值为 true。对于其他用户定义的函数对象,必须对其进行特化。