Andre Poenitz wrote:

> On Sat, Mar 27, 2004 at 04:14:48PM +0100, Alfredo Braunstein wrote:
>> This is the merge of paritertator with dociterator, allowing pariterator
>> to go into math-text insets etc.
>> 
>> + const correctness of InsetText::paragraphs
>> + 12 files changed, 145 insertions(+), 358 deletions(-)
> 
> 
> +void DocumentIterator::forwardPar()
> +{
> +     while (true) {
> +             size_t old_depth = depth();
> +             idx_type old_idx = idx();
> +             par_type old_par = par();
> +
> +             forwardPos();
> +
> +             if (empty())
> +                     break;
> +
> +             if (text()) {
> +                     if (depth() > old_depth)
> +                             break;
> +                     if (depth() == old_depth
> +                         && (old_idx != idx() || old_par != par()))
> +                             break;
> +             }
> +     }
> +}
> 
> I would have simply checked for pos() == 0 && inTexted().
> 
> Andre'
> 
> PS:
> 
>  Paragraph * ParIterator::operator->() const
>  {
> -     return &plist()[positions_.back().pit];
> +     return &text()->getPar(par());
>  }
> 
> I wonder whether a namining scheme  'pit' for paroffet_type/par_type
> (which consequenlty could be called 'pit_type') for variables and 'par'
> for 'Paragraph &' variables would make things more uniform 

Completely agreed.


>> Things which are not so clean:
>> 
>> - the use of a tmp InsetText in C&P (we should tackle this with C&P IU)
> 
> We can live with that. Or use an Undo item. Or something new...
> 
>> - the provided implementation of forwardPar (the other one was not
>> working) makes ParIterator to be as "slow" as PosIterator.
> 
> This probably will show up in the profiler somewhere. However,
> PosIterator gained a lot performance-wise from the ParagraphList
> change to a std::vector.

It may be (but it was already quite fast: unnoticeable in Userguide20 was
already before the switch). 
 
>> - the fact that DocIterator doesn't have yet a
>> correct past-the-end position.
> 
> It has.  'DocIterator()' _is_ the past-the-end position (in both
> directions btw). So it basically has the same interface as a
> i/ostream(::iterator) nowadays. I emphasized this a bit by providing

This setup doesn't allow comming back from the end position (and among other
things, cannot satisfy bidi iterator requirements)

> operator!() and operator void*() which basically test for empty() and
> are quite a bit faster than the 'usual' comparison against an explicit
> end iterator.

Oh come on, there's basically no time penalty in testing one single slice
(which is what I think the past-the-end iterator should be)...

Alfredo


Reply via email to