Прочитайте данные в streambuf, пока объект функции не покажет соответствие.
template<
typename SyncReadStream,
typename Allocator,
typename MatchCondition>
std::size_t read_until(
SyncReadStream & s,
boost::asio::basic_streambuf< Allocator > & b,
MatchCondition match_condition,
boost::system::error_code & ec,
typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
Эта функция используется для считывания данных в заданный Streambuf до тех пор, пока определяемый пользователем объект функции состояния соответствия, при применении к данным, содержащимся в Streambuf, не указывает на успешное соответствие. Звонок будет блокироваться до тех пор, пока не будет выполнено одно из следующих условий:
- Объект функции соответствия возвращает std::pair, где второй элемент оценивает истинность.
- Произошла ошибка.
Эта операция реализована с точки зрения нуля или более вызовов функции read_some потока. Если объект функции состояния соответствия уже указывает на соответствие, функция немедленно возвращается.
- s
Поток, из которого следует читать данные. Этот тип должен поддерживать концепцию SyncReadStream.
- b
Объект streambuf, в который будут считываться данные.
- match_condition
-
Объект функции должен быть вызван, чтобы определить, существует ли совпадение. Подпись объекта функции должна быть:
pair<iterator, bool> match_condition(iterator begin, iterator end);
где iterator
представляет тип:
buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
Параметры итератора начинаются
и определяют диапазон байтов для сканирования, чтобы определить, есть ли совпадение. первый
элемент возвращаемого значения представляет собой итератор, обозначающий один конец байтов, которые были поглощены функцией соответствия. Этот итератор используется для вычисления параметра begin
для любого последующего вызова состояния соответствия. второй
элемент возвращаемого значения является истинным, если совпадение было найдено, ложным в противном случае.
- ec
Установить, какая ошибка произошла, если таковая имеется.
Количество байтов в зоне получения Streambuf, которые были полностью поглощены функцией матча. 0, если произошла ошибка.
После успешной операции read_until, streambuf может содержать дополнительные данные, которые не соответствуют объекту функции. Приложение обычно оставляет эти данные в Streambuf для последующего использования
Реализация по умолчанию is_match_condition
оценивает истинность для указателей функций и объектов функций с result_type
typedef. Он должен быть специализирован для других определяемых пользователем функциональных объектов.