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 // Expand the "variadic template" index sequence by a fold expression. Use `index + 1` instead of `index`, because the
35 // indices from SupportedImageTypes start with 1, while the sequence returned by `std::make_index_sequence()` starts
36 // with zero.
38}
39
40
42template <typename TFunction>
43void
44ForEachSupportedImageType(const TFunction & func)
45{
46 ForEachSupportedImageType(func, std::make_index_sequence<elx::NrOfSupportedImageTypes>());
47}
48
49template <typename TFunction, std::size_t... VIndexSequence>
50bool
51ForEachSupportedImageTypeUntilTrue(const TFunction & func, const std::index_sequence<VIndexSequence...> &)
52{
53 // Expand the sequence by a fold expression of the form (func(n) || func(n - 1) || ... || func(1)).
54 return (func(elx::ElastixTypedef<VIndexSequence + 1>{}) || ...);
55}
56
57
60template <typename TFunction>
61bool
63{
64 return ForEachSupportedImageTypeUntilTrue(func, std::make_index_sequence<elx::NrOfSupportedImageTypes>());
65}
66
67} // namespace elastix
68
69
70#endif
void ForEachSupportedImageType(const TFunction &func, const std::index_sequence< VIndexSequence... > &)
bool ForEachSupportedImageTypeUntilTrue(const TFunction &func, const std::index_sequence< VIndexSequence... > &)


Generated on 2024-07-17 for elastix by doxygen 1.11.0 (9b424b03c9833626cd435af22a444888fbbb192d) elastix logo