Skip to content

Commit 8350f9c

Browse files
blowekampdzenanz
authored andcommitted
STYLE: Use recursive FFT registration for N to 1
Instead of manually listing the FFT filter dimensions to regisiter, use a recursive function templated over an integer. This in the future can easily enable the maximum FFT dimension to be registered as some type of configuration parameter.
1 parent d856379 commit 8350f9c

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

Modules/Filtering/FFT/include/itkFFTImageFilterFactory.h

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -93,46 +93,34 @@ class FFTImageFilterFactory : public itk::ObjectFactoryBase
9393
* with distinct specialization.
9494
* Requires TFFTImageFilter to have the template signature <InputImageType, OutputImageType>.
9595
*/
96-
template <typename InputPixelType, typename OutputPixelType, size_t ImageDimension>
96+
template <typename InputPixelType, typename OutputPixelType, unsigned int D, unsigned int... ImageDimensions>
9797
void
98-
OverrideFFTImageFilterType()
98+
OverrideFFTImageFilterType(const std::integer_sequence<unsigned int, D, ImageDimensions...> &)
9999
{
100-
using InputImageType = Image<InputPixelType, ImageDimension>;
101-
using OutputImageType = Image<OutputPixelType, ImageDimension>;
100+
using InputImageType = Image<InputPixelType, D>;
101+
using OutputImageType = Image<OutputPixelType, D>;
102102
this->RegisterOverride(typeid(typename TFFTImageFilter<InputImageType, OutputImageType>::Superclass).name(),
103103
typeid(TFFTImageFilter<InputImageType, OutputImageType>).name(),
104104
"FFT Image Filter Override",
105105
true,
106106
CreateObjectFunction<TFFTImageFilter<InputImageType, OutputImageType>>::New());
107+
OverrideFFTImageFilterType<InputPixelType, OutputPixelType>(
108+
std::integer_sequence<unsigned int, ImageDimensions...>{});
107109
}
110+
template <typename InputPixelType, typename OutputPixelType>
111+
void
112+
OverrideFFTImageFilterType(const std::integer_sequence<unsigned int> &)
113+
{}
108114

109115
FFTImageFilterFactory()
110116
{
111117
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<float>,
112-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<float>,
113-
1>();
114-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<float>,
115-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<float>,
116-
2>();
117-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<float>,
118-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<float>,
119-
3>();
120-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<float>,
121-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<float>,
122-
4>();
118+
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<float>>(
119+
std::integer_sequence<unsigned int, 4, 3, 2, 1>{});
123120

124121
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<double>,
125-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<double>,
126-
1>();
127-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<double>,
128-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<double>,
129-
2>();
130-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<double>,
131-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<double>,
132-
3>();
133-
OverrideFFTImageFilterType<typename FFTImageFilterTraits<TFFTImageFilter>::template InputPixelType<double>,
134-
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<double>,
135-
4>();
122+
typename FFTImageFilterTraits<TFFTImageFilter>::template OutputPixelType<double>>(
123+
std::integer_sequence<unsigned int, 4, 3, 2, 1>{});
136124
}
137125
};
138126

0 commit comments

Comments
 (0)