go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
elxForEachSupportedImageType.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright UMC Utrecht and contributors
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18
19#ifndef elxForEachSupportedImageType_h
20#define elxForEachSupportedImageType_h
21
22#include <elxSupportedImageTypes.h>
23
24#include <utility> // For index_sequence.
25
26
27namespace elastix
28{
29
30template <typename TFunction, std::size_t... VIndexSequence>
31void
32ForEachSupportedImageType(const TFunction & func, const std::index_sequence<VIndexSequence...> &)
33{
34 struct Empty
35 {};
36
37 const auto supportImageTypeWithIndex = [&func](const auto index) {
38 // Use `index + 1` instead of `index`, because the indices from SupportedImageTypes start with 1, while the sequence
39 // returned by `std::make_index_sequence()` starts with zero.
41 return Empty{};
42 };
43
44 // Expand the "variadic template" index sequence by the initialization of a dummy array.
45 const Empty dummyArray[] = { supportImageTypeWithIndex(std::integral_constant<std::size_t, VIndexSequence>{})... };
46 (void)dummyArray;
47}
48
49
51template <typename TFunction>
52void
53ForEachSupportedImageType(const TFunction & func)
54
55{
56 ForEachSupportedImageType(func, std::make_index_sequence<elx::NrOfSupportedImageTypes>());
57}
58
59} // namespace elastix
60
61
62#endif
void ForEachSupportedImageType(const TFunction &func, const std::index_sequence< VIndexSequence... > &)


Generated on Wed 12 Apr 2023 for elastix by doxygen 1.9.6 elastix logo