Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

read_until (7 of 8 overloads)

Boost , Boost.Asio , read_until

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Прочитайте данные в streambuf, пока объект функции не покажет соответствие.

template<
    typename SyncReadStream,
    typename Allocator,
    typename MatchCondition>
std::size_t read_until(
    SyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    MatchCondition match_condition,
    typename enable_if< is_match_condition< MatchCondition >::value >::type *  = 0);

Эта функция используется для считывания данных в заданный Streambuf до тех пор, пока определяемый пользователем объект функции состояния соответствия, при применении к данным, содержащимся в Streambuf, не указывает на успешное соответствие. Звонок будет блокироваться до тех пор, пока не будет выполнено одно из следующих условий:

  • Объект функции соответствия возвращает std::pair, где второй элемент оценивает истинность.
  • Произошла ошибка.

Эта операция реализована с точки зрения нуля или более вызовов функции read_some потока. Если объект функции состояния соответствия уже указывает на соответствие, функция немедленно возвращается.

Parameters

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>и<end>определяют диапазон байтов для сканирования, чтобы определить, есть ли совпадение. Член<first>возвратного значения является итератором, обозначающим один конец байтов, которые были потреблены функцией соответствия. Этот итератор используется для расчета параметра<begin>для любого последующего вызова состояния соответствия.<second>элемент обратной стоимости является истинным, если совпадение было найдено, ложным в противном случае.

Return Value

Количество байтов в зоне получения стримбуфа, которые были полностью поглощены функцией матча.

Exceptions

boost::system::system_error

Выброшен на провал.

Remarks

После успешной операции read_until, streambuf может содержать дополнительные данные, которые не соответствуют объекту функции. Приложение обычно оставляет эти данные в Streambuf для последующего использования.

Реализация по умолчанию признака<is_match_condition>типа оценивает истинность для указателей функций и объектов функций с помощью<result_type>typedef. Он должен быть специализирован для других определяемых пользователем функциональных объектов.

Examples

Чтобы считывать данные в streambuf, пока не встретится белое пространство:

typedef boost::asio::buffers_iterator<
    boost::asio::streambuf::const_buffers_type> iterator;
std::pair<iterator, bool>
match_whitespace(iterator begin, iterator end)
{
  iterator i = begin;
  while (i != end)
    if (std::isspace(*i++))
      return std::make_pair(i, true);
  return std::make_pair(i, false);
}
...
boost::asio::streambuf b;
boost::asio::read_until(s, b, match_whitespace);

Для чтения данных в streambuf до тех пор, пока не будет найден соответствующий символ:

class match_char
{
public:
  explicit match_char(char c) : c_(c) {}
  template <typename Iterator>
  std::pair<Iterator, bool> operator()(
      Iterator begin, Iterator end) const
  {
    Iterator i = begin;
    while (i != end)
      if (c_ == *i++)
        return std::make_pair(i, true);
    return std::make_pair(i, false);
  }
private:
  char c_;
};
namespace asio {
  template <> struct is_match_condition<match_char>
    : public boost::true_type {};
} // namespace asio
...
boost::asio::streambuf b;
boost::asio::read_until(s, b, match_char('a'));

PrevUpHomeNext

Статья read_until (7 of 8 overloads) раздела Boost.Asio read_until может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: read_until ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:54:04/0.0067989826202393/0