[Insight-developers] itkImageConstIteratorWithIndex.h

Miller, James V (Research) millerjv@crd.ge.com
Thu, 24 Apr 2003 09:01:36 -0400


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