- if (bufsize >= size) {
- copied = size;
- memcpy(whereto, buffer_.data(), size);
- memcpy(static_cast<void*>(buffer_.data()), buffer_.data() + size, bufsize - size);
- buffer_.resize(bufsize - size);
- todo = 0;
- } else {
- copied = bufsize;
- memcpy(whereto, buffer_.data(), bufsize);
- buffer_.clear();
- todo -= bufsize;
- whereto = static_cast<char*>(whereto) + bufsize;
- }
+ copied = std::min(size, bufsize);
+ std::copy_n(begin(buffer_), copied, whereto);
+ buffer_.erase(begin(buffer_), begin(buffer_) + copied);
+ todo -= copied;
+ whereto += copied;