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

async_read_until (4 of 4 overloads)

Boost , Boost.Asio , async_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 AsyncReadStream,
    typename Allocator,
    typename MatchCondition,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    MatchCondition match_condition,
    ReadHandler handler,
    typename enable_if< is_match_condition< MatchCondition >::value >::type *  = 0);

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

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

Эта операция реализована в терминах нуля или более вызовов функции async_read_some потока и известна каксоставленная операция. Если объект функции соответствия уже указывает на соответствие, эта асинхронная операция завершается немедленно. Программа должна гарантировать, что поток не выполняет никаких других операций чтения (таких как async_read, async_read_until, функция async_read_some потока или любые другие составные операции, которые выполняют чтения) до завершения этой операции.

Parameters

s

Поток, из которого следует читать данные. Этот тип должен поддерживать концепцию AsyncReadStream.

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>элемент обратной стоимости является истинным, если совпадение было найдено, ложным в противном случае.

handler

Обработчик должен быть вызван, когда операция чтения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:

void handler(
  // Result of operation.
  const boost::system::error_code& error,
  // The number of bytes in the streambuf's get
  // area that have been fully consumed by the
  // match function. O if an error occurred.
  std::size_t bytes_transferred
);

Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Привлечение обработчика будет выполнено способом, эквивалентным использованию<boost::asio::io_service::post()>.

Remarks

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

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

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);
}
...
void handler(const boost::system::error_code& e, std::size_t size);
...
boost::asio::streambuf b;
boost::asio::async_read_until(s, b, match_whitespace, handler);

Для асинхронного чтения данных в 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
...
void handler(const boost::system::error_code& e, std::size_t size);
...
boost::asio::streambuf b;
boost::asio::async_read_until(s, b, match_char('a'), handler);

PrevUpHomeNext

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




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



:: Главная :: async_read_until ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 07:54:57/0.0084710121154785/1