Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename SyncReadStream, typename DynamicBuffer>
- auto async_read_until(SyncReadStream &s, DynamicBuffer &&buffers,
- string delim) {
- struct Awaiter {
- SyncReadStream &s;
- DynamicBuffer &&buffers;
- string delim;
- std::error_code ec;
- size_t sz;
- bool await_ready() { return false; }
- auto await_resume() {
- if (ec)
- throw std::system_error(ec);
- return sz;
- }
- void await_suspend(std::experimental::coroutine_handle<> coro) {
- net::async_read_until(s, std::move(buffers), delim,
- [this, coro](auto ec, auto sz) {
- this->ec = ec;
- this->sz = sz;
- coro.resume();
- });
- }
- };
- return Awaiter{ s, std::forward<DynamicBuffer>(buffers), delim };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement