[Insight-developers] itkImageConstIteratorWithIndex.h
Luis Ibanez
luis.ibanez@kitware.com
Wed, 23 Apr 2003 20:40:56 -0400
Hi
The current behavior of IsAtBegin() and ItAtEnd() is
the right one. It shouldn't be changed. The issue is
just to document their behavior.
----
These two methods are intended to be the stopping conditions
of while loops.
IsAtBegin() is only used when the iterator is use as a
reverse iterator like
it.GoToEnd()
while( !it.IsAtBegin() )
{
// do something here
--it;
}
IsAtBegin() is not intended to be called in forward iteration.
Same thing with IsAtEnd(), this method is not intended to be
called after GoToEnd() but rahter after GoToBegin(). Like in
the classical loop:
it.GoToBegin()
while( !it.IsAtEnd() )
{
// do something here
++it;
}
The two methods are just returning if there are still some
pixels to be visited, not really if the iterator is at the
end position.
We could as well rename both methods as:
it.PixelsRemaining()
then,
both loops will look similar:
it.GoToBegin()
while( it.PixelsRemaining() )
{
// do something here
++it;
}
and
it.GoToEnd()
while( it.PixelsRemaining() )
{
// do something here
--it;
}
Luis
------------------
Mark Foskey wrote:
> OK, I will investigate.
>
> Joshua Cates wrote:
>
>> I agree. This sounds like a bug to me.
>>
>> Josh.
>>
>>
>> On Wed, 23 Apr 2003, Miller, James V (Research) wrote:
>>
>>
>>> I think your examples should both print 1.
>>>
>>> So if possible (without breaking existing code), I would change the
>>> code. A
>>> call to IsAtBegin() should return true if it is called immediately
>>> after a
>>> GoToBegin(). Same for "end" versions.
>>>
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: Mark Foskey [mailto:mark_foskey@unc.edu]
>>>> Sent: Wednesday, April 23, 2003 12:12 PM
>>>> To: insight-developers@public.kitware.com
>>>> Subject: [Insight-developers] itkImageConstIteratorWithIndex.h
>>>>
>>>>
>>>> In itkImageConstIteratorWithIndex.h, both IsAtBegin() and IsAtEnd()
>>>> return !m_Remaining. It appears that
>>>>
>>>> it.GoToBegin();
>>>> std::cout << it.IsAtBegin() << std::endl;
>>>>
>>>> it.GoToEnd();
>>>> std::cout << it.IsAtEnd() << std::endl;
>>>>
>>>> will both print 0. Do we at least want to document this behavior?
>>>> I can imagine scenarios where you might want to test whether an
>>>> iterator has been incremented since GoToBegin() was called, although
>>>> I think they would be rare.
>>>>
>>>> --
>>>> Mark Foskey (919) 843-5436 Computer-Aided Diagnosis and
Display Lab
>>>> mark_foskey@unc.edu Department of Radiology, CB 7515, UNC
>>>> http://www.cs.unc.edu/~foskey Chapel Hill, NC 27599-7515
>>>>
>>>> _______________________________________________
>>>> Insight-developers mailing list
>>>> Insight-developers@public.kitware.com
>>>> http://public.kitware.com/mailman/listinfo/insight-developers
>>>>
>>>
>>> _______________________________________________
>>> Insight-developers mailing list
>>> Insight-developers@public.kitware.com
>>> http://public.kitware.com/mailman/listinfo/insight-developers
>>>
>>
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers@public.kitware.com
>> http://public.kitware.com/mailman/listinfo/insight-developers
>
>
>