2
0
mirror of https://github.com/boostorg/nowide.git synced 2026-02-21 15:12:30 +00:00

Simplify putback buffer handling of cin a bit

Remove temporary buffer
This commit is contained in:
Alexander Grund
2020-05-04 20:30:41 +02:00
parent 5813214a09
commit 781cf4e912

View File

@@ -144,27 +144,24 @@ namespace nowide {
return 0;
}
char* pnext;
if(pback_buffer_.empty())
{
pback_buffer_.resize(4);
char* b = &pback_buffer_[0];
char* e = b + pback_buffer_.size();
setg(b, e - 1, e);
*gptr() = traits_type::to_char_type(c);
pnext = &pback_buffer_[0] + pback_buffer_.size() - 1u;
} else
{
size_t n = pback_buffer_.size();
std::vector<char> tmp;
tmp.resize(n * 2);
memcpy(&tmp[n], &pback_buffer_[0], n);
tmp.swap(pback_buffer_);
char* b = &pback_buffer_[0];
char* e = b + n * 2;
char* p = b + n - 1;
*p = traits_type::to_char_type(c);
setg(b, p, e);
pback_buffer_.resize(n * 2);
std::memcpy(&pback_buffer_[n], &pback_buffer_[0], n);
pnext = &pback_buffer_[0] + n - 1;
}
char* pFirst = &pback_buffer_[0];
char* pLast = pFirst + pback_buffer_.size();
setg(pFirst, pnext, pLast);
*gptr() = traits_type::to_char_type(c);
return 0;
}