Advertisement
Guest User

Untitled

a guest
May 28th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. template <typename SyncReadStream, typename DynamicBuffer>
  2. auto async_read_until(SyncReadStream &s, DynamicBuffer &&buffers,
  3. string delim) {
  4. struct Awaiter {
  5. SyncReadStream &s;
  6. DynamicBuffer &&buffers;
  7. string delim;
  8.  
  9. std::error_code ec;
  10. size_t sz;
  11.  
  12. bool await_ready() { return false; }
  13. auto await_resume() {
  14. if (ec)
  15. throw std::system_error(ec);
  16. return sz;
  17. }
  18. void await_suspend(std::experimental::coroutine_handle<> coro) {
  19. net::async_read_until(s, std::move(buffers), delim,
  20. [this, coro](auto ec, auto sz) {
  21. this->ec = ec;
  22. this->sz = sz;
  23. coro.resume();
  24. });
  25. }
  26. };
  27. return Awaiter{ s, std::forward<DynamicBuffer>(buffers), delim };
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement