// Start a new messagebuf, containing separate data for the response part
Message(std::string::size_type sz1, std::string::size_type sz2) : d_message{d_msgbuf}, d_response{d_rspbuf}
{
- // This is extra space in addition to what's already there
- // Different from what string.reserve() does
- d_message.reserve(sz1);
- d_response.reserve(sz2);
+ if (d_msgbuf.capacity() < d_msgbuf.size() + sz1) {
+ // This is extra space in addition to what's already there
+ // Different from what string.reserve() does.
+ d_message.reserve(sz1);
+ }
+ if (d_rspbuf.capacity() < d_rspbuf.size() + sz2) {
+ d_response.reserve(sz2);
+ }
}
// Construct a Message with (partially) constructed content
// We expect to grow the buffers, in the end the d_message will contains the (grown) d_response
// This is extra space in addition to what's already there
// Different from what string.reserve() does
- d_message.reserve(sz1 + d_rspbuf.length() + sz2);
- d_response.reserve(sz2);
+ std::string::size_type extra = sz1 + d_rspbuf.length() + sz2;
+ if (d_msgbuf.capacity() < d_msgbuf.size() + extra) {
+ d_message.reserve(extra);
+ }
+ if (d_rspbuf.capacity() < d_rspbuf.size() + sz2) {
+ d_response.reserve(sz2);
+ }
}
const std::string& getMessageBuf() const
{