ITK  5.0.0
Insight Segmentation and Registration Toolkit
Classes | Public Types | Public Member Functions | Static Public Attributes | Private Types | Static Private Member Functions | Private Attributes | List of all members
itk::Experimental::IndexRange< VDimension, VBeginAtZero > Class Template Referencefinal

#include <itkIndexRange.h>

Detailed Description

template<unsigned VDimension, bool VBeginAtZero>
class itk::Experimental::IndexRange< VDimension, VBeginAtZero >

Modern C++11 range, supporting efficient iteration over the indices of an image grid space.

The following example prints all indices of an 2-D grid space of size 2x3.

constexpr unsigned Dimension = 2;
const Size<Dimension> size = { {2, 3} };
const ZeroBasedIndexRange<Dimension> indexRange{ size };
for (const Index<Dimension> index : indexRange)
{
std::cout << index;
}
// Output: "[0, 0][1, 0][0, 1][1, 1][0, 2][1, 2]"

The indices from IndexRange can also be used as consecutive locations of a ShapedImageNeighborhoodRange, for example:

for (const auto index : indexRange)
{
shapedImageNeighborhoodRange.SetLocation(index);
for (const PixelType neighborPixel : shapedImageNeighborhoodRange)
{
// Process neighbor pixel...
}
}

IndexRange is designed to conform to Standard C++ Iterator requirements, so that it can be used in range-based for loop, and its iterators can be passed to Standard C++ algorithms.

Author
Niels Dekker, LKEB, Leiden University Medical Center
See Also
ShapedImageNeighborhoodRange

Definition at line 80 of file itkIndexRange.h.

Classes

class  const_iterator
 

Public Types

using const_reverse_iterator = std::reverse_iterator< const_iterator >
 
using IndexType = Index< VDimension >
 
using iterator = const_iterator
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using SizeType = Size< VDimension >
 

Public Member Functions

iterator begin () const noexcept
 
const_iterator cbegin () const noexcept
 
const_iterator cend () const noexcept
 
const_reverse_iterator crbegin () const noexcept
 
const_reverse_iterator crend () const noexcept
 
 IndexRange () noexcept
 
 IndexRange (const SizeType &gridSize)
 
reverse_iterator rbegin () const noexcept
 
reverse_iterator rend () const noexcept
 
std::vcl_size_t size () const noexcept
 
template<bool VIsSubstitutionFailure = VBeginAtZero, typename TVoid = typename std::enable_if<!VIsSubstitutionFailure>::type>
 IndexRange (const ImageRegion< VDimension > &imageRegion)
 
iterator end () const noexcept
 
bool empty () const noexcept
 

Static Public Attributes

static constexpr unsigned Dimension = VDimension
 

Private Types

using MinIndexType = typename iterator::MinIndexType
 

Static Private Member Functions

static IndexType CalculateMaxIndex (const MinIndexType &minIndex, const SizeType &size)
 

Private Attributes

IndexType m_MaxIndex
 
MinIndexType m_MinIndex
 

Member Typedef Documentation

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::const_reverse_iterator = std::reverse_iterator<const_iterator>

Definition at line 301 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::IndexType = Index<VDimension>

Definition at line 85 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::iterator = const_iterator

Definition at line 299 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::MinIndexType = typename iterator::MinIndexType
private

Definition at line 438 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::reverse_iterator = std::reverse_iterator<iterator>

Definition at line 300 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
using itk::Experimental::IndexRange< VDimension, VBeginAtZero >::SizeType = Size<VDimension>

Definition at line 84 of file itkIndexRange.h.

Constructor & Destructor Documentation

template<unsigned VDimension, bool VBeginAtZero>
itk::Experimental::IndexRange< VDimension, VBeginAtZero >::IndexRange ( )
inlinenoexcept

Default-constructor. Constructs an empty range.

Note
The other five "special member functions" (copy-constructor, copy-assignment operator, move-constructor, move-assignment operator, and destructor) are implicitly defaulted, following the C++ "Rule of Zero".

Definition at line 308 of file itkIndexRange.h.

References itk::Index< VDimension >::back().

template<unsigned VDimension, bool VBeginAtZero>
itk::Experimental::IndexRange< VDimension, VBeginAtZero >::IndexRange ( const SizeType gridSize)
inlineexplicit

Constructs a range of indices for the specified grid size.

Definition at line 321 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
template<bool VIsSubstitutionFailure = VBeginAtZero, typename TVoid = typename std::enable_if<!VIsSubstitutionFailure>::type>
itk::Experimental::IndexRange< VDimension, VBeginAtZero >::IndexRange ( const ImageRegion< VDimension > &  imageRegion)
inlineexplicit

Constructs a range of indices for the specified image region.

Note
This function is unavailable when VBeginAtZero is true (in case there is a substitution failure, and C++ "SFINAE" kicks in).

Definition at line 337 of file itkIndexRange.h.

Member Function Documentation

template<unsigned VDimension, bool VBeginAtZero>
iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::begin ( ) const
inlinenoexcept
template<unsigned VDimension, bool VBeginAtZero>
static IndexType itk::Experimental::IndexRange< VDimension, VBeginAtZero >::CalculateMaxIndex ( const MinIndexType minIndex,
const SizeType size 
)
inlinestaticprivate

Definition at line 440 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
const_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::cbegin ( ) const
inlinenoexcept

Returns a const iterator to the first index. Provides only read-only access to the index data.

Definition at line 372 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::begin().

template<unsigned VDimension, bool VBeginAtZero>
const_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::cend ( ) const
inlinenoexcept

Returns a const 'end iterator' for this range.

Definition at line 378 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::end().

template<unsigned VDimension, bool VBeginAtZero>
const_reverse_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::crbegin ( ) const
inlinenoexcept

Returns a const reverse 'begin iterator' for this range.

Definition at line 396 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::rbegin().

template<unsigned VDimension, bool VBeginAtZero>
const_reverse_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::crend ( ) const
inlinenoexcept

Returns a const reverse 'end iterator' for this range.

Definition at line 402 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::rend().

template<unsigned VDimension, bool VBeginAtZero>
bool itk::Experimental::IndexRange< VDimension, VBeginAtZero >::empty ( ) const
inlinenoexcept
template<unsigned VDimension, bool VBeginAtZero>
iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::end ( ) const
inlinenoexcept
template<unsigned VDimension, bool VBeginAtZero>
reverse_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::rbegin ( ) const
inlinenoexcept

Returns a reverse 'begin iterator' for this range.

Definition at line 384 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::end().

Referenced by itk::Experimental::IndexRange< VDimension, VBeginAtZero >::crbegin().

template<unsigned VDimension, bool VBeginAtZero>
reverse_iterator itk::Experimental::IndexRange< VDimension, VBeginAtZero >::rend ( ) const
inlinenoexcept

Returns a reverse 'end iterator' for this range.

Definition at line 390 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::begin().

Referenced by itk::Experimental::IndexRange< VDimension, VBeginAtZero >::crend().

template<unsigned VDimension, bool VBeginAtZero>
std::vcl_size_t itk::Experimental::IndexRange< VDimension, VBeginAtZero >::size ( ) const
inlinenoexcept

Returns the size of the range, that is the number of indices.

Definition at line 409 of file itkIndexRange.h.

References itk::Experimental::IndexRange< VDimension, VBeginAtZero >::m_MaxIndex, and itk::Experimental::IndexRange< VDimension, VBeginAtZero >::m_MinIndex.

Member Data Documentation

template<unsigned VDimension, bool VBeginAtZero>
constexpr unsigned itk::Experimental::IndexRange< VDimension, VBeginAtZero >::Dimension = VDimension
static

Definition at line 83 of file itkIndexRange.h.

template<unsigned VDimension, bool VBeginAtZero>
IndexType itk::Experimental::IndexRange< VDimension, VBeginAtZero >::m_MaxIndex
private
template<unsigned VDimension, bool VBeginAtZero>
MinIndexType itk::Experimental::IndexRange< VDimension, VBeginAtZero >::m_MinIndex
private

The documentation for this class was generated from the following file: