[Insight-developers] itkImageConstIteratorWithIndex.h
Luis Ibanez
luis.ibanez@kitware.com
Thu, 24 Apr 2003 09:26:40 -0400
Not really,
Since the purpose of these methods is to control
the iterator's loops, both IsAtBegin() and IsAtEnd()
should return past-the-end conditions. That is:
IsAtBegin() should return = I'm before the begin
ItAtEnd() should return = I'm past the end
Just like the STL "end()" method.
Unless we agree in not using these methods for
controling loops anymore, and rely instead on a
new method : bool PixelsRemaining() const
However,... once we stop using IsAtBegin() and
IsAtEnd() for controling loops... I don't see
much use for these methods.
Luis
---------------------------------
Miller, James V (Research) wrote:
> Luis,
>
> I think the IsAtBegin() and IsAtEnd() methods should always be able
> to answer the questions of whether the iterator is at the first pixel
> or one past the last pixel.
>
> Couldn't the implementations of these methods be
>
> /** Is the iterator at the beginning of the region? "Begin" is defined
> * as the first pixel in the region. */
> bool IsAtBegin(void) const
> {
> return (m_Position == m_Begin);
> }
>
> /** Is the iterator at the end of the region? "End" is defined as one
> * pixel past the last pixel of the region. */
> bool IsAtEnd(void) const
> {
> return (m_Position == m_End);
> }
>
>
>
>>-----Original Message-----
>>From: Luis Ibanez [mailto:luis.ibanez@kitware.com]
>>Sent: Wednesday, April 23, 2003 8:41 PM
>>To: Mark Foskey
>>Cc: Joshua Cates; Miller, James V (Research);
>>insight-developers@public.kitware.com
>>Subject: Re: [Insight-developers] itkImageConstIteratorWithIndex.h
>>
>>
>>
>>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
>> >
>> >
>> >
>>
>>
>>
>>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-developers
>