[Libreoffice] Question about iterator management in sw/source/core/fields/cellfml.cxx

Lubos Lunak l.lunak at suse.cz
Thu Feb 2 02:26:20 PST 2012


On Thursday 02 of February 2012, Stephan Bergmann wrote:
> On 02/01/2012 11:40 PM, julien2412 wrote:
> > Here are the lines :
> >      961             // dann mal die Tabellenkoepfe raus:
> >      962             for( SwSelBoxes::iterator it = rBoxes.begin(); it !=
> > rBoxes.end(); ++it )
> >      963             {
> >      964                 pLine = it->second->GetUpper();
> >      965                 while( pLine->GetUpper() )
> >      966                     pLine = pLine->GetUpper()->GetUpper();
> >      967
> >      968                 if( pTbl->IsHeadline( *pLine ) )
> >      969                 {
> >      970                     rBoxes.erase( it++ );
> >      971                     --it;
> >      972                 }
> >      973             }

> > patch proposed
> > http://nabble.documentfoundation.org/file/n3708331/sw_patch.txt
> > sw_patch.txt
>
> The patch solves that, but I can offer a number of remarks:
>
> * I would not replace the for loop with a while one, it unnecessarily
> makes the code longer, with the general additional minor drawback of
> enlarging the scope of the index variable.  I also would not extract
> aEnd; it makes the code longer and requires a tiny additional mental
> step to ascertain oneself that it is indeed not invalidated by the loop
> body.
>
> * You accidentally changed the indentation of the loop body.
>
> * Hungarian notation is ugly, esp. for trivialities like loop index
> variables.

 I agree with all the points, but in Julien's defense, I remember exactly this 
same approach was pushed in recently as a fix to the same issue elsewhere. 
Perhaps we should agree on what the recommended way is? I personally think 
the simplest and most elegant solution is to go with 'it = container.erase( 
it );" and move the "++it" out of for()'s parentheses to an else block of the 
if() condition (oh well, ease of use clearly wasn't one of priorities for STL 
designers).

-- 
 Lubos Lunak
 l.lunak at suse.cz


More information about the LibreOffice mailing list