On 09/17/2010 05:25 AM, Alex Rousskov wrote:
On 09/03/2010 09:21 AM, Kinkie wrote:

 > SBuf& SBuf::append(const SBuf &S)
 > {
 > debugs(SBUF_DEBUGSECTION,7,
 > MYNAME << "this=" << (void *)this <<
 > "appending=" <<(void *)&S<<")");
 > if (!store_->canAppend(bufEnd(),S.length())) {
 > grow(length()+S.length());
 > }

Please remove all such canAppend() guards. Just call grow(). It is much
safer than risking to forget a guard. Your grow() should not reAlloc if
growth is not needed. You may rename grow() to assureSpace() or similar
if you prefer but do not split the growth need check and the realloc
call in the "user" code.

The standard name for "make sure we have enough space" method is "reserve". See std::string::reserve() documentation for what it may and must do. Use it instead of the canAppend+grow duet.

Thank you,

Alex.

Reply via email to