17 #ifndef __itkNaryFunctorImageFilter_txx
18 #define __itkNaryFunctorImageFilter_txx
30 template <
class TInputImage,
class TOutputImage,
class TFunction >
36 this->SetNumberOfRequiredInputs( 2 );
44 template <
class TInputImage,
class TOutputImage,
class TFunction>
51 const unsigned int numberOfInputImages =
52 static_cast< unsigned int >( this->GetNumberOfInputs() );
55 std::vector< ImageRegionConstIteratorType * > inputItrVector;
56 inputItrVector.reserve( numberOfInputImages );
60 for (
unsigned int i=0; i < numberOfInputImages; ++i)
67 inputItrVector.push_back(
new ImageRegionConstIteratorType(inputPtr,outputRegionForThread) );
71 outputRegionForThread.GetNumberOfPixels());
73 const unsigned int numberOfValidInputImages = inputItrVector.size();
75 if( numberOfValidInputImages==0 )
88 typename std::vector< ImageRegionConstIteratorType * >::iterator regionIterators;
89 const typename std::vector< ImageRegionConstIteratorType * >::const_iterator regionItEnd
90 = inputItrVector.end();
92 typename NaryArrayType::iterator arrayIt;
96 arrayIt = naryInputArray.begin();
97 regionIterators = inputItrVector.begin();
98 while ( regionIterators != regionItEnd )
100 *arrayIt++ = (*regionIterators)->Get();
101 ++(*(*regionIterators));
104 outputIt.
Set( m_Functor( naryInputArray ) );
106 progress.CompletedPixel();
110 regionIterators = inputItrVector.begin();
111 while ( regionIterators != regionItEnd )
113 delete (*regionIterators++);