[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
 >
 >
 >