On Monday 04 November 2002 11:33 am, Andre Poenitz wrote:
> On Mon, Nov 04, 2002 at 10:47:00AM +0000, Angus Leeming wrote:
> > No, the warning is generated in MathArray::notifyCursorLeaves()
> > immediately below your snippet:
> >     // glue adjacent font insets of the same kind
> >     for (pos_type i = 0; i + 1 < size(); ++i) {
> >             MathFontInset * p = operator[](i).nucleus()->asFontInset();
> >             MathFontInset const * q = operator[](i + 1)->asFontInset();
> >             if (p && q && p->name() == q->name()) {
> >                     p->cell(0).append(q->cell(0));
> >                     erase(i + 1);
> > -                   mathcursor->adjust(i, -1);
> > +                   mathcursor->adjust(i, npos);
> >             }
> >     }
> >
> > npos would make that more understandable.
>
> But it is a '-1' which takes care of the one item removed by erase().
> It is not the 'npos' concept ("last thing in a string").
>
> > My problem, however, lies with:
> > void MathCursor::adjust(pos_type from, size_type size)
> > {
> >     if (cursor().pos_ > from)
> >             cursor().pos_ += size;
> >     if (Anchor_.back().pos_ > from)
> >             Anchor_.back().pos_ += size;
> >     // just to be on the safe side
> >     // theoretically unecessary
> >     normalize();
> > }
> > I suspect this method needs
> >     if (size == size_type)-1)
> >             return;
> > (or npos of course). As it stands it doesn't look as if it can cope with
> > an invalid size.
>
> What is "invalid" size? An "adjustment" of -1 means everything (i.e. the
> Anchor) in the current cell behind the cursor has to be moved "one to the
> left", because at cursor position 1 thing got deleted.
>
> Maybe the problem is the size_type size argument, which should be a
> 'diff_type diff' argument...

Thanks for the explanation. I'm now very happy I didn't commit that "fix" but 
got you to explain what was going on. "diff_type size" feels much better here

        if (cursor().pos_ > from)
                cursor().pos_ += size;

Moreover, since I have (size_type)(-1) == 18446744073709551615 (64 bit arch), 
it seems unneccessarily fragile to retain the current code.

Angus

Reply via email to