
|
[haiku-appserver]
||
[Date Prev]
[09-2005 Date Index]
[Date Next]
||
[Thread Prev]
[09-2005 Thread Index]
[Thread Next]
[haiku-appserver] Re: some help please
- From: Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx>
- To: haiku-appserver@xxxxxxxxxxxxx
- Date: Mon, 19 Sep 2005 16:33:10 +0200
On 2005-09-19 at 12:34:27 [+0200], Stefano Ceccherini wrote:
>
> >Ok, I think I found the problem.
>
> Me again :)
> Sorry to reply to my own posts, but I think that can be fixed by changing
> the line
> "top = bottom + 1;"
>
> in OrRegionComplex() to
>
> "top = max_c(bottom + 1, min_c(first.data[a].top, second.data[b].top));".
This won't work. E.g. when all rects in "second" are already through, b
will point to the last of its rects, whose top will be <= the previous
band's bottom. Thus the next band's top will be "bottom + 1" again, even if
there's still a rect in "first" which starts farther down.
I can say that it doesn't work with certainty, because the change you
proposed, was what I tried myself first. :-)
The idea I had after that, though I never tried that (since just replacing
the ASSERT by a return was so much simpler :-), was to use the line you
propose, but only when both regions aren't though yet (i.e. the bottom of
their last rects has not been passed yet). Otherwise the concerned
region(s) would be ignored in the calculation of the next "top".
CU, Ingo
PS: BTW, I'm not sure, if the conditions for updating the indices in ROr()
couldn't be improved. Currently for the first region it is:
if (first.data[x].bottom >= top && *indexA == -1)
*indexA = x;
Though I suspect we could as well compare with ">= bottom" here, since a
rect that doesn't fullfil this condition too, will be skipped in the next
iteration anyway. Then the final check
if (*indexA == -1)
*indexA = i1;
should probably better set *indexA to first.count - 1.
PPS: This passing of similar parameters and backpassing of indices through
pointers between the involved functions looks a bit like refactoring the
stuff into a helper class that uses non-static methods might be a good idea.
|

|